找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 12245|回复: 13

高性能Web服务器Nginx的配置与部署研究

[复制链接]
发表于 2012-1-19 20:58:36 | 显示全部楼层 |阅读模式
本文来自:CSDN博客专栏《Nginx高性能Web服务器》Poechant技术博客,转载请注明出处。
高性能Web服务器Nginx的配置与部署研究(1)Nginx简介及入门示例
1. 概述
从这篇博文起,将带领读者们一起领略Nginx的强大。
Nginx是做什么用的?我相信很多朋友都已经使用过,如果你没有,那么你一定知道以下这些名称之一:Apache,Lighttpd,Tomcat,Jetty。它们占据了目前Web服务器的几乎全部江山,其中Apache是知名度最高的,同时也是最为重量级的。Lighttpd、Tomcat和Jetty相对轻量级,其中Jetty、Tomcat多用于作为Java服务器容器。
Nginx是一个基于BSD-like协议、开源、高性能、轻量级的HTTP服务器、反向代理服务器以及电子邮件(SMTP、POP3、IMAP)服务器。Nginx是由一个俄罗斯的名叫“Igor Sysoev”的软件工程师开发的,最初用于Rambler.ru网站(该网站在俄罗斯国内访问量排名第二)。
不多费口舌于这些背景,下面先讲解两条非常简短的Nginx的location示例。如果你之前没有接触过Nginx配置文件,那么目前你看这两个例子可能会有些疑惑,没有关系,这个直观的认识先留在你的脑海里,之后的文章会一步一步带你走进Nginx的世界。

2. 示例一:实现http://a.com/abc得到http://b.com/abc
在Nginx配置文件中的http模块的子模块server中添加一段代码:

[plain] view plaincopyprint?




注意问号。

[plain] view plaincopyprint?



  • location ^~ /img_proxy  
  • {  
  •    set $img_proxy_url "";  
  •    set $suffix "";  
  •    if ($query_string ~ "url=(.*)")  
  •    {  
  •       set $img_proxy_url $1;  
  •       set $suffix "";  
  •    }  
  •    resolver 208.67.222.222;  
  •    proxy_pass http://$img_proxy_url/$suffix;  
  •    proxy_set_header referer "http://$img_proxy_url";  
  • }  


上面两例中有很多Nginx配置文件的语法内容,如果暂时看不懂,没有关系,不要着急,接下来你会很快学会的。




 楼主| 发表于 2012-1-19 20:59:06 | 显示全部楼层
高性能Web服务器Nginx的配置与部署研究(2)Nginx入门级配置与部署及“Hello World”
这一次我们要学习什么?就是用Nginx在一台机器上搭建一个最简单的显示“Hello World”的Web服务器。那我们就step by step来尝试吧~
本文来自:CSDN博客专栏《Nginx高性能Web服务器》Poechant技术博客,转载请注明出处。

1. Nginx程序包

目前最新的开发版本时1.1.12:

我们可以下载稳定版尝试:

2. 下载、解压、安装Nginx
我们这里以“Linux/Unix:http://nginx.org/download/nginx-1.0.11.tar.gz”为例。相关命令如下:
[plain] view plaincopyprint?




但是下载解压完不要急着安装,因为Nginx依赖很多软件,请按照如下步骤安装:

[plain] view plaincopyprint?



  • sudo apt-get install gcc  
  • sudo apt-get install g++  
  • sudo apt-get install make  
  • sudo apt-get install libz-dev  
  • sudo apt-get install libbz2-dev  
  • sudo apt-get install libreadline-dev  


这是一些基本的软件,另外还有PCRE要安装。PCRE是“Perl Compatible Regular Expressions”的缩写,是一个正规表达式库。

[plain] view plaincopyprint?




这时候再安装我们刚刚下载的nginx-1.0.11.tar.gz

[plain] view plaincopyprint?



  • tar -zxvf nginx-1.0.11.tar.gz  
  • cd nginx-1.0.11  
  • ./configure  
  • sudo make  
  • sudo make install  




