本文为您解读,Nginx是如何处理请求的,让你从逻辑上有一个清晰的认识。 处理访问到 Nginx 所在 IP 地址的请求,并且这些请求的 HTTP 头信息中的 Host 为所要处理的域名(如下以80端口为例),如下几个 server 就对应响应的请求: 如果不主动设置默认 此项的版本注意事项: 另外注意, 比如,如果不想处理 HTTP 请求中没有 HOST 字段的头信息的情况,那么可以如下: 此项的版本注意事项: 请先看如下配置: 这个应该很好理解,如果 特别再次强调, Nginx 在匹配 Nginx只处理无查询的HTTP请求,因为查询请求的查询字段的顺序不确定,比如: 再比如: - 更多 Nginx 技术博文请访问 CSDN 专栏?《Nginx 高性能Web服务器》 转载请注明来自“柳大的CSDN博客”:?blog.CSDN.net/Poechant -高性能Web服务器Nginx的配置与部署研究(3)Nginx的请求处理机制
1. 处理什么样的请求
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
。若要主动设置,应该如下配置:server {
listen 80 default_server;
server_name nginx.net www.nginx.net;
...
}
default
关键词;default_server
关键词。default_server
是端口的一个属性,不是server_name
的一个属性。3. 如何处理未定义 host 为 server_name 的请求
server {
listen 80;
server_name "";
return 444;
}
server_name
的话,那么会把server_name
设置为本机的 hostname。server_name
的话,那么会把server_name
设置为""
,所以如果要达到上述代码的效果,在此版本开始可以不设置server_name
。4. Nginx 的虚拟主机监听
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
的属性。所以可以有如下配置: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 配置
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;
}
}
location
的时候,不是按照配置代码给出的顺序进行匹配的,而是先按照匹配表达式中的文字字符串(literal string)的明确程度,从最明确的开始匹配。这么说可能有点含混不清,简单说,没有正则规则的匹配表达式,是最明确的。比如如果这个匹配表达式就是一个“/”
或者“/abc”
,那么这就是最明确的。上例中的"/"
就是这个最明确的蚊子字符串(the most specific literal string),其实也是该例中唯一的。所以先从这个location
开始,然后再按照location
的列出顺序,依次匹配,直到出现第一个匹配的location
后停止。如果所有的location
都不匹配,就用第一个找到的最明确的文字字符串来匹配(the most specific literal string)。6. 待查询的 HTTP 请求
/index.php?user=john&page=1
/index.php?page=1&user=john
/index.php?page=1&something+else&user=john
7. 几个location的例子
例1:
/logo.gif
“/”
先被找到,然后匹配"\.(gif|jpg|png)$"
,再根据 redirective 找到root
是/data/www
,然后这个请求就被映射到"/data/www/logo.gif"
了,最后文件就被发送给到了客户端。例2:
/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:
/about.html
"/"
先被找到,且只有这一个匹配的。然后根据root
值/data/www
,就找到了文件/data/www/about.html
,然后发送给客户端。例4:
/
"/"
是很复杂的,先找到"/"
这个location
,然后根据root
值/data/www
,看/data/www/index.php
是否存在,如果存在 directive 就在内部重定向到/index.php
,然后 Nginx 根据这个再次搜索location
,重复上面第二个例子。
详细解决方案
高性能Web服务器Nginx的配备与部署研究(3)Nginx的请求处理机制
热度:336 发布时间:2012-07-02 17:46:22.0
相关解决方案
- nginx url路由~该怎么处理
- windows 上 php+nginx 并发下不去,求解决方法
- 刚配置了 centos+nginx+php 但DEDE的验证码就是无法显示解决方案
- windows 下 php+nginx 并发上不去,求解决方法
- 刚刚配置了 centos+nginx+php 但DEDE的验证码就是无法显示
- nginx url路由~解决办法
- [nginx] nginx 域名转发如何设置
- Nginx + Tomcat 服务器集群架构及调优心得小结
- nginx 502 Bad Gateway 异常解决方法
- nginx proxy_cache在windows2008上使用报错
- nginx+tomcat+memcached实现负载均衡,该怎么解决
- 在Centos+nginx+wordpress环境停启动iptables 网站返回502
- Nginx Alias 无法解析PHP的解决方法
- nginx + php 执行过程中出现404该如何解决
- nginx +php 环境筹建之php安装
- nginx 配备php环境
- php nginx 环境搭建 异常
- nginx+php5.3.20上,file_get_contents无法使用
- nginx 署理本地的html
- windows nginx +php 配备
- nginx“虚拟目录”不支持php的解决方法
- ubuntu10.04配备 nginx + php-fpm 模式
- Ubuntu上安装PHP+Nginx
- MYSQL interactive_timeout跟wait_timeout、NGINX keepalive_timeout
- linux+nginx 应用include无法包含文件?
- NGINX+PHP-金山逍遥网CMS公布系统配置
- phpmyadmin 装配 nginx 配置 cookie 配置
- Windows 上 Nginx + PHP5 的安装与配置
- 转:Windows 上 Nginx + PHP5 的安装与配置
- Nginx&&PHP-FPM配置及优化指南(下)