winston 发表于 2012-1-19 20:58:36

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

本文来自: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中添加一段代码:
view plaincopyprint?



[*]location ^~ /hd
[*]{
[*]   rewrite^/hd/(.*)$http://www.google.com/$1permanent;
[*]}


3. 示例二:实现http://a.com/msg?url=www.b.com得到http://www.b.com注意问号。
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配置文件的语法内容,如果暂时看不懂,没有关系,不要着急,接下来你会很快学会的。



winston 发表于 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:Linux/Unix:http://nginx.org/download/nginx-1.1.12.tar.gzWindows:http://nginx.org/download/nginx-1.1.12.zip
我们可以下载稳定版尝试:Linux/Unix:http://nginx.org/download/nginx-1.0.11.tar.gz
Windows:http://nginx.org/download/nginx-1.0.11.zip
2. 下载、解压、安装Nginx我们这里以“Linux/Unix:http://nginx.org/download/nginx-1.0.11.tar.gz”为例。相关命令如下: view plaincopyprint?



[*]wget http://nginx.org/download/nginx-1.0.11.tar.gz
[*]tar -zxvf nginx-1.0.11.tar.gz


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

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”的缩写,是一个正规表达式库。

view plaincopyprint?



[*]wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.13.tar.gz
[*]tar -zxvf pcre-8.13.tar.gz
[*]cd pcre-8.13.tar.gz
[*]./configure
[*]sudo make
[*]sudo make install


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

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。我们打开配置文件,看到结构形如:
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模块,如下:
view plaincopyprint?



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




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



[*]sudo ./sbin/nginx




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



[*]<html>
[*]   <head></head>
[*]   <body>Hello World!</body>
[*]</html>


然后尝试访问:http://172.16.44.82:8011/index.html
如果出现如下内容,就说明你成功了!~http://hi.csdn.net/attachment/201201/9/0_1326093829q3Dc.gif

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

winston 发表于 2012-1-19 20:59:34

高性能Web服务器Nginx的配置与部署研究(3)Nginx的请求处理方式

本文来自:CSDN博客专栏《Nginx高性能Web服务器》 及Poechant技术博客,转载请注明出处。英文原文:http://nginx.org/en/docs/http/request_processing.html原文作者:Igor Sysoev中文译者:Poechant特别声明:(1)本人提供意译,不提供咬文嚼字的逐句翻译。(2)本文欢迎传播,但请注明出处。(3)欢迎提各种宝贵建议。
本文为您解读,Nginx是如何处理请求的,让你从逻辑上有一个清晰的认识。以下为正文:
1.处理什么样的请求处理访问到Nginx所在IP地址的请求,并且这些请求的HTTP头信息中的Host为所要处理的域名(如下以80端口为例),如下几个server就对应响应的请求:
view plaincopyprint?



[*]server {
[*]    listen       80;
[*]    server_namenginx.orgwww.nginx.org;
[*]    ...
[*]}
[*]
[*]server {
[*]    listen       80;
[*]    server_namenginx.netwww.nginx.net;
[*]    ...
[*]}
[*]
[*]server {
[*]    listen       80;
[*]    server_namenginx.comwww.nginx.com;
[*]    ...
[*]}


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



[*]server {
[*]    listen       80default_server;
[*]    server_namenginx.netwww.nginx.net;
[*]    ...
[*]}



此项的版本注意事项:0.8.21版本之前,使用default关键词;从0.8.21版本开始,使用default_server关键词。
另外注意,default_server是端口的一个属性,不是server_name的一个属性。
3.如何处理未定义host为server_name的请求比如,如果不想处理HTTP请求中没有HOST字段的头信息的情况,那么可以如下:
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的虚拟主机监听请先看如下配置:
view plaincopyprint?



[*]server {
[*]    listen       192.168.1.1:80;
[*]    server_namenginx.orgwww.nginx.org;
[*]    ...
[*]}
[*]
[*]server {
[*]    listen       192.168.1.1:80;
[*]    server_namenginx.netwww.nginx.net;
[*]    ...
[*]}
[*]
[*]server {
[*]    listen       192.168.1.2:80;
[*]    server_namenginx.comwww.nginx.com;
[*]    ...
[*]}


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



[*]server {
[*]    listen      192.168.1.1:80;
[*]    server_name   nginx.orgwww.nginx.org;
[*]    ...
[*]}
[*]
[*]server {
[*]    listen      192.168.1.1:80default_server;
[*]    server_name   nginx.netwww.nginx.net;
[*]    ...
[*]}
[*]
[*]server {
[*]    listen      192.168.1.2:80default_server;
[*]    server_name   nginx.comwww.nginx.com;
[*]    ...
[*]}




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



