linux_Nginx优化
1. 更改默认用户
a. 在nginx.conf中添加user指定用户
user web_nginx web_nginx; # nginx 用户大家都知道,通过更改默认用户实现,和http同级
b. 编译时更改用户
--user=web_nginx --group=nginx ps -ef | grep nginx # 检查进程相关信息 # 安全策略,让所有服务以普通用户身份跑,权限小了,破坏性就低了,安全性高了
2. 配置 work_processes 参数
work_processes auto;
grep "physical id" /proc/cpuinfo # 查看cpu核数 # top 后按 1 也是查看cpu核数 # 考虑cpu的个数和核数,依据服务场景,考虑最高 2*cpu个数*单个cpu核数 # auto会去自动检查
3. 配置每个进程最大打开文件数
work_rlimit_nofile 65535; # 这个参数要小于 65535 , 40000 左右参数最优,不能把系统压死
# 配置在 主配置中 main
4. 配置 events 内对应参数
a. 调节cpu亲和力,软件可能默认配置,把每个进程分配到不同的cpu核心
worker_cpu_affinity 0001 0010 0100 1000; # 这个是4核心cpu,用4个二进制位表示,0表示其中一核心不使用,1表示使用该核心 # 用top命名查看负载情况,监控系统性能指标 # 通过这个压力测试,选择是否配置这个参数,软件默认会优化 # webbench -c 20000 -t 180 http://10.0.0.190/ # -c 表示并发, -t表示时间
b. 事件处理模型的优化
use epoll; # 使用epoll IO多路复用模型 # 标准 epoll 和select 模型,高并发使用epoll模型
c. 调节单个进程最大连接数
work_connections 20480; # 这个参数受os进程最大打开文件数限制,需要执行 ,需要执行 ulimit -HSn 65535 或者 # 配置相应文件后,这个参数设置才能生效,4096 10421 这两个参数就不错了 # 最大连接数 = work_process * work_connections # 思想:数据库相当于马路,并发相当于卡车,数据库才是瓶颈,不能把数据库压蹦了 # 数据库一旦崩溃,任何车辆都不能跑了 # 必要时,舍弃一些连接,保持最核心连接
5. 优化http参数
a. 隐藏Nginx版本信息
curl -I www.yunhello.cn
# 将会看到相应头,模仿浏览器访问 ############################ server_tokens off; # 默认开启状态,off关闭显示服务版本号
b. 优化服务器名字的hash表大小
server_names_hash_max_size 512; server_names_hash_bucket_size 32|64|128; # 单位是 k # grep cache_alignment /proc/cpuinfo 查看cpu缓存行信息 # server_names_hash_max_size 参数是 CPU缓存行的 4~5倍 # server_names_hash_bucket_size 参数取决于CPU缓存行长度(CPU L1)
C. 开启高效的文件传输模式
sendfile on; tcp_nopush on;
tcp_nodelay on;
# 网络IO阻塞
d . 设置连接超时,等待时间
keepalive_timeout 60; # 这个参数主配置文件默认就有,需要设置到对应的server中单独使用
# 如果 -t 检查出错,keepalive_timeout不能配置在主配置文件中 # 单位 秒, tcp建立连接后保持会话状态时间 client_header_timeout 15; # 读取客户端请求头时间,等待时间内,内客户端还没有发送任何数据,断开并返回407错误 client_body_timeout 15; # 读取请求主体时间,结果和读取客户端请求头时间一样 send_timeout 15; # 响应客户端时间,等待时间内,客户端什么都不拿,断开连接 # 大网站核心思想: 先让首屏加载,然后慢慢加载后面的屏,把网页分开发给用户
e. 限制上传文件大小
client_max_body_size 10m; # 请求大于10M将会报413错误,设置为0,表示不限制 # 还受动态语言限制,比如php等
6. 禁止直接通过ip访问服务
vim extra/forbid_ip.conf
# 新建一个server,写入一下数据,禁止用户直接通过ip访问服务器 server { listen 80; server_name ""; return 444; }
7. 配置nginx gzip压缩功能
依赖ngx_http_gzip_module模块,默认支持,可以在http和sever中配置
作用: 对请求内容压缩
优点:
节约网站带宽传输速度快,同时提高用户访问体验
缺点:
占用更多的CPU资源
应用: 文本,普通的数据文件和程序(js, css, html),压缩比最高
不要压缩文件: 图片,附件,视频,FLASH,1k以下文件
gzip on; # 开启gzip压缩 gzip_min_lenght 1k; # 允许压缩的最小文件大小,页面大小可以从浏览器中header头的Content-Length # 默认为0,所有文件都压缩 gzip_buffers 4 32k; # 设置压缩缓冲区大小,申请4个单位为32k的内存作为压缩结果流缓存 # 默认申请与原始数据大小相同的内存空间来存储结果 gzip_http_version 1.1; # 指定压缩版本,默认1.1且大多数浏览器已经支持gzip解压,使用默认即可 gzip_comp_level 3; # 3是压缩比例,数字越大压缩比越大,消耗cpu资源越多,按需求设置 gzip_types text/plain application/javascript text/css application/xml; # 指定压缩数据类型 # text/html 类型总是会被压缩,mime.types查看压缩类型,在Nginx中conf下 gzip_vary on; # vary header 支持,告诉缓存服务器到最终客户才解压
8. 配置缓存过期时间 location
缓存优点:
1. 第一次以后,访问网站快,大部分东西缓存在本地,体验好
2. 节省服务带宽,成本降低
3. 服务器压力降低,成本降低
缓存缺点:
网站如果改版,对应的用户看到的还是旧的(js css 图片)
如何解决这个坏处?
1. 缓存过期时间短一些
2. 缓存资源文件更新时,通过改名,图片和附件不会改,升级更改js和css服务,一般把css、js推送到CDN
企业网站缓存文件时间
1. 常规图片10年
2. 广告图片1天
3. 统计网站浏览工具禁止缓存
语法: expires time;
# 配置在server中location
location ~.*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expries 3650d;
}
location ~.*\.(js|css)?$ {
expries 30d;
}
# 这个时间点和服务时间对应,而不是客户端时候对应
# 还可以控制目录,广告和其他不缓存的内容单独服务器
location ~^/(images|javascript|js|css|flash|media|static)/ {
expires 360d;
}
# 这个()表示目录或者单个文件 / / 本身就包含一个路径
9. 爬虫优化
网站站点目录下写一个robots协议,告诉爬虫什么该爬什么不该爬,但这有个隐患,通过这个协议用户就知道了该网站重点站点目录,一个robots协议可以看出该网站设计和技术水准
location ~(robots.txt) {
log_not_found off;
expires 7d;
break;
}
# robots.txt 爬虫协议,告诉搜索引擎,可以抓取什么内容或禁止爬取什么内容
# 这个文件在网站根目录下,这个也是网站优化的一个点,但是暴露网站重要目录结构
# 用于打官司,robots协议必须清楚
a. 限制爬虫策略
www.baidu.com/robots.txt # 获得相关爬虫信息
通过 http_user_agent 判断 useragent,限制爬虫某些访问,然后通过robots声明,添加在server中,返回403或者一个页面。
access_log中有这么个字段http_user_agent
server {
listen 80;
server_name 127.0.0.1; #添加如下内容即可防止爬虫
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")
{
return 403;
}
# 但是有个问题,限制爬虫同时也干掉了SEO,不利于网站推广,择优考虑
10. 日志优化
不记录检查或者某些图片日志,无用日志占用大量资源
location ~ .*\(js|jpg|jpeg|JPEG|css|bmp|gif|GIF)$ {
access_log off;
}
11. 最小化站点目录权限
最不安全方式:
chmod -R 777 /sitedir
chown -R nginx.nginx /sitedir
最安全的权限:
1. 所有的站点目录的用户和组都应root
2. 所有目录权限都是默认755
3. 所有的文件权限都是默认644
4. 网站服务软件运行的用户不能用root
那,如何解决用户上传文件问题?
动态的web集群和上传集群、浏览,程序分离独立分开,大网站
小型网站,定义不同的虚拟机,然后授权不同的目录
12. 最小化logs目录权限
chmod -R 700 /nginx/logs
chown -R root.root /app/logs
# 其他人和组没有任何权限查看,只有root用户查看,因为Nginx的主进程是root用户
# 就算把权限全部给root还是可以写日志
13. Nginx页面错误优雅显示
如 : 404 错误
1. 创建 404.html放在站点目录下
2. fastcgi_intercept_errors on; # http中拦截错误信息
3. error_page 404 /404.html # sever中写入
14. 使用tmpfs文件系统代替频繁访问的临时目录
mount -t tmfs -o size=16m tmfs /tmp
# size指定大小,看内存大小情况给,一般给2~4G,对于IO很高的临时文件,挂载到内存上
# echo "mount -t tmfs -o size=16m tmfs /tmp" >> /etc/rc.local
# 加入开机自启动
# tail -1 /etc/rc.local
# 检查
linux_Nginx优化的更多相关文章
- 关于DOM的操作以及性能优化问题-重绘重排
写在前面: 大家都知道DOM的操作很昂贵. 然后贵在什么地方呢? 一.访问DOM元素 二.修改DOM引起的重绘重排 一.访问DOM 像书上的比喻:把DOM和JavaScript(这里指ECMScri ...
- In-Memory:内存优化表的事务处理
内存优化表(Memory-Optimized Table,简称MOT)使用乐观策略(optimistic approach)实现事务的并发控制,在读取MOT时,使用多行版本化(Multi-Row ve ...
- 试试SQLSERVER2014的内存优化表
试试SQLSERVER2014的内存优化表 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技 ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- 03.SQLServer性能优化之---存储优化系列
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概 述:http://www.cnblogs.com/dunitian/p/60413 ...
- 前端网络、JavaScript优化以及开发小技巧
一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...
- 数据库优化案例——————某市中心医院HIS系统
记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...
- 【前端性能】高性能滚动 scroll 及页面渲染优化
最近在研究页面渲染及web动画的性能问题,以及拜读<CSS SECRET>(CSS揭秘)这本大作. 本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲染的 ...
- Web性能优化:What? Why? How?
为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...
随机推荐
- python安装第三方库的三种方法
使用pip 大多数库都可以通过pip安装,安装方法为,在命令行窗口输入 pip install libname libname为库名 某些库通过pip安装不了,可能是因为没有打包上传到pypi中,可以 ...
- C++ 脑筋急转弯
最近重新温习一下C++的基础知识,这里给大家分享一下,独痛苦不如众痛苦. 先贴出一段示例代码如下: class CTest{ public: CTest(){ ); }; ~CTest(){ if ( ...
- Windows内核中的内存管理
内存管理的要点 内核内存是在虚拟地址空间的高2GB位置,且由所有进程所共享,进程进行切换时改变的只是进程的用户分区的内存 驱动程序就像一个特殊的DLL,这个DLL被加载到内核的地址空间中,Driver ...
- Java的参数传递是值传递还是引用传递
当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底是值传递还是引用传递? 答:是值传递.Java 语言的参数传递只有值传递.当一个对象实例作为一个参数被传递到方法中 ...
- docker的相关使用
1.docker ps 列出所有容器 2.docker images 查看docker镜像 3.docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 运行容器 4 ...
- 基于input子系统的sensor驱动调试(一)
要想弄明白世界的本质,就要追根溯源:代码也是一样的道理: 最近调试几个sensor驱动,alps sensor驱动.compass sensor驱动.G-sensor驱动都是一样的架构: 一.基于in ...
- RabbitMQ的基本使用到高级特性
简介 继上一篇 CentOS上安装RabbitMQ讲述RabbitMQ具体安装后,这一篇讲述RabbitMQ在C#的使用,这里将从基本用法到高级特性的使用讲述. 前序条件 这里需要增加一个用户,并且设 ...
- CTF---Web入门第五题 貌似有点难
貌似有点难分值:20 来源: 西普学院 难度:难 参与人数:7249人 Get Flag:2519人 答题人数:2690人 解题通过率:94% 不多说,去看题目吧. 解题链接: http://ctf5 ...
- HDU 1017 A Mathematical Curiosity【水,坑】
A Mathematical Curiosity Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- 51Nod 1004 n^n的末位数字(日常复习快速幂,莫名的有毒,卡mod值)
1004 n^n的末位数字 题目来源: Author Ignatius.L (Hdu 1061) 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数N,输出 ...