配置文件的设置包含:

            main          全局设置
            server        主机设置
            upstream      负载均衡服务器设置
            location      部分用于匹配网页设置
关系:      server继承main;
            location继承server;
            upstream不会继承也不会被继承



1、 user  nginx1;

    #运行用户和组;默认用户为nobody;
   
    nginx1   10820 10787  0 12:28 ?        00:00:00 nginx:



2、 worker_processes  16;

    #工作进程数,建议设置为等于CPU总核心数


    ps -ef 时注意观察worker_processes


3、 worker_rlimit_nofile  4096;

    #每个进程打开的文件句柄数=系统总数/4 不要设置成65535


4、 error_log  /usr/log/nginxa1/logs/error.log  warn;
    #全局错误日志存放路径;级别:debug | info | notice | warn | error | crit


5、 pid        logs/nginx.pid;

    #pid文件;


6、     #工作模式及连接数上限
        events {
        #每个进程的最大连接数,不要动不动就65535;
        worker_connections  4096;
        #使用epoll(linux2.6的高性能方式)
        use epoll;
                }

    #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
    #使用epoll(linux2.6的高性能方式)


7、#设定http标签,利用它的反向代理功能提供负载均衡支持
    http {
        #mimie.types 浏览器请求的文件媒体类型       

        include       mime.types;

        #用来告诉浏览器请求的文件媒体类型       

        default_type  application/octet-stream;
        #设定日志格式
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
         
        $remote_addr直接客户端地址
        $http_x_forwarded_for 间接客户端地址(一般前面会有代理服务器)
        $remote_user 远程客户端用户名称
        $time_local记录访问时间与时区
        $request用户的请求,使用的HTTP协议
        $status 返回状态,200,404,304等
        $body_bytes_sents发送的body字节数
        $http_referer 引用页(从哪个链接访问来的)
        $http_user_agent客户端浏览器

        
        #设置请求日志
        access_log  /usr/log/nginxa1/logs/access.log  main;

   

        #include指令,可以包含任何你想要包含的配置文件,支持文件名匹配。
        #include extra/bbs.conf;[root@client scripts]# cat cut_log.sh

        #日志切割脚本范例:

        cd /application/nginx/logs
        mv www_access.log  www_access_$(date +%F -d -1day).log
        /application/nginx/sbin/nginx -s reload
        [root@client scripts]# crontab -l|tail -2
        #cut nginx log by day by oldboy at 201409
        00 00 * * *  /bin/sh  /server/scripts/cut_log.sh >/dev/null 2>&1

        #日志分析软件:syslog、rsyslog、Awstats(svn文档)、flume、logstash、scrilbe、kafka、

  


      

8、    设定请求缓冲
       

        #接收header的缓冲区大小
        client_header_buffer_size    128k;

        该指令用于设置客户端请求的Header头缓冲区大小,默认值为4KB。                       

        large_client_header_buffers  4 256k;
       

        #客户端包体缓冲区大小
        client_body_buffer_size 1024k;
       

        #设置客户端能够上传的文件大小,默认为1m

        client_max_body_size 8m;

        

        

        sendfile on;

        #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改 成off。

        #开启目录列表访问,合适下载服务器,默认关闭。

        autoindex on;

        #防止网络阻塞

        tcp_nopush on;

        #防止网络阻塞        

        tcp_nodelay on;

        #长连接超时时间,单位是秒

        keepalive_timeout 120;


        #默认编码
        #charset GBK;


        #长连接保持时间
        keepalive_timeout  120;


        #不显示Nginx版本号
        server_tokens off;

        

        #服务器名字的hash表大小

        server_names_hash_bucket_size  64;
        server_names_hash_max_size: 512



 9、#开启gzip模块,要求安装gzip 在运行./config时要指定
        gzip on;


        #最小压缩文件大小,默认0
        gzip_min_length  1100;

 

        #压缩缓冲区
        gzip_buffers    4 16k;


        #压缩类型
        gzip_types  text/plain application/x-javascript text/css application/xml;

       

        #压缩比率,1压缩比最小速度最快;9压缩比最大,传输快,但速度慢,比较消耗cpu资源;
        gzip_comp_level  9;


        #压缩通过代理的所有文件
        gzip_proxied     any;
        #vary header支持

        #前端服务缓存压缩       

        gzip_vary        on;


        #压缩版本(默认1.1,前端为squid2.5使用1.0)
        gzip_http_version 1.0;


        #输出缓冲区
        output_buffers  4 32k;
        postpone_output  1460;

        #此功能同apache的mod_deflate压缩功能,依赖ngx_http_gzip_module模块,默认已安装


10、代理设置;
       
        #代理连接超时时间
        proxy_connect_timeout  120;


        #代理发送超时时间
        proxy_send_timeout  120;


        #代理读超时时间
        proxy_read_timeout  120;


        #设置从后端被代理服务器的响应内容缓冲区大小
        proxy_buffer_size  512k;


        #开启从后端被代理服务器的响应内容缓冲.
        proxy_buffering on;


        #设置从被代理的后端服务器取得的响应内容缓冲区的大小和数量
        proxy_buffers 32 512k;  
    
        #客户端发送header超时
        client_header_timeout  3m;


        #客户端发送内容超时
        client_body_timeout    3m;


        #发送到客户端超时
        send_timeout           3m;

        #proxy_buffers缓冲区,网页平均在32k以下的设置   

        proxy_buffers 4 32k;

        #高负荷下缓冲大小(proxy_buffers*2)

        proxy_busy_buffers_size 64k; #

       

        #设定缓存文件夹大小,大于这个值,将从upstream服务器传

        proxy_temp_file_write_size 64k;



        

        负载均衡器发给web_server的优化;
        参数如下:
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size 50m;
        client_body_buffer_size 256k;
        proxy_connect_timeout 30;
        proxy_send_timeout 30;
        proxy_read_timeout 60;
 
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
        proxy_max_temp_file_size 128m;
        proxy_store on;
        proxy_store_access   user:rw  group:rw  all:r;
        #proxy_temp_path      /dev/shm/nginx_proxy;
        #proxy_temp_path       /data2/nginx_cache;




11、根据cpu核数优化优化进程数;    

    查看cpu核数
    grep "physical id " /proc/cpuinfo
    physical id    : 0
    address sizes    : 40 bits physical, 48 bits virtual
    physical id    : 0
    address sizes    : 40 bits physical, 48 bits virtual

    调度硬件分配
      不同的cpu对应配置参考如下
      四核cpu服务器参数配置:
      worker_cpu_affinity 0001 0010 0100 1000;
      #nginx进程CPU亲和力,即把不同的进程分给不同的CPU处理。这里0001 0010 0100 1000是掩    码,分别代表第1、2、3、4颗cpu核心。
      八核cpu服务器参数配置:
      worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
      worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;


      taskset   调整cpu分配  
      另外(taskset - retrieve or set a process’s CPU affinity)命令本身也有分配CPU的功能。

      例如:taskset -c 1,2,3 /etc/init.d/mysql start
      资料:http://www.cnblogs.com/edwardlost/archive/2010/10/23/1858991.html




12、fastcgi 参数调整  秒
 
    fastcgi调优(配合PHP引擎动态服务)

    fastcgi_connect_timeout 300;
    #指定连接到后端FastCGI的超时时间


    fastcgi_send_timeout 300;
    #向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。


    fastcgi_read_timeout 300;
    #指定接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。


    fastcgi_buffer_size 64k;
    #指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个64KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小。
   

    fastcgi_buffers 4 64k;

    #指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等。


   fastcgi_busy_buffers_size 128k;
   #建议为fastcgi_buffers的两倍


   fastcgi_temp_file_write_size 128k;
   #在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍,设置上述数值设置太小时若负载上来时可能报 502 Bad Gateway


    fastcgi_cache oldboy_nginx
    #表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502错误的发生,但是开启缓存也可能会引起其它问题,要根据具体情况选择。

   
    fastcgi_cache_valid 200 302 1h;
    #用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一个小时


    fastcgi_cache_valid 301 1d;
    #将301应答缓存1天


    fastcgi_cache_valid any 1m;
    #将其它应答缓存为1分钟


    fastcgi_cache_min_uses 1;
    #缓存在fastcgi_cache_path指令inactive参数值时间内的最少使用次数

    ####进程交互会产生零时文件



13、upstream的负载均衡

        upstream xxxx.xx.net{
              #weigth参数表示权值,权值越高被分配到的几率
              #sru_id=a:index=1 ,srun_id=b:index=2, srun_id=c:index=3,srun_id=d:index=4
              server  10.110.5.81:8081 max_fails=3 fail_timeout=30s srun_id=a;
              server  10.110.5.82:8081 max_fails=3 fail_timeout=30s srun_id=b;
              server  10.110.5.83:8084 max_fails=3 fail_timeout=30s srun_id=c;
              server  10.110.5.84:8084 max_fails=3 fail_timeout=30s srun_id=d;
              #保证按照seesion分发
              jvm_route $cookie_JSESSIONID|sessionid;
              #jvm_route $cookie_JSESSIONID|jsessionid;
         }

        #weight=NUMBER ——设置服务器的权重,权重数高被分配访问数越高,默认权重1.
        #max_fails=NUMBER——在参数fail_timeout指定的时间内对后端服务器请求失败的次数,如果检测到后端服务器无法连接及发生服务器错误(404错误除外),则标记为失败。默认值为1.设置为0这关闭这项检查
        #fail_timeout=TIME——在经历参数max_fails设置的失败次数后,暂停的时间
        #down——标记服务器为永久离线状态,用于ip_hash指令
        #backup——仅仅在非backup服务器全部繁忙的时候才启动
       
        #upstream模块拥有以下变量:
        # $upstream_addr:处理请求的upstream服务器地址
        # $upstream_status:upstream服务器的应答状态
        # $upstream_response_time:Upstream服务器响应时间(毫秒),多个响应以逗号和冒号分隔。
        # $upstream_http_$HEADER:任意的HTTP协议头信息,例如:$upstream_http_host



14、第一个虚拟服务器
      server {
        #侦听192.168.8.x的80端口
        listen       80;

        #主机名地址,可以是ip,或者主机名,多个空格隔开
        server_name  10.10.70.x www.xxx.com;

        #定义服务器的默认网站根目录位置

        root   html/bbs;  

        #定义首页索引文件的名称

        index index.php index.html index.htm;   

        }



15、设定查看状态标签status

          server {
                listen       80;
                server_name  status.xxx.org;
                stub_status on;
                access_log      off;                

                }


16、301重定向

    server {
        listen       80;
        server_name  blog.etiantian.org;
        root    html/blog;
        index index.html index.htm;
     rewrite ^/(.*) http://www.etiantian.org/$1 permanent;
}
    #访问域名下的所有内容跳转到www.etiantian.org /前为域名;

    #为防止别人恶意绑定域名可以使用ip地址重定向;
    #输入ip访问的是第一个域名;
    #.*为内容;$接受;permanent表示永久跳转;


17、expires 缓存功能
    #针对网站运营中的(不经常变化的)图片推送到客户端的浏览器进行缓存;
    优势: 节省宽带 ;减少服务器压力,支持高的并发;浏览器加快,提升用户体验;
    劣势: 网站跟新内容后客户端可能是旧的;测试的时候希望是新的,总是看不到;广告。统计的代码不准确。
    解决劣势
    根据业务需求设置expires的过期时间;
    图片更改(重新上传); 时间1年-10年
    广告,统计,不缓存 ;
    网站改版 元素要改名js ,css ;
    缓存cdn的资源  (***图片) 清理源站图片;让其清理缓存。 (接口 API 或者是web界面管理)

    例 :location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
          expires      3650d;
    }
    location 满足条件执行。满足.执行...
    范例2:
    location ~ .*\.(js|css)?$
    {
          expires      30d;
    }
   #server标签里;date -s ""  修改时间 hwlock -c 写入系统时间;



