nginx 是如何处理访问请求的

 我来答
没没橘子果酱
2018-06-07 · TA获得超过5323个赞
知道大有可为答主
回答量:1091
采纳率:84%
帮助的人:415万
展开全部

一、nginx如何选择适当的虚拟服务器来处理请求?(server匹配)
(1)基于主机名匹配来选择合适的虚拟服务器
对比请求头中的host字段与server中的server_name,选择匹配的服务器。如果都不匹配,则选择该端口所对应默认的服务器。如果没有指定默认服务器,默默为服务器列表中的第一个,可以通过listen port default_server来显示指定。值得注意的是,默认服务器是与监听端口相关的,即每个端口都可以指定一个默认服务器。

[html] view plain copy

  • server {  

  • listen      80;  

  • server_name example.org www.example.org;  

  • ...  

  • }  

  • }  

  • 如果希望不处理没有指定host字段的请求,可以通过如下方式来实现:

    [html] view plain copy

  • server {  

  • listen      80;  

  • server_name "";  

  • return      444;  

  • }  

  • server_name也可以不指定,默认就是为“”,匹配没有指定host的请求。
    (2)基于IP 和 主机名来选择合适的虚拟服务器
    首先按照IP、端口进行匹配,匹配通过的server,再按照主机名进行匹配。如果主机名不匹配,则由默认匹配该IP、端口的默认服务器来进行处理。

    [html] view plain copy

  • server {  

  • listen      192.168.1.1:80;  

  • server_name example.org www.example.org;  

  • ...  

  • }  

  • }  

  • server {  

  • listen      192.168.2.1:80 ;  

  • server_name example.net www.example.net;  

  • ...  

  • }  

  • }  

  • 二、nginx如何选择合适的location来处理请求(location匹配)

    [html] view plain copy

  • server {  

  • listen      80;  

  • server_name example.org www.example.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的匹配方式分两种:a.根据路径前缀来匹配 b.根据正则表达式来匹配
    匹配的原则是:首先检测前缀匹配的location,选择有最大前缀的

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式