7.3.3. 配置简介

HTTP配置

ngx_http_core_module 模块支持内置变量

  • $http_user_agent, $http_cookie
  • $args 請求行上的参数
  • $content_length 等于請求头的”Content-Length”, $content_type 为”Content-Type”, $document_root 为当前請求的指令根
  • document_uri 等于 $uri
  • $host
  • $limit_rate 限定的连接比例
  • $request_method, $remote_addr, $remote_port
  • $remote_user: 由 ngx_http_auth_basic_module 认证
  • $request_filename, $request_body_file, $request_uri
  • $query_string, 同 $args
  • scheme: http or https
  • $server_protocol: “HTTP/1.0”, “HTTP/1.1”
  • $server_addr
  • $server_name, $server_port, $uri

HTTP选项

......
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
......
fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;

proxy_buffer_size 128k;
proxy_buffers   32 32k;
proxy_busy_buffers_size 128k;

client_header_buffer_size(默认1k)
large_client_header_buffers(默认4k)

client_max_body_size

[php.ini]post_max_size = 8M
[php.ini]upload_max_filesize = 2M

文件实例

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
user www-data www-data;
worker_processes  8;    #工作进程,根据硬件调整,大于等于cpu核数

error_log  /var/nginx/log/error.log;
pid        /var/nginx/run/nginx.pid;

worker_rlimit_nofile 65535;     #指定进程可以打开的最大描述符.  这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致 



events {
    use epoll;    #使用的网络IO模型. Linux系统椎荐采用epoll模型. FreeBSD系统推荐采用kqueue模型

    worker_connections 65535;   # 工作进程的最大连接数量, 根据硬件调整, 和前面工作进程配合起来用, 尽量大, 但是别把cpu跑到100%就行, 每个进程允许的最多连接数, 理论上每台nginx服务器的最大连接数为worker_processes*worker_connections

    keepalive_timeout 60;   # keepalive超时时间

    client_header_buffer_size 4k;   # 客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小
    # 分页大小可以用命令getconf PAGESIZE 取得::
    #    [root@web001 ~]# getconf PAGESIZE
    #    4096

    open_file_cache max=65535 inactive=60s; # 这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存

    open_file_cache_valid 80s;  # 指多长时间检查一次缓存的有效信息

    open_file_cache_min_uses 1; # open_file_cache指令中的inactive参数时间内文件的最少使用次数, 如果超过这个数字, 文件描述符一直是在缓存中打开的, 如上例, 如果有一个文件在inactive时间内一次没被使用, 它将被移除

}