3. 解读Nginx配置文件
按照上面的操作,Nginx就已经安装完了。因为我们使用的是默认的configure,所以会安装到/usr/local/nginx目录。相应的配置文件是/usr/local/nginx/conf/nginx.conf。我们打开配置文件,看到结构形如:

[plain] view plaincopyprint?



  • ...  
  • events {  
  •    ...  
  • }  
  •   
  • http {  
  •    ...  
  •    server {  
  •       ...  
  •    }  
  •    ...  
  • }  


其中events和http是nginx配置中最常见的两个模块,还有其他核心模块,会在之后的文章中逐一介绍。server是http模块的子模块,是其最常用的模块。

4. 写一个简单的Nginx配置
建立一个/home/michael/test_space目录,用来存储我们的测试用例。再直接在Nginx的默认配置文件/usr/loca/nginx/conf/nginx.conf中修改,在http中增加一个server模块,如下:

[plain] view plaincopyprint?



  • server {  
  •     listen      80;  
  •     server_name localhost;  
  •     charset     utf-8;  
  •     location / {  
  •         alias   /home/michael/test_space/;  
  •     }  
  • }  




5. 启动Nginx
进入/usr/local/nginx目录,输入:

[plain] view plaincopyprint?



  • sudo ./sbin/nginx  




6. 测试
在/home/michael/test_space/目录下,简历一个index.html文件。在文件中输入:

[plain] view plaincopyprint?



  • <html>  
  •    <head></head>  
  •    <body>Hello World!</body>  
  • </html>  


然后尝试访问:http://172.16.44.82:8011/index.html
如果出现如下内容,就说明你成功了!~


本文来自:CSDN博客专栏《Nginx高性能Web服务器》Poechant技术博客,转载请注明出处。

 楼主| 发表于 2012-1-19 20:59:34 | 显示全部楼层
高性能Web服务器Nginx的配置与部署研究(3)Nginx的请求处理方式

本文来自:CSDN博客专栏,转载请注明出处。
原文作者:Igor Sysoev
中文译者:Poechant
特别声明:
(1)本人提供意译,不提供咬文嚼字的逐句翻译。
(2)本文欢迎传播,但请注明出处。
(3)欢迎提各种宝贵建议。

本文为您解读,Nginx是如何处理请求的,让你从逻辑上有一个清晰的认识。
以下为正文:

1.处理什么样的请求
处理访问到Nginx所在IP地址的请求,并且这些请求的HTTP头信息中的Host为所要处理的域名(如下以80端口为例),如下几个server就对应响应的请求:

[plain] view plaincopyprint?



  • server {  
  •     listen       80;  
  •     server_name  nginx.org  www.nginx.org;  
  •     ...  
  • }  
  •   
  • server {  
  •     listen       80;  
  •     server_name  nginx.net  www.nginx.net;  
  •     ...  
  • }  
  •   
  • server {  
  •     listen       80;  
  •     server_name  nginx.com  www.nginx.com;  
  •     ...  
  • }  


2.默认server
如果不主动设置默认server,那么第一个server就会被当做默认server。若要主动设置,应该如下配置:

[plain] view plaincopyprint?



  • server {  
  •     listen       80  default_server;  
  •     server_name  nginx.net  www.nginx.net;  
  •     ...  
  • }  



此项的版本注意事项:
0.8.21版本之前,使用default关键词;
从0.8.21版本开始,使用default_server关键词。

另外注意,default_server是端口的一个属性,不是server_name的一个属性。

3.如何处理未定义host为server_name的请求
比如,如果不想处理HTTP请求中没有HOST字段的头信息的情况,那么可以如下:

[plain] view plaincopyprint?



  • server {  
  •     listen       80;  
  •     server_name  "";  
  •     return       444;  
  • }  


此项的版本注意事项:
0.8.48之前的版本,如果没有设置server_name的话,那么会把server_name设置为本机的hostname。
0.8.48开始的版本,如果没有设置server_name的话,那么会把server_name设置为"",所以如果要达到上述代码的效果,在此版本开始可以不设置server_name。

4.Nginx的虚拟主机监听
请先看如下配置:

