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的进程数
查看CPU核数的方法:
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: 请求/分钟

猜你喜欢

转载自www.cnblogs.com/huangxm/p/nginx.html