阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ngnix如何处理http请求

527次阅读
没有评论

共计 3262 个字符,预计需要花费 9 分钟才能阅读完成。

一、基于名称的虚拟服务器

nginx 首先确定哪个服务器应处理该请求。让我们从一个简单的配置开始,其中所有三个虚拟服务器都在端口 *:80 上侦听:

    server {
        listen 80;
        server_name example.org www.example.org;
        …
    }

    server {
        listen 80;
        server_name example.net www.example.net;
        …
    }

    server {
        listen 80;
        server_name example.com www.example.com;
        …
    }

在此配置中,nginx 仅测试请求的 header 字段“host”以确定应将请求路由到哪个服务器。如果其值与任何服务器名称都不匹配,或者请求根本不包含此 header 字段,则 nginx 会将请求路由到该端口的默认服务器。在上面的配置中,默认服务器是第一个服务器 - 这是 nginx 的标准默认行为。还可以使用 listen 指令中的 default_server 参数来显式设置哪个服务器应为默认服务器:

    server {
        listen 80 default_server;
        server_name example.net www.example.net;
        …
    }

    自 0.8.21 版以后的版本,default_server 参数已可用。在早期版本中,应改用默认参数。

请注意,默认服务器是侦听端口的属性,而不是服务器名称的属性。稍后再详细介绍。

二、如何阻止使用未定义的服务器名称的 http 请求

如果不允许不带“主机”header 字段的请求,则可以定义仅丢弃请求的服务器:

    server {
        listen 80
        server_name””;
        return 444;
    }

在这里,服务器名称设置为空字符串,该字符串将与没有“Host”header 字段的请求进行匹配,并返回特殊的 nginx 的非标准代码 444,以关闭连接。

    从版本 0.8.48 开始,这是服务器名称的默认设置,因此可以省略 server_name“”。在早期版本中,计算机的主机名用作默认服务器名。

三、基于名称和 IP 地址混合的虚拟服务器

让我们看一个更复杂的配置,其中一些虚拟服务器侦听不同的地址:

    server {
        listen 192.168.1.1:80;
        server_name example.org www.example.org;
        …
    }

    server {
        listen 192.168.1.1:80;
        server_name example.net www.example.net;
        …
    }

    server {
        listen 192.168.1.2:80;
        server_name example.com www.example.com;
        …
    }

在这种配置中,nginx 首先根据服务器块的侦听指令测试请求的 IP 地址和端口。然后,它根据与 IP 地址和端口匹配的服务器块的 server_name 条目测试请求的“主机”header 字段。如果找不到服务器名称,则默认服务器将处理该请求。例如,在 192.168.1.1:80 端口上收到的对 www.example.com 的请求将由 192.168.1.1:80 端口的默认服务器(即第一台服务器)处理,因为没有 www.example.com 为此端口定义。

如前所述,默认服务器是侦听端口的属性,并且可以为不同的端口定义不同的默认服务器:

    server {
        listen 192.168.1.1:80;
        server_name example.org www.example.org;
        …
    }

    server {
        listen 192.168.1.1:80 default_server;
        server_name example.net www.example.net;
        …
    }

    server {
        listen 192.168.1.2:80 default_server;
        server_name example.com www.example.com;
        …
    }

四, 一个简单的 PHP 站点配置

现在,让我们看看 nginx 如何选择一个位置来处理典型的简单 PHP 网站的请求:

    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;
        }
    }
   
无论列出的顺序如何,nginx 首先搜索文字字符串给定的最特定的前缀位置。在上面的配置中,唯一的前缀位置是“/”,并且由于它匹配任何请求,因此将被用作最后的手段。然后,nginx 按照配置文件中列出的顺序检查由正则表达式指定的位置。第一个匹配的表达式将停止搜索,nginx 将使用此位置。如果没有正则表达式与请求匹配,则 nginx 使用较早发现的最特定的前缀位置。

请注意,所有类型的位置仅测试没有参数的请求行的 URI 部分。这样做是因为查询字符串中的参数可以通过几种方式给出,例如:

    /index.php?user=john&page=1
    /index.php?page=1&user=john

此外,任何人都可以在查询字符串中请求任何内容:

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

现在,让我们看一下在以上配置中如何处理请求:

请求“/logo.gif”, 首先与前缀位置“/”匹配,然后与正则表达式“\.(gif | jpg | png)$”匹配,因此由后一个位置处理。使用指令“root /data/www”将请求映射到文件 /data/www/logo.gif,然后将文件发送给客户端。

请求“/index.php”, 也首先与前缀位置“/”匹配,然后与正则表达式“\.(php)$”匹配。因此,它由后一个位置处理,并将请求传递到在 localhost:9000 上侦听的 FastCGI 服务器。fastcgi_param 指令将 FastCGI 参数 SCRIPT_FILENAME 设置为“/data/www/index.php”,然后 FastCGI 服务器执行该文件。变量 $document_root 等于 root 指令的值,变量 $fastcgi_script_name 等于请求 URI,即“/index.php”。

请求“/about.html”仅与前缀位置“/”匹配,因此在该位置进行处理。使用指令“root /data/www”将请求映射到文件 /data/www/about.html,然后将文件发送给客户端。

处理请求“/”更为复杂。它仅与前缀位置“/”匹配,因此由该位置处理。然后,index 指令根据其参数和“root /data/www”指令对索引文件的存在进行测试。如果文件 /data/www/index.html 不存在,文件 /data/www/index.php 存在,则该指令将内部重定向到“/index.php”,并且 nginx 再次搜索位置如果请求是由客户端发送的。如前所述,重定向的请求最终将由 FastCGI 服务器处理。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3262字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7997349
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛 NAS 玩转 Frpc 并且配置,随时随地直连你的私有云 大家好,我是星哥,最近在玩飞牛 NAS。 在数...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...