2011-03-25 17:37:45     分类: 其他
摘要: Nginx服务器配置指令

Nginx配置文件基本结构如下:

……                                            // 全局块

events {                                     // events块
    ……                                       
}

http {                                        // http块
    ……                                       // http全局快
    server {
        ……                                   // server全局块
        location [PATTERN]  {
            ……                               // location块
        }
        location [PATTERN] {
            ……                          
        }
    }
    server {
        ……
    }
}

1. 全局块

全局快用于设置一些影响nginx服务器整体运行的配置指令。

user nobody nobody;

worker_processes auto;
worker_cpu_affinity auto;

pid          /usr/local/nginx/logs/nginx.pid;
error_log   /home/wwwlogs/nginx_error.log  crit;

worker_rlimit_nofile 65535;

1.1 配置nginx运行用户

语句:

user user [group];

如果配置该指令则只有指定的用户或指定用户组中的成员才可以启用nginx进程,其它用户启动则会报错。

注释掉该指令以及将用户或用户组设置为nobofy,就可以允许任何用户启动。

配置worker process工作进程数

worker_processes number | auto;

默认是1,nginx官网方文档建议设置为1即可,进程数太多会增加主进程调度负担,也可能会影响系统的IO效率。

但并非一概而论,为了有效的利用多核CPU,可以适当地将该参数增大,从而可以并行更快地处理更多的任务,通常将工作进程数设置为CPU核心的倍数,一般是1倍或2倍。

在增加工作进程后,就有必要为每个进程分配CPU的工作内核,语句:

woker_cpu_affinity  0001 0100 1000 0010;

配置进程PID存放路径

pid        /usr/local/nginx/logs/nginx.pid;

配置错误日志存放路径

error_log  /home/wwwlogs/nginx_error.log  crit;

1.5 配置进程最大打开文件数

worker_rlimit_nofile 65535;

最大可以是65535

2 Events块

events块设计的指令主要影响nginx服务器与用户的网络连接

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept off;
        accept_mutex off;
    }

配置事件驱动模型

use select | poll | kqueue | epoll | rtsig |  /dev/poll |  eventport 

配置最大连接数

worker_conections number:

默认为512,最大连接数不仅包含与前端用户建立的连接数,还包括所有可能的连接数。最大连接数值不能大于操作系统支持打开的最大文件句柄数量。

设置网络连接的序列化

accepct_mutex on | off;

当该配置打开时,系统将会对nginx进程接收连接进行序列化,防止多个进程对连接的争抢。这主要是是为了解决“惊群”问题,主要是指:当某一时刻是由一个网络连接到来时,多个睡眠进程会被同时叫醒,但只有一个进程可能获得连接,如果每次唤醒的进程数太多,或影响系统性能。

配置是否允许同时接受多个网络连接

multi_accepct on | off;

每个nginx服务器的worker process进程都有能力同时接受多个新到达的网络连接,可以通过该条命令设置。

3. HTTP块

http块可配置代理、缓存以及日志等巨大多数的动能以及第三方模块。同时http块可以包含多个server块

http {
        include       mime.types;
        default_type  application/octet-stream;

        server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile on;
        sendfile_max_chunk 512k;
        tcp_nopush on;
        tcp_nodelay on;

        keepalive_timeout 60;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;

        server_tokens off;
        access_log off;
}        

配置MIME-type

nginx必须配置MIME Type用于识别前端请求的资源类型。

