Ngnix如那里理惩罚http请求

一、基于名称的虚拟处事器

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

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

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

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

在此设置中,nginx仅测试请求的header字段“host”以确定应将请求路由到哪个处事器。假如其值与任那里事器名称都不匹配,可能请求基础不包括此header字段,则nginx会将请求路由到该端口的默认处事器。在上面的设置中,默认处事器是第一个处事器-这是nginx的尺度默认行为。还可以利用listen指令中的default_server参数来显式配置哪个处事器应为默认处事器:

server {
        listen 80 default_server;
        server_name 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 ;
        ...
    }

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

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

在这种设置中,nginx首先按照处事器块的侦听指令测试请求的IP地点和端口。然后,它按照与IP地点和端口匹配的处事器块的server_name条目测试请求的“主机”header字段。假如找不随处事器名称,则默认处事器将处理惩罚该请求。譬喻,在192.168.1.1:80端口上收到的对的请求将由192.168.1.1:80端口的默认处事器(即第一台处事器)处理惩罚,因为没有为此端口界说。

如前所述,默认处事器是侦听端口的属性,而且可觉得差异的端口界说差异的默认处事器:

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

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

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

四, 一个简朴的PHP站点设置

此刻,让我们看看nginx如何选择一个位置来处理惩罚典范的简朴PHP网站的请求:

server {
        listen 80
        server_name 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

此刻,让我们看一下在以上设置中如那里理惩罚请求:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsddxx.html