[plain] view plaincopyprint?



  • server {  
  •     listen       192.168.1.1:80;  
  •     server_name  nginx.org  www.nginx.org;  
  •     ...  
  • }  
  •   
  • server {  
  •     listen       192.168.1.1:80;  
  •     server_name  nginx.net  www.nginx.net;  
  •     ...  
  • }  
  •   
  • server {  
  •     listen       192.168.1.2:80;  
  •     server_name  nginx.com  www.nginx.com;  
  •     ...  
  • }  


这个应该很好理解,如果listen的IP地址和端口号都吻合了,就看HTTP请求中的HOST头信息与某个server_name中的name是否吻合。如果server_name不吻合,就到该端口对应的default_server那里处理请求,如果default_server的server_name也没有与HOST头信息吻合,那么就放弃该请求。
特别再次强调,default_server是端口的属性,而非server_name的属性。所以可以有如下配置:

[plain] view plaincopyprint?



  • server {  
  •     listen        192.168.1.1:80;  
  •     server_name   nginx.org  www.nginx.org;  
  •     ...  
  • }  
  •   
  • server {  
  •     listen        192.168.1.1:80  default_server;  
  •     server_name   nginx.net  www.nginx.net;  
  •     ...  
  • }  
  •   
  • server {  
  •     listen        192.168.1.2:80  default_server;  
  •     server_name   nginx.com  www.nginx.com;  
  •     ...  
  • }  




5.一个简单的PHP站点的Nginx配置

[plain] view plaincopyprint?



  • server {  
  •     listen        80;  
  •     server_name   nginx.org  www.nginx.org;  
  •     root          /data/www;  
  •   
  •     location / {  
  •         index     index.html  index.php;  
  •     }  
  •   
  •     location ~* \.(gif|jpg|png)$ {  
  •         expires   30d;  
  •     }  
  •   
  •     location ~ \.php$ {  
  •         fastcgi_pass   localhost:9000;  
  •         fastcgi_param  SCRIPT_FILENAME  
  •                        $document_root$fastcgi_script_name;  
  •         include        fastcgi_params;  
  •     }  
  • }  


Nginx在匹配location的时候,不是按照配置代码给出的顺序进行匹配的,而是先按照匹配表达式中的文字字符串(literal string)的明确程度,从最明确的开始匹配。这么说可能有点含混不清,简单说,没有正则规则的匹配表达式,是最明确的。比如如果这个匹配表达式就是一个“/”或者“/abc”,那么这就是最明确的。上例中的"/"就是这个最明确的蚊子字符串(the most specific literal string),其实也是该例中唯一的。所以先从这个location开始,然后再按照location的列出顺序,依次匹配,直到出现第一个匹配的location后停止。如果所有的location都不匹配,就用第一个找到的最明确的文字字符串来匹配(the most specific literal string)。

6.待查询的HTTP请求
Nginx只处理无查询的HTTP请求,因为查询请求的查询字段的顺序不确定,比如:

[plain] view plaincopyprint?



  • /index.php?user=john&page=1  
  • /index.php?page=1&user=john  


再比如:

[plain] view plaincopyprint?



  • /index.php?page=1&something+else&user=john  


7.几个location的例子
例1:

[plain] view plaincopyprint?



  • /logo.gif  


“/”先被找到,然后匹配"\.(gif|jpg|png)$",再根据redirective找到root是/data/www,然后这个请求就被映射到"/data/www/logo.gif"了,最后文件就被发送给到了客户端。
例2:
[java] view plaincopyprint?



  • /index.php  


"/"先被找到,然后匹配"\.(php)$",然后request就被传递给在9000端口上监听的FastCGI服务器,"fastcgi_param" directive设置FastCGI的参数SCRIPT_FILENAME为"/data/www/index.php",然后FastCGI服务器就执行这个文件。(注意其中document_root是/data/www,fastcgi_script_name是/index.php。)
例3:
[plain] view plaincopyprint?



  • /about.html  


"/"先被找到,且只有这一个匹配的。然后根据root值/data/www,就找到了文件/data/www/about.html,然后发送给客户端。
例4:
[plain] view plaincopyprint?



  • /  