types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;

    text/mathml                                      mml;
    text/plain                                       txt;
    text/vnd.sun.j2me.app-descriptor                 jad;
    text/vnd.wap.wml                                 wml;
    text/x-component                                 htc;

    image/png                                        png;
    image/svg+xml                                    svg svgz;
    image/tiff                                       tif tiff;
    image/vnd.wap.wbmp                               wbmp;
    image/webp                                       webp;
    image/x-icon                                     ico;
    image/x-jng                                      jng;
    image/x-ms-bmp                                   bmp;

    font/woff                                        woff;
    font/woff2                                       woff2;

    application/java-archive                         jar war ear;
    application/json                                 json;
    application/mac-binhex40                         hqx;
    application/msword                               doc;
    application/pdf                                  pdf;
    application/postscript                           ps eps ai;
    application/rtf                                  rtf;
    application/vnd.apple.mpegurl                    m3u8;
    application/vnd.google-earth.kml+xml             kml;
    application/vnd.google-earth.kmz                 kmz;
    application/vnd.ms-excel                         xls;
    application/vnd.ms-fontobject                    eot;
    application/vnd.ms-powerpoint                    ppt;
    application/vnd.oasis.opendocument.graphics      odg;
    application/vnd.oasis.opendocument.presentation  odp;
    application/vnd.oasis.opendocument.spreadsheet   ods;
    application/vnd.oasis.opendocument.text          odt;
    application/vnd.openxmlformats-officedocument.presentationml.presentation
                                                     pptx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                                                     xlsx;
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
                                                     docx;
    application/vnd.wap.wmlc                         wmlc;
    application/x-7z-compressed                      7z;
    application/x-cocoa                              cco;
    application/x-java-archive-diff                  jardiff;
    application/x-java-jnlp-file                     jnlp;
    application/x-makeself                           run;
    application/x-perl                               pl pm;
    application/x-pilot                              prc pdb;
    application/x-rar-compressed                     rar;
    application/x-redhat-package-manager             rpm;
    application/x-sea                                sea;
    application/x-shockwave-flash                    swf;
    application/x-stuffit                            sit;
    application/x-tcl                                tcl tk;
    application/x-x509-ca-cert                       der pem crt;
    application/x-xpinstall                          xpi;
    application/xhtml+xml                            xhtml;
    application/xspf+xml                             xspf;
    application/zip                                  zip;

    application/octet-stream                         bin exe dll;
    application/octet-stream                         deb;
    application/octet-stream                         dmg;
    application/octet-stream                         iso img;
    application/octet-stream                         msi msp msm;

    audio/midi                                       mid midi kar;
    audio/mpeg                                       mp3;
    audio/ogg                                        ogg;
    audio/x-m4a                                      m4a;
    audio/x-realaudio                                ra;

    video/3gpp                                       3gpp 3gp;
    video/mp2t                                       ts;
    video/mp4                                        mp4;
    video/mpeg                                       mpeg mpg;
    video/quicktime                                  mov;
    video/webm                                       webm;
    video/x-flv                                      flv;
    video/x-m4v                                      m4v;
    video/x-mng                                      mng;
    video/x-ms-asf                                   asx asf;
    video/x-ms-wmv                                   wmv;
    video/x-msvideo                                  avi;
}

使用default_type配置了用于处理前端请求的MIME类型,该命令还可以在server和location块中配置。

配置允许sendfile方式传输文件

sendfile on | off;
sendfile_max_chunk 512k;
tcp_nopush on;
tcp_nodelay on;

C语言的sendfile函数在两个文件描述符之间传递数据,由于完全是在内核中操作,从而避免了内核缓存区和用户缓冲区之间的数据拷贝。

配置服务名字hash表

server_names_hash_bucket_size 64;
server_names_hash_max_size 128;

保存服务器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果 hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。因此,如果Nginx给出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.

配置多域名时必须打开该配置。

配置客户端header请求头限制

client_header_buffer_size 16k;
large_client_header_buffers 4 16k;

nginx默认的header长度上线是4k,如果超过就会爆400错误。该指令可在server和location中配置。

配置客户端最大请求体大小

client_max_body_size 128m;

可以解决http上传限制的问题。

配置连接超时

keepalive_timeout 60s ;
client_body_timeout 25s ;
client_header_timeout 30s ;
send_timeout 45s;

keepalive_timeout : 用于指定http的tcp连接保持时间,nginx默认是75秒,而多数浏览器设置为60秒。设置为0则不启用keep alive。

client_body_timeout : 指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。

client_header_timeout : 客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。

send_timeout : 服务端向客户端传输数据的超时时间。

配置隐藏版本号

 server_tokens on | off | build | string;

3. Server块

server块用于配置虚拟主机。server块除了包含全局内容外,还可以包含多个location块。


server
    {
        listen 80;
        #listen [::]:80;
        server_name demo.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/demo;

        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /home/wwwlogs/zhangxihai.cn.log;
    }

文章标签: