nginx的优化
1. 隐藏nginx服务的header及错误信息里的版本号信息
http {
server_tokens off;
}
2. 更改nginx默认的用户及用户组
方法1:
user nginx;
nginx这个用户必须 在系统中存在。useradd nginx -s /sbin/nologin –M
方法2:
在编辑的时候指定启动用户,这样就不用管配置文件里的了。
./configure --user=nginx --group=nginx
3. nginx worker 进程个数
worker_processes 8; #根据cpu核数相等或乘2的进程数
grep "physical id" /proc/cpuinfo
或者 top 后按1
4. 根据CPU核数优化nginx进程
worker_cpu_affinity 0001 0010 0100 1000;
即把不同的进程分配给不同的CPU处理。 这里的0001 0010 0100 1000是掩码,代表第1、2、3、4颗CPU核心。
下面是八核服务器的配置:
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; 或 worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;
5. 事件处理模型的优化
events {
use epoll;
}
6. 调整单个进程允许的最大连接数
events { worker_connections 1024; }
7. 优化server name的hash表大小
http { server_names_hash_bucket_size 64; server_names_hash_max_size 512; }
8. 开启高效文件传输模式
sendfile on;
tcp_nopush on;
9. 设置连接的超时时间
php建议短连接, java建议长连接 keepalive_timeout 60; #设置客户端连接保持会话的超时时间。超过这个时间,服务器会关闭该连接 tcp_nodelay on; #打开后,在包含了keepalive的参数才生效 clent_header_timeout 15; #设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,nginx将返回’Request time out(408)’错误 client_body_timeout 15; #设置客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,nginx将返回‘Request time out (408)’错误 send_timeout 15; #指定响应客户端的超时时间,这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx将关闭连接
10. 上传文件大小限制 (根据实际情况调整)
client_max_body_size 10m;
11. fastcgi调优
#指定连接到后端FastCGI的超时时间 fastcgi_connect_timeout 60; #向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送#请求的超时时间 fastcgi_send_timeout 60; #指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用一个#64KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定#的缓冲区大小 fastcgi_read_timeout 64k; #指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求, 如果php产生的页#面大小为256k, 那么会为其分配4个64k的缓冲区来缓存;如果大于256KB, 那么大#于的那部分就会缓存到fastcgi_temp指定的路径,但是这样不好,因为硬盘速度比#内存慢很多。一般将该值设为页面的平均值。如果大部分页面为256k, 那么可以#设置为"16 16k"、"4 64k" fastcgi_buffers 4 64k; #建议为fastcgi_buffers的两倍 fastcgi_busy_buffers_size 128k; #这个就是上面提到的, 默认值是fastcgi_buffers的两倍,太小可能会报502 fastcgi_temp_file_write_size 128k; #表示开启fastCGI缓存并为其指定一个名称,开启缓存很有用, 可以有效降低cpu#负载,并防止502的发生 fastcgi_cache www_nginx; #用来指定应答代码的缓存 时间,这里是将200和302应答缓存1个小时 fastcgi_cache_valid 200 302 1h; #将301应答缓存1天 fastcgi_cache_valid 301 1d; #将其它应答缓存1分钟 fastcgi_cache_valid any 1m; #缓存 在fastcgi_cache_path指令inactive能数值时间内的最少使用次数 fastcgi_cache_min_users 1;
12. nginx压缩功能gzip
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_tupes text/plain application/x-javascript text/css application/xml; gzip_vary on;
13. 静态资源的缓存
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 3650d; } location ~ .*\.(js|css)?$ { expires 30d; } location ~ ^/(images|javascript|js|css|flash|media|static)/ { expires 360d; }
14. 根据客户端浏览器类型
if ($http_user_agent ~* "Firefox|MSIE") { return 403; }
15. 禁止访问静态目录中的php文件
location ~ ^/images/.*\.(php|php5)$ { deny all; } location ~ ^/static/.*\.(php|php5)$ { deny all; } location ~* ^/data/(attachment|avatar)/.*\.(php|php5)$ { deny all; }
16. 禁止访问管理后台
location /admin/ { return 403; }
17. 限制单IP连接数
limit_conn_zone $binary_remote_addr zone=addr:10m; server { listen 80; server_name www.etiantian.org; root /data0/www/www; index index.html index.htm; access_log /app/logs/www_access.log commonlog; location /download/ { limit_conn addr 1; #limit_rate 20k; } }
18. 限制虚拟主机总数
limit_conn_zone $binary_remote_addr zone=addr:10m; server { listen 80; server_name www.etiantian.org; root /data0/www/www; index index.html index.htm; access_log /app/logs/www_access.log commonlog; location /download/ { limit_conn addr 1; #limit_rate 20k; } }
19. 限制速率
limit_conn_zone $binary_remote_addr zone=addr:10m; limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { listen 80; server_name www.etiantian.org; root /data0/www/www; index index.html index.htm; access_log /app/logs/www_access.log commonlog; location /download/ { limit_conn addr 1; limit_req zone=one burst=5; } }
r/s: 请求/每秒, r/m: 请求/分钟