"/"是很复杂的,先找到"/"这个location,然后根据root值/data/www,看/data/www/index.php是否存在,如果存在directive就在内部重定向到/index.php,然后Nginx根据这个再次搜索location,重复上面第二个例子。

本文来自:CSDN博客专栏,转载请注明出处。

 楼主| 发表于 2012-1-19 21:00:02 | 显示全部楼层
高性能Web服务器Nginx的配置与部署研究(4)Nginx常用命令

本文来自:CSDN博客专栏,转载请注明出处。
此篇文章,为你详解所有你可能会用到命令,包括启动、停止、重启、重载配置、指定配置等等。

1. 启动Nginx

[plain] view plaincopyprint?



  • poechant@ubuntu:sudo ./sbin/nginx  




2. 停止Nginx

[plain] view plaincopyprint?



  • poechant@ubuntu:sudo ./sbin/nginx -s stop  
  • poechant@ubuntu:sudo ./sbin/nginx -s quit  

-s 都是采用向Nginx发送信号的方式。


3. Nginx重载配置

[plain] view plaincopyprint?



  • poechant@ubuntu:sudo ./sbin/nginx -s reload  


上述是采用向Nginx发送信号的方式,或者使用:

[plain] view plaincopyprint?



  • poechant@ubuntu:service nginx reload  




4. 指定Nginx配置文件

[plain] view plaincopyprint?



  • poechant@ubuntu:sudo ./sbin/nginx -c /usr/local/nginx/conf/nginx.conf  


-c表示configuration,指定配置文件。

5. 查看Nginx版本:
有两种可以查看Nginx的版本信息的参数。第一种如下:

[plain] view plaincopyprint?



  • poechant@ubuntu:/usr/local/nginx$ ./sbin/nginx -v  
  • nginx: nginx version: nginx/1.0.0  


另一种显示的是详细的版本信息:

[plain] view plaincopyprint?



  • poechant@ubuntu:/usr/local/nginx$ ./sbin/nginx -V  
  • nginx: nginx version: nginx/1.0.0  
  • nginx: built by gcc 4.3.3 (Ubuntu 4.3.3-5ubuntu4)   
  • nginx: TLS SNI support enabled  
  • nginx: configure arguments: --with-http_ssl_module --with-openssl=/home/luming/openssl-1.0.0d/  


6. 检查配置文件正确性

[plain] view plaincopyprint?



  • poechant@ubuntu:/usr/local/nginx$ ./sbin/nginx -t  
  • nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (13: Permission denied)  
  • nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok  
  • 2012/01/09 16:45:09 [emerg] 23898#0: open() "/usr/local/nginx/logs/nginx.pid" failed (13: Permission denied)  
  • nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed  


如果出现如上的提示信息,表示没有访问错误日志文件和进程,可以sudo(super user do)一下:

[plain] view plaincopyprint?



  • poerchant@ubuntu:/usr/local/nginx$ sudo ./sbin/nginx -t  
  • nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok  
  • nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful  


如果显示如上,则表示配置文件正确。否则,会有相关提示。

7. 显示帮助信息

[plain] view plaincopyprint?



  • poechant@ubuntu:/user/local/nginx$ ./sbin/nginx -h  

或者:
[plain] view plaincopyprint?



  • poechant@ubuntu:/user/local/nginx$ ./sbin/nginx -?  


以上这些涵盖了Nginx日常维护的所有基本操作,另外还有向master进程发送信号的相关命令,我们会在后续看到。

本文来自:CSDN博客专栏,转载请注明出处。

 楼主| 发表于 2012-1-19 21:00:25 | 显示全部楼层
高性能Web服务器Nginx的配置与部署研究(5)Nginx配置符号

本文来自:CSDN博客专栏《Nginx高性能Web服务器》Poechant技术博客,转载请注明出处。

1. 容量符号
k 千字节
K 千字节
m 兆字节
M 兆字节

