HTTP的包头包含:
host(服务器的主机名)
user-agent(Web浏览器类型)
accept(定义客户端可以处理的媒体类型)
connection(表明是否保存socket连接为开放)
date(发送HTTP消息的日期)
server(标明Web服务器软件及其版本号)
Last-Modified(服务器页面内容上次被修改的日期和时间)
content-type(数据类型)
content-length(指定包含于请求或响应中数据的字节长度)
accept-ranges(在给定的偏移和长度处,为资源组成部分的接受请求)
refener(标明产生请求的初始资源)
etag(服务器向客户端分派一个唯一的标识符)
location(重定向请求者至另一个位置)
等等的字段,在使用nginx的时候,可以对HTTP头中的一些字段进行匹配,控制,分发等操作
针对host字段就可以实现nginx基于虚拟主机、ip的分发:
server {
listen 80;
server_name www.a.com;
location / {
root /tmp/www1;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.b.com;
location / {
root /tmp/www2;
index index.html index.htm;
}
}
然而针对user-agent字段可以实现对于使用不同浏览器、终端的代理:
server {
listen 80;
server_name www.a.com;
location / {
proxy_pass http://ip1;
if ($http_user_agent ~ MSIE ) {
proxy_pass http://ip2;
}
if ($http_user_agent ~ Mozilla ) {
proxy_pass http://ip3;
}
}
}
针对HTTP头的location可以实现nginx的反向代理
server {
listen 80;
server_name www.a.com;
location / {
root /tmp/www1;
index index.html index.htm;
}
location ~ \.php${
proxy_pass http://ip1;
}
location ~ \.jsp${
proxy_pass http://ip2;
}
}
针对refener字段可以实现nginx的防盗链
location ~* \.(gif|jpg|jpeg|png|bmp|txt|zip|jar|swf)$ {
root /tmp/www;
valid_referers none blocked *.joker.com;
if ($invalid_referer) {
return 403;
}
}
总结:
对于nginx的一些功能对比http头中的字段进行分析,可以更快的理解nginx的相关的工作原理,nginx基于虚拟主机、ip的代理可以理解为当服务器收到客户端发送的请求后,通过HTTP头的host字段对比nginx中的配置来进行判断,让nginx知道将请求让哪个服务器来进行处理,nginx针对不同用户,使其访问的页面不一样可以理解为当服务器收到客户端发送的请求后,通过HTTP头的user-agent字段对比nginx中的配置来进行判断客户端所使用的浏览器类型以及使用哪种系统,从而让nginx知道将请求让哪个服务器来进行处理该请求,而nginx的反向代理就是针对HTTP头的URI字段进行的重定向,当服务器接受到客户端发送的请求后,nginx将自身中的参数与http头的URI字段对比,如果匹配OKnginx服务器会将该请求扔给相对应的服务器来进行处理,nginx的防盗链技术就是自身的配置参数与http头的refener字段进行匹配,如果匹配OK则放行,否则报错。php运行的几种模式
1.mod模式,该模式下web服务器与php的连接是建立在模块的基础上的,也就是说web服务器要调用一个模块,让其本身增加处理php页面的能力,此方式php和web服务器无法分离,这样就在无形之中给服务器带来了额外的压力。
2.fastcgi模式,该模式下web服务器与php的连接是通过类似插件的方式来实现的,web服务器载入fastcgi进程管理器,fastcgi进程管理器自行初始化并建立多个cgi解释器等待web服务器的连接,当有请求到来的时候,web服务器上的fastcgi进程管理器与cgi解释器进行连接,并将请求发给子进程php_cgi进行处理,子进程将处理结果返回给fastcgi进程管理器,在传递给web服务器,此种模式可以将web服务器与php分离,让web服务器的压力减小。
nginx的限速可以理解为nginx为即将到来的请求划分出一块空白的内存空间,并定义其使用规则,到来的请求都要遵守制定的规则,这里的规则就是允许下载的速度以及允许的并发数limit_zone one $binary_remote_addr 10m;
server {
listen 80;
server_name serverip;
location / {
root /tmp/www;
limit_rate 10k;
limit_conn one 3;
}
}