http {
    include       /etc/nginx/mime.types;    # 设定mime类型,类型由mime.type文件定义
    default_type application/octet-stream;

    # -----日志操作-----------------------------------------------------------------------------
    log_format main '$host $status [$time_local] $remote_addr [$time_local] $request_uri '
            '"$http_referer" "$http_user_agent" "$http_x_forwarded_for" '
            '$bytes_sent $request_time $sent_http_x_cache_hit';
    log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';
    # $remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
    # $remote_user:用来记录客户端用户名称;
    # $time_local: 用来记录访问时间与时区;
    # $request: 用来记录请求的url与http协议;
    # $status: 用来记录请求状态;成功是200,
    # $body_bytes_s ent :记录发送给客户端文件主体内容大小;
    # $http_referer:用来记录从那个页面链接访问过来的;
    # $http_user_agent:记录客户毒啊浏览器的相关信息;
    # 通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址
    # 反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址;
    # ----------------------------------------------------------------------------------

    access_log /dev/null;
    access_log	/var/nginx/log/access.log main;
    # 写到syslog中,并指定syslog的ip/port
    access_log syslog:server=127.0.0.1:9000,facility=local7,tag=nginx,severity=info combined;


    server_names_hash_bucket_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的提示, 那么首要的是增大前一个参数的大小.

    client_header_buffer_size 4k;
    # 客户端请求头部的缓冲区大小, 这个可以根据你的系统分页大小来设置, 一般一个请求的头部大小不会超过1k, 不过由于一般系统分页都要大于1k,所以这里设置为分页大小.分页大小可以用命令getconf PAGESIZE取得

    large_client_header_buffers 8 128k;
    # 客户请求头缓冲大小
    # nginx默认会用client_header_buffer_size这个buffer来读取header值, 如果header过大, 它会使用large_client_header_buffers来读取
    # 如果设置过小, HTTP头/Cookie过大, 会报400错误--->nginx 400 bad request
    # 求行如果超过buffer, 就会报HTTP 414错误--->(URI Too Long)
    # nginx接受最长的HTTP头部大小必须比其中一个buffer大,否则就会报400的HTTP错误(Bad Request)。

    open_file_cache max 102400
    # 使用字段:http, server, location
    # 这个指令指定缓存是否启用, 如果启用,将记录文件以下信息:
    # ·打开的文件描述符, 大小信息和修改时间. 
    # ·存在的目录信息.
    # ·在搜索文件过程中的错误信息
    # --没有这个文件,无法正确读取,参考open_file_cache_errors指令选项:
    # ·max -指定缓存的最大数目,如果缓存溢出,最长使用过的文件(LRU)将被移除
    # 例: 
    # open_file_cache max=1000 inactive=20s;
    # open_file_cache_valid 30s;
    # open_file_cache_min_uses 2;
    # open_file_cache_errors on;

    open_file_cache_errors
    # 语法:open_file_cache_errors on | off 
    # 默认值:open_file_cache_errors off
    # 使用字段:http, server, location 这个指令指定是否在搜索一个文件是记录cache错误.

    open_file_cache_min_uses
    # 语法:open_file_cache_min_uses <number>
    # 默认值:open_file_cache_min_uses 1
    # 使用字段:http, server, location
    # 这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数
    # 如 果使用更大的值,文件描述符在cache中总是打开状态.

    open_file_cache_valid
    # 语法:open_file_cache_valid <time>
    # 默认值:open_file_cache_valid 60 
    # 使用字段:http, server, location
    # 这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息

    client_max_body_size 300m;
    # 设定通过nginx上传文件的大小

    sendfile        on;
    # sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件
    # 对于普通应用,必须设为on
    # 如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime

    tcp_nopush     on;
    # 此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用

    proxy_connect_timeout 90; 
    #后端服务器连接的超时时间_发起握手等候响应超时时间

    proxy_read_timeout 180;
    #连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)

    proxy_send_timeout 180;
    #后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据


    # 当使用nginx做反向代理时, 如果设置太小会造成502错误
    # upstream sent too big header while reading response header from upstream
    proxy_buffer_size   256k;
    #设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头,默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小

    proxy_buffers   4 256k;
    #设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k

    proxy_busy_buffers_size   256k;

    proxy_temp_file_write_size 256k;
    #设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长




    # 当使用nginx做fastcgi时, 如果设置太小会造成502错误
    # upstream sent too big header while reading response header from upstream
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;


    #==============================================================
    #=    压缩输出配置=
    #==============================================================
    gzip  on;
    # 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流
    # 例: 4 4k    代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存
    # 默认: gzip_buffers 4 4k/8k
    gzip_buffers <number> <size>;
    # gzip压缩比
    # 1 压缩比最小处理速度最快; 9 压缩比最大但处理最慢(传输快但比较消耗cpu)
    # 默认: gzip_comp_level 1
    gzip_comp_level 1..9;
    # 设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取
    # 默认值是0
    # 建议设置成大于1k的字节数,小于1k可能会越压越大 即: gzip_min_length 1024
    gzip_min_length 1k;
    # 
    # 实例: gzip_disable regex ...;
    gzip_disable regex ...;


    include /etc/nginx/sites-enabled/*;


}

# mail {
#     # See sample authentication script at:
#     # http://wiki.nginx.org/NginxImapAuthenticateWithApachePhpScript
# 
#     # auth_http localhost/auth.php;
#     # pop3_capabilities "TOP" "USER";
#     # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#     server {
#         listen     localhost:110;
#         protocol   pop3;
#         proxy      on;
#     }
# 
#     server {
#         listen     localhost:143;
#         protocol   imap;
#         proxy      on;
#     }
# }
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    server {
        listen      80;
        server_name <serverName>;
        index index.html index.htm index.php;
        root <file url>;

        location / {

            # =================================================
            # ==      打开目录浏览功能(autoindex)            ==
            # =================================================
            autoindex   on;                 # 自动列目录配置, [on|off]
            # 默认为on,显示出文件的确切大小, 单位是bytes; 
            # 改为off后,显示出文件的大概大小, 单位是kB或者MB或者GB(B、KB、MB、GB)
            autoindex_exact_size [on|off]
            # 默认为off,显示的文件时间为GMT时间。
            # 改为on后,显示的文件时间为文件的服务器时间
            autoindex_localtime [on|off]



            if ( $request_filename !~ (index\.php|static) ) {
                rewrite ^/(.*)$ /index.php/$1 last;
            }
        }

        location ~ .*\.(php|php5)?$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME    /var/www/ci$fastcgi_script_name;
        }

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

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

        location ~ /\.ht {   # 防抓取
            deny  all;
        }
    }

具体实例

主配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
user www-data www-data;
worker_processes  8;    #工作进程,根据硬件调整,大于等于cpu核数

error_log  /var/nginx/log/error.log;
pid        /var/nginx/run/nginx.pid;

worker_rlimit_nofile 65535;     #指定进程可以打开的最大描述符.  这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致 



http {
    include       /etc/nginx/mime.types;

    access_log	/var/nginx/log/access.log;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    # 当使用nginx做反向代理时, 如果设置太小会造成502错误
    # upstream sent too big header while reading response header from upstream
    proxy_buffer_size   128k;
    proxy_buffers   4 256k;
    proxy_busy_buffers_size   256k;

    # 当使用nginx做fastcgi时, 如果设置太小会造成502错误
    # upstream sent too big header while reading response header from upstream
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;

    # 保存服务器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的
    # 如果Nginx给出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小
    # 当nginx server数据太多时, 需要增加此配置(默认是32的倍数)
    server_names_hash_bucket_size 512;


    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";


    include /etc/nginx/sites-enabled/*;

}

# mail {
#     # See sample authentication script at:
#     # http://wiki.nginx.org/NginxImapAuthenticateWithApachePhpScript
# 
#     # auth_http localhost/auth.php;
#     # pop3_capabilities "TOP" "USER";
#     # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#     server {
#         listen     localhost:110;
#         protocol   pop3;
#         proxy      on;
#     }
# 
#     server {
#         listen     localhost:143;
#         protocol   imap;
#         proxy      on;
#     }
# }

默认的配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
    server {
        listen      80 default_server;  #默认1
        server_name _;              #默认2
        index index.html index.htm index.php;
        root /var/www/ci;

        location / {
            if ( $request_filename !~ (index\.php|static) ) {
                rewrite ^/(.*)$ /index.php/$1 last;
            }
        }

    }

PHP对应的配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    server {
        listen      80;
        server_name test.abc.com;
        index index.html index.htm index.php;
        root /var/www/ci;

        location / {
            if ( $request_filename !~ (index\.php|static) ) {
                rewrite ^/(.*)$ /index.php/$1 last;
            }
        }

        location ~ .*\.(php|php5)?$ {
            fastcgi_pass 127.0.0.1:9000;
#            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME    /var/www/ci$fastcgi_script_name;
        }

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

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

PHP对应的包含文件fastcgi_params

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

mobapi(ssl相关)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
upstream applications_cluster { 
	 server 118.194.167.99:8001;
}


server { 
    listen       80;
    server_name  mobapi.747.cn; 
    
    client_max_body_size       10m;
    client_body_buffer_size    128k;
    
    error_page   500 502 503 504  /50x.html;
    root   /usr/local/www;
    index index.html index.htm index.php;

    location = /50x.html {
    	root   /usr/local/www/nginx-dist;
    }

    location = /favicon.ico {
    	log_not_found off;
	access_log off;
    }

    location = /robots.txt {
	allow all;
	log_not_found off;
	access_log off;
    }

    location ~ ^/(2|3)/user/.*$ {
     deny all;
    }

    location ~ ^/update/app/2/.*$ {
     proxy_pass http://applications_cluster;
    }

    location ~ ^/(2|3)/.*$ {
    	 if (!-e $request_filename ) {
    	     rewrite ^/(.*)  index.php/$1 last;
    	  }
    }
       
    location ~* \.php/2/ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/wifi_service_2/$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~* \.php/3/ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/wifi_service_3/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

server {
    listen       443 ssl default;
    server_name  mobapi.747.cn;

    ssl on;
    ssl_certificate /usr/local/etc/nginx/ca/ssl-unified.crt;
    ssl_certificate_key /usr/local/etc/nginx/ca/ssl.key;

    add_header              Front-End-Https   on;
    add_header		    host	      $host;
    error_page   500 502 503 504  /50x.html;
    root   /usr/local/www;
    index index.html index.htm index.php;

    location = /50x.html {
    	root   /usr/local/www/nginx-dist;
    }

    location = /favicon.ico {
    	log_not_found off;
	access_log off;
    }

    location = /robots.txt {
	allow all;
	log_not_found off;
	access_log off;
    }    
 
    if (!-e $request_filename) {
    	rewrite ^/(.*)  index.php/$1 last;
    }
       
    location ~* \.php/2/ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/wifi_service_2/$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~* \.php/3/ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/wifi_service_3/$fastcgi_script_name;
        include        fastcgi_params;
    }
}