2. 时间符号
ms 毫秒
s 秒
m 分
h 时
d 日
w 周
M 月(按照30天计算)
y 年(按照365天计算)

3. 示例
1h 30m 表示1小时30分钟
1y 6M 表示1年6个月


 楼主| 发表于 2012-1-19 21:00:45 | 显示全部楼层
高性能Web服务器Nginx的配置与部署研究(6)核心模块之主模块的测试常用指令
本文来自:CSDN博客专栏《Nginx高性能Web服务器》Poechant技术博客,转载请注明出处。
本文欢迎转载,转载必须注明出处:

1. daemon
含义:设置是否以守护进程模式运行
语法:daemon on|off
缺省:on
示例:daemon off;
注意:生产环境(production mode)中不要使用daemon指令,这些选项仅用于开发测试(development mode)。

2. debug_points
含义:断点调试
语法:debug_points [stop|abort]
缺省:none
示例:debug_points stop;
注意:在Nginx内有一些assert断言,这些断言允许Nginx,配合调试器中断程序运行、停止或创建core文件。

3. master_process
含义:设置是否启用主进程
语法:master_process on|off
缺省:on
示例:master_process off;
注意:不要在生产环境(production mode)中使用master_process指令,这些选项仅用于开发测试(development mode)。

本文欢迎转载,转载必须注明出处:

4. error_log
含义:指定错误日志文件
语法:error_log file [debug|info|notice|warn|error|crit]
缺省:${prefix}/logs/error.log
示例:error_log /data/nginx/logs/error.log debug
注意:该命令并非只有在测试(或称为开发)模式下才可以使用,而是在编译时添加了--with-debug参数时,则可以使用error_log指令的额外参数,即:
error_log file [debug_core|debug_alloc|debug_mutex|debug_event|debug_http|debug_imap];

本文欢迎转载,转载必须注明出处:

 楼主| 发表于 2012-1-19 21:01:08 | 显示全部楼层
高性能Web服务器Nginx的配置与部署研究(7)核心模块之主模块的非测试常用指令
本文来自:CSDN博客专栏《Nginx高性能Web服务器》Poechant技术博客,转载请注明出处。
本文欢迎转载,转载必须注明出处:http://blog.csdn.net/poechant

1. error_log
含义:指定存储错误日志的文件
语法:error_log <file> [debug|info|notice|warn|error|crit]
缺省:${prefix}/logs/error_log
示例:error_log file debug;
注意:在编译Nginx使用--with-debug参数,则可以参考《高性能Web服务器Nginx的配置与部署研究——(6)Nginx核心模块的测试常用指令》中的error_log部分

