nginx的优化 1. 隐藏nginx服务的header及错误信息里的版本号信息 2. 更改nginx默认的用户及用户组 3. nginx worker 进程个数 4. 根据CPU核数优化nginx进程 5. 事件处理模型的优化 6. 调整单个进程允许的最大连接数 7. 优化server name的hash表大小 8. 开启高效文件传输模式 9. 设置连接的超时时间 10.  上传文件大小限制 (根据实际情况调整) 11. fastcgi调优 12. nginx压缩功能gzip 13. 静态资源的缓存 14. 根据客户端浏览器类型 15. 禁止访问静态目录中的php文件 16. 禁止访问管理后台 17. 限制单IP连接数 18. 限制虚拟主机总数 19. 限制速率

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: 请求/分钟