发布时间:2014-09-05 16:40:37作者:知识屋
原文:http://nginx.org/en/docs/http/request_processing.html
基于名字的虚拟服务器
nginx首先决定哪个server应该处理请求,我们先从一个简单的例子开始:三台监听80端口的虚拟服务器
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;
...
}
在这个配置中,nginx测试的是只通过header line “Host”决定哪台server处理请求。
如果“Host”header line 不匹配任何server_name,或者用户请求中根本就不包括这些server_name,
那么nginx将会将这个请求转发给默认的server。在上面的配置中,第一个就是默认server(这是nginx默认的配置规则)。
如果你不想让第一个server作为默认的,那么可以在listen指令中添加“default_server”参数来明确指定
如下:
server {
listen 80 default_server;
server_name nginx.net www.nginx.net;
...
}
PS:0.8.21之后的nginx版本才支持“default_server”参数
“default_server”参数是监听端口的一个属性,不是服务器名字
怎么阻止没有指定服务器名字的请求
如果不想处理没有指定的“Host”header line请求,你需要定义一个丢掉请求的服务器
如下:
server {
listen 80;
server_name "";
return 444;
}
server_name是空的话就可以匹配没有“Host”header line的请求,会返回一个特定代码444,并断开客户端的链接
0.8.48版本以后,nginx就有了处理上述那种请求的功能,所以这个设置在配置文件中可以忽略了
服务器名和IP地址混合的虚拟服务器
我们来看一个更复杂的配置,虚拟服务器监听不同地址的端口
如下:
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;
...
}
在这种配置中,nginx首先检查“server”模块“listen”指令中对应的的IP地址和端口
然后检查请求的“Host”header line中“server”模块的“server_name”项
如果找不到主机名就会把请求转给默认server
比如:
192.168.1.1:80端口收到www.nginx.com的请求,就会把请求转发给第一个server的192.168.1.1:80处理,
即使第一个server没有指定www.nginx.com
就如之前所说,默认server是监听端口的属性,不同的默认servers可能会被指定不同的监听端口
比如:
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;
...
}
一个简单的PHP站点的配置
我们现在看一个nginx怎么选择location去处理一个典型简单的PHP站点请求的例子:
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;
}
}
linux一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能