18、防盗链


    location

    #表示对哪种类型的文件实行防盗链     ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {

         valid_referers     none blocked *.yiibase.com yiibase.com;

    #来源判断;

         if($invalid_referer)         {

         #rewrite     ^/ http://www.xxx.com/error.html;

    #返回结果,可以指定具体的图片;     

         return403;
         }

    }


19、url访问控制(文件、图片、ip都可以设置):

    location ~ ^/p_w_picpaths/.*\.(php|php5)$  
#图片
            {
                  deny all;
    location ~ ^/static/.*\.(php|php5)$
               }
         {
                   deny all;
            }
    location ~* ^/data/(p_w_upload|avatar)/.*\.(php|php5)$
#附件和头像        
{
            deny all;
        }


      location /admin/ { return 403; }
              location /templates/ { return 403; }
#返回状态返回码;location是有顺序的,根据规则调整;


20、伪静态:

    待补~~!!!


21、robot.txt 机器人设置

    查看: http://www.baidu.com/robots.txt

    使用:网站的收录几率降低;

    不使用:降低网站的资源消耗;

    范例:根据不同的浏览器访问设置:

    if ($http_user_agent ~* "Firefox|MSIE")
    {
    return 403;
    }


    

22、保证网站不遭受木马侵入

    1、站点内所有目录和文件的用户和组都因该为root!
    2、站点内所有目录权限默认为755;(不能往目录放文件)
    3、站点内所有文件权限默认为644;(不能改文件)
    注意 网站服务的程序使用的用户不可以使用root。
    解决方案:找到上传的目录,授权nginx 可以访问;比较安全!
    架构上优化:动态web集群  (架三个web服务,正常浏览、上传、下载各一个服务器)适合所有的web服务器 ;
    mount 挂载优化  : mount -o nosuid,noexec,nodev