企业级Nginx Web 服务优化实战

1.隐藏Nginx的软件版本号

server_tokens off;

2.更改默认服务用户

user nginx nginx;

# useradd -r -s /sbin/nologin  -m -d /var/lib/nginx nginx

3.优化Nginx服务的worker进程个数

worker_processes  4|auto;

4.进程与CPU的亲和力

worker_cpu_affinity 0001 0010 0100 1000;

5.Nginx事件处理模型优化

use epoll;

6.单个进程允许的客户端最大连接数

# ulimit -HSn 65535

worker_connections  10240;

7.进程最大打开文件数

worker_rlimit_nofile 65535;

8.优化服务器域名的散列表大小

尽可能使用确切的名字server_name 

9.开启高效文件传输模式

sendfile    on;

tcp_nopush  on;

    tcp_nodelay on;

10.优化Nginx连接参数,调整连接超时时间

  keepalive_timeout  60;

client_header_timeout 15;

    client_body_timeout   60;

    send_timeout 25;

11.上传文件大小的限制

client_max_body_size 8m;

12.压缩

    gzip  on;

    gzip_min_length 1K;

    gzip_buffers 4 32k;

    gzip_http_version 1.1;

    gzip_comp_level 9;

    gzip_types text/css text/xml application/javascript;

    gzip_vary on;

13.Nginx expires 缓存

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

        {

                expires 365d;

        }

  location ~ .*\.(js|css)?$

        {

                expires 10d;

root /usr/share/nginx/html/wqh/;

        }


  location ~ ^/(p_w_picpaths|js|css)/

        {

                expires 30d;

        }

  location ~ (robots.txt)

        {

                expires 7d;

                break;

        }

14.日志

  访问日志的切割

  不记录不需要的访问日志

location ~ .*\.(js|gif|jpg|jpeg|png|bmp|swf)$

        {

               access_log off;       

               root /usr/share/nginx/html/wqh/;

         }

  访问日志的权限

假如日志目录为/app/logs

chown -R root.root /app/logs

        chmod -R 700 /app/logs

不需要在日志目录上给Nginx用户读或写许可

15.禁止解析指定目录下的指定程序

   location ~ ^/p_w_picpaths/.*\.(php|php5|sh|pl|py)$

        {

          deny all;

        }

   写在Nginx处理PHP的配置前面

    location ~* \.(txt|doc)$

        {

          deny all;

          root /usr/share/nginx/html/wqh/;

        }

location  ~ ^/(static)/

{

        deny all;

}

location  ~ ^/(static|js)/

{

        deny all;

}

  禁止访问目录并返回指定的HTTP状态码

       location /admin/ { return 404; }


16.限制网站来源IP

location ~ ^/wqh/

{

  allow 1.1.1.1;

  deny all;

}


17.配置nginx,禁止非法域名解析访问企业网站

server{

listen 80 default_server;

server_name _;

return 501;

}


server{

listen 80 default_server;

servername _;

rewrite ^(.*) http://www.wqh.com/$1 permanent;

}


某域名恶意解析到公司IP

server{

if ($host !~ ^www/.wqh/.com$){

rewrite ^(.*) http://www.wqh.com/$1 permanent;

}

}


18.防盗链

location ~* ^.+\.(jpg|png|flv|zip)$

   {

       valid_referers  none blocked *.wqh.com wqh.com;

       if ($valid_referers)

        {

          rewrite ^/ http://bbs.wqh.com/fang.jpg;

        }

       root /usr/share/nginx/html/wqh/;

   }


19.错误页面优雅显示

      error_page 404 /404.html;

      error_page 404 =200 /404.html;

      error_page 404 301 400 http://bbs.wqh.com/fang.jpg;



20.目录文件权限控制

   目录755 文件644

   用户组都是root

   用户上传目录755 用户组nginx


21.防爬虫优化

   if ($http_user_agent ~* LWP::Simple|BBBike|wget)

   {

    return 403;

   }


23.测试禁止不同的浏览器访问

   if ($http_user_agent ~* "Firefox|MSIE")

  {

    rewrite ^(.*) http://www.allinmd.cn/$1 permanent;

  }

24.nginx限制http的请求方法

  if ($request_method ~* ^(GET)$ )

  {

     return 501;

  }