[*]server {
[*]    listen      80;
[*]    server_name   nginx.orgwww.nginx.org;
[*]    root          /data/www;
[*]
[*]    location / {
[*]      index   index.htmlindex.php;
[*]    }
[*]
[*]    location ~* \.(gif|jpg|png)$ {
[*]      expires   30d;
[*]    }
[*]
[*]    location ~ \.php$ {
[*]      fastcgi_pass   localhost:9000;
[*]      fastcgi_paramSCRIPT_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请求,因为查询请求的查询字段的顺序不确定,比如:
view plaincopyprint?



[*]/index.php?user=john&page=1
[*]/index.php?page=1&user=john


再比如:

view plaincopyprint?



[*]/index.php?page=1&something+else&user=john


7.几个location的例子
例1:
view plaincopyprint?



[*]/logo.gif


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



[*]/about.html


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



[*]/


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

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

winston 发表于 2012-1-19 21:00:02

高性能Web服务器Nginx的配置与部署研究(4)Nginx常用命令

本文来自:CSDN博客专栏《Nginx高性能Web服务器》 及Poechant技术博客,转载请注明出处。
此篇文章,为你详解所有你可能会用到命令,包括启动、停止、重启、重载配置、指定配置等等。
1. 启动Nginx
view plaincopyprint?



[*]poechant@ubuntu:sudo ./sbin/nginx




2. 停止Nginx
view plaincopyprint?



[*]poechant@ubuntu:sudo ./sbin/nginx -s stop
[*]poechant@ubuntu:sudo ./sbin/nginx -s quit

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


3. Nginx重载配置
view plaincopyprint?



[*]poechant@ubuntu:sudo ./sbin/nginx -s reload


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

view plaincopyprint?



[*]poechant@ubuntu:service nginx reload




4. 指定Nginx配置文件
view plaincopyprint?



[*]poechant@ubuntu:sudo ./sbin/nginx -c /usr/local/nginx/conf/nginx.conf


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

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



[*]poechant@ubuntu:/usr/local/nginx$ ./sbin/nginx -v
[*]nginx: nginx version: nginx/1.0.0


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

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. 检查配置文件正确性

view plaincopyprint?



[*]poechant@ubuntu:/usr/local/nginx$ ./sbin/nginx -t
[*]nginx: 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 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)一下:
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. 显示帮助信息
view plaincopyprint?



[*]poechant@ubuntu:/user/local/nginx$ ./sbin/nginx -h

或者:
view plaincopyprint?



[*]poechant@ubuntu:/user/local/nginx$ ./sbin/nginx -?


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

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

winston 发表于 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个月

winston 发表于 2012-1-19 21:00:45

高性能Web服务器Nginx的配置与部署研究(6)核心模块之主模块的测试常用指令
本文来自:CSDN博客专栏《Nginx高性能Web服务器》 及Poechant技术博客,转载请注明出处。本文欢迎转载,转载必须注明出处:http://blog.csdn.net/poechant

1. daemon含义:设置是否以守护进程模式运行语法:daemon on|off缺省:on示例:daemon off;注意:生产环境(production mode)中不要使用daemon指令,这些选项仅用于开发测试(development mode)。
2. debug_points含义:断点调试语法:debug_points 缺省: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)。
本文欢迎转载,转载必须注明出处:http://blog.csdn.net/poechant

4. error_log含义:指定错误日志文件语法:error_log file 缺省:${prefix}/logs/error.log示例:error_log /data/nginx/logs/error.log debug注意:该命令并非只有在测试(或称为开发)模式下才可以使用,而是在编译时添加了--with-debug参数时,则可以使用error_log指令的额外参数,即:error_log file ;
本文欢迎转载,转载必须注明出处:http://blog.csdn.net/poechant

winston 发表于 2012-1-19 21:01:08

高性能Web服务器Nginx的配置与部署研究(7)核心模块之主模块的非测试常用指令
本文来自:CSDN博客专栏《Nginx高性能Web服务器》 及Poechant技术博客,转载请注明出处。本文欢迎转载,转载必须注明出处:http://blog.csdn.net/poechant

1. error_log含义:指定存储错误日志的文件语法:error_log <file> 缺省:${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文件的重新加载。
本文欢迎转载,转载必须注明出处:http://blog.csdn.net/poechant

5. ssl_engine含义:指定使用的openssl引擎。语法:ssl_engine engine;缺省:视系统而定示例:注意:你可以使用openssl engine -t命令来查看系统目前支持的openssl引擎。
6. timer_resolution略
7. user含义:指定可以使用Nginx的用户语法:user <user> 缺省: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 缺省: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略
本文欢迎转载,转载必须注明出处:http://blog.csdn.net/poechant

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

winston 发表于 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 ;缺省: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 ;注意:如果在./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;

winston 发表于 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> 作用域: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)错误。不过要注意的是,浏览器一般并不对这个错误进行特殊显示。

winston 发表于 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

页: [1] 2
查看完整版本: 高性能Web服务器Nginx的配置与部署研究