2. include
含义:指定所要包含的Nginx配置文件
语法:include <file|*>
缺省:none
示例:include vhosts/*.conf 或 include /home/michael/nginx/conf/nginx-main.conf
注意:
(1)include命令可以指定包含一个文件,比如第二个示例。也可以指定包含一个目录下的所有文件,比如第一个示例。
(2)指定的文件路径的基路径,由编译选项--prefix决定,如果编译时没有指定,则默认的路径是/usr/local/nginx。

3. lock_file
含义:
语法:lock_file <file>
缺省:compile-time option
示例:lock_file /var/log/lock_file;
注意:Nginx使用accept mutex来序列化accept()系统调用(syscalls)。如果是在i386,sparc64,ppc64或amd64平台上用GCC,Intel C++,SunPro C++编译器编译的,则Nginx使用CPU原指令实现mutex。其他情况下,则使用lock_file。

4. pid
含义:指定存储进程ID(即PID)的文件。
语法:pid <file>
缺省:compile-time option Example
示例:pid /var/log/nginx.pid;
注意:可以使用命令kill -HUP cat /var/log/nginx.pid\ 对Nginx进行进程ID文件的重新加载。

本文欢迎转载,转载必须注明出处:

5. ssl_engine
含义:指定使用的openssl引擎。
语法:ssl_engine engine;
缺省:视系统而定
示例:
注意:你可以使用openssl engine -t命令来查看系统目前支持的openssl引擎。

6. timer_resolution

7. user
含义:指定可以使用Nginx的用户
语法:user <user> [group]
缺省:nobody nobody(第一个nobody是user,第二个nobody是group)
示例:user www users;

8. worker_processes
含义:指定worker进程数
语法:worker_processes <number>
缺省:1
示例:worker_processes 4;
注意:最大用户连接数=worker进程数×worker连接数,即max_clients=worker_processes*worker_connections。

9. worker_cpu_affinity
含义:为worker进程绑定CPU。
语法:worker_cpu_affinity cpumask [cpumask...]
缺省:none
示例:
(1)如果有4个CPU,并且指定4个worker进程,则:
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
(2)如果有4个CPU,并且指定2个worker进程,则:
worker_processes 2;
worker_cpu_affinity 0101 1010;
注意:只有Linux平台上才可以使用该指令。

10. worker_priority
含义:指定各worker进程的优先级
语法:worker_priority [-] <number>;
缺省:on
示例:
注意:使用该指令可以给woker进程分配优先值。

11. worker_rlimit_core
含义:指定每个worker进程的core文件最大size。
语法:worker_rlimit_core <max_size>;

12. worker_rlimit_nofile
含义:worker进程的file descriptor可以打开的最大文件数。
语法:worker_rlimit_nofile <number>;

13. worker_rlimit_sigpending

本文欢迎转载,转载必须注明出处:

14. working_directory
含义:指定worker进程的core文件目录。
语法:working_directory <path>
缺省:编译Nginx时的--prefix选项指定的目录
示例:working_directory /data/nginx/data;
注意:如果是相对路径,则以编译Nginx时的--prefix选项为基路径。

 楼主| 发表于 2012-1-19 21:01:30 | 显示全部楼层
高性能Web服务器Nginx的配置与部署研究(8)核心模块之事件模块

本文来自:CSDN博客专栏《Nginx高性能Web服务器》Poechant技术博客,转载请注明出处。

一、事件模块的作用是什么?

用来设置Nginx处理链接请求。

二、相关指令

1. accept_mutex
含义:设置是否使用连接互斥锁进行顺序的accept()系统调用。
语法:accept_mutex <on|off>;
缺省:on
示例:accept_mutex off;

2. accept_mutex_delay
含义:设置获得互斥锁的最少延迟时间。
语法:accpet_mutex_delay <number of millisecs>
缺省:500ms
示例:accpet_mutex_delay 1000ms;

3. debug_connection
含义:设置指定的clients产生debug日志。
语法:debug_connection [ip|CIDR];
缺省:none
示例:debug_connection 172.16.44.96;
一段较完整的事件模块代码如下:
error_log /data/nginx/log/error.log;
events {
debug_connection172.16.44.96;
}

4. multi_accept
含义:设置是否允许,Nginx在已经得到一个新连接的通知时,接收尽可能更多的连接。
语法:multi_accept <on|off>;
缺省:off
示例:multi_accept on;

5. rtsig_signo

6. rtsig_overflow_threshold

7. use
语法:use [kqueue | rtsig | epoll | /dev/poll | select | poll | eventport];
注意:如果在./configure的时候指定了不止一种事件模型,那么可以设置其中一个,告诉Nginx使用哪种事件模型。默认情况下,Nginx会在./configure时找出最适合系统的事件模型。

8. worker_connections
语法:worker_connection <number>;
注意:
最大连接数的计算公式如下:
max_clients = worker_processes * worker_connections;
如果作为反向代理,因为浏览器默认会开启2个连接到server,而且Nginx还会使用fds(file descriptor)从同一个连接池建立连接到upstream后端。则最大连接数的计算公式如下:
max_clients = worker_processes * worker_connections / 4;


 楼主| 发表于 2012-1-19 21:01:50 | 显示全部楼层
高性能Web服务器Nginx的配置与部署研究(9)核心模块之HTTP模块基本常用指令

本文来自:CSDN博客专栏《Nginx高性能Web服务器》Poechant技术博客,转载请注明出处。

一、HTTP模块的作用是什么?

Nginx的HTTP模块用于控制Nginx的HTTP进程。


二、指令

1. alias
含义:指定location使用的路径,与root类似,但不改变文件的跟路径,仅适用文件系统的路径。
语法:alias <file-path | directory-path>
缺省:N/A
作用域:http.server.location
示例:
location /i/ {
alias /home/michael/web/i/;
}
则请求 /i/logo.png 则返回 /home/michael/web/i/logo.png。
注意:
(1)替换路径时,可以使用变量。
(2)alias无法在正则的location中使用。如果有这种需求,则必须使用rewrite和root。

2. client_body_in_file_only
含义:指定是否将用户请求体存储到一个文件里。
语法:client_body_in_file_only <on | off>
缺省:off
作用域:http.server.location
示例:client_body_in_file_only on;
注意:
(1)该指令为on时,用户的请求体会被存储到一个文件中,但是请求结束后,该文件也不会被删除;
(2)该指令一般在调试的时候使用。

3. client_body_buffer_size
含义:指定用户请求体所使用的buffer的最大值
语法:client_body_buffer_size <size>
缺省:两个page的大小,一般为8k或16k
作用域:http.server.location
示例:client_body_buffer_size 512k;
注意:如果用户请求体超过了buffer的大小,则将全部内容或部分内容存储到一个临时文件中。

4. client_body_temp_path
含义:设置存储用户请求体的文件的目录路径
语法:client_body_temp_path <directory path> [level1 | level2 | level3]
作用域:http.server.location
示例:client_body_temp_path /spool/nginx/client_temp 1 2;

5. client_body_timeout
含义:设置用户请求体的超时时间。
语法:client_body_timeout <time>
作用域:http.server.location
示例:client_body_timeout 120s;
注意:只有请求体需要被1次以上读取时,该超时时间才会被设置。且如果这个时间后用户什么都没发,nginx会返回requests time out 408.

6. client_header_buffer_size
含义:设置用户请求头所使用的buffer大小
语法:client_header_buffer_size <size>
缺省:1k
作用域:http.server
示例:client_header_buffer_size 2k;
注意:
(1)对绝大多数请求来说,1k足以满足请求头所需的buffer;
(2)对于携带有较大cookie或来自于wap用户的请求头来说,1k的buffer一般不够,这时可以使用指令large_client_header_buffers。

7. client_header_timeout
含义:设置用户请求头的超时时间。
语法:client_header_timeout <time>
缺省:1m
作用域:http.server.location
示例:client_header_timeout 3m;
注意:只有请求头需要被1次以上读取时,该超时时间才会被设置。且如果这个时间后用户什么都没发,nginx会返回requests time out 408.

8. client_max_body_size
含义:设置所能接收的最大请求体的大小
语法:client_max_body_size <size>
缺省:1m
作用域:http.server.location
示例:client_max_body_size 2m;
注意:根据请求头中的Content-Length来判断请求体大小是否允许。如果大于设定值,则返回“ Request Entity Too Large”(413)错误。不过要注意的是,浏览器一般并不对这个错误进行特殊显示。

 楼主| 发表于 2012-1-19 21:02:12 | 显示全部楼层
高性能Web服务器Nginx的配置与部署研究(10)核心模块之HTTP模块Location相关指令

本文来自:CSDN博客专栏《Nginx高性能Web服务器》Poechant技术博客,转载请注明出处。
一、基本语法
语法:location [= | ~ | ~* | ^~] </uri/> {...}
缺省:N/A
作用域:server

二、匹配规则
1. 四种匹配方式
= 精确匹配
~ 大小写敏感正则匹配
~* 大小写不敏感正则匹配
^~ 前缀匹配

2. location匹配指令的执行顺序
首先:= 精确匹配;
其次:^~ 前缀匹配;
再次:~* 和 ~ 正则匹配,顺序依据出现顺序;
最后:如果出现正则匹配成功,则采用该正则匹配;如果无可匹配正则,则采用前缀匹配结果。

三、常用指令
1. internal
含义:表示请求必须来自内部,外部请求会丢给404页面。
语法:internal;
作用域:location


您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 02:35 , Processed in 0.019932 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表