zoukankan      html  css  js  c++  java
  • 用HTTP核心模块配置一个静态Web服务器

    静态Web服务器的主要功能由ngx_http_core_module模块(HTTP框架的主要成员)实现与core模块类似,可以根据相关模块(如ngx_http_gzip_filter_module、ngx_http_image_filter_module等)的配置项说明,方便地在nginx.conf配置文件中加入新的配置项,从而实现更多的Web服务器功能。

    一个典型的静态Web服务器会包含多个server块和location块,例如:

    http {
        gzip on;
        upstream {
               …
        }
        …
        server {
               listen localhost:80;
               …
               location /webstatic {
                            if …
     {
                                    …
                            }
                            root optwebresource;
                            …
               }
               location ~* .(jpg|jpeg|png|jpe|gif)$ {
                            …           }
        }
        server {
               …
        }
    }

    所有的HTTP配置项都必须直属于http块、server块、location块、upstream块或if块等,同时,在描述每个配置项的功能时,会说明它可以在上述的哪个块中存在,因为有些配置项可以任意地出现在某一个块中,而有些配置项只能出现在特定的块中。

    下面会把这些配置项分为以下8类进行详述:

    1.虚拟主机与请求的分发

    2.文件路径的定义

    3.内存及磁盘资源的分配

    4.网络连接的设置

    5.MIME类型的设置

    6.对客户端请求的限制

    7.文件操作的优化

    8.对客户端请求的特殊处理。

    并在后面列出ngx_http_core_module模块提供的变量和意义

    1. 虚拟主机与请求分发

    1)server_name

    由于ip数量有限,所以经常存在多台主机域名对应同一ip的情况,这时就可以用server_name对应用户请求中的主机域名

    用server块定义虚拟主机,这样nginx就能以不同方式处理不同域名的http请求了

    语法: server_name name[...];
    配置块: server

    默认: server_name "";
    配置块: serverserver_name后可以跟多个主机名称,如server_name www.testweb.com 、download.testweb.com;。
    在开始处理一个HTTP请求时,Nginx会取出header头中的Host,与每个server中的server_name进行匹配,以此决定到底由哪一个server块来处理这个请求。有可能一个Host与多个server块中的server_name都匹配,这时就会根据匹配优先级来选择实际处理的server块。
    server_name与Host的匹配优先级如下:

    1)首先选择所有字符串完全匹配的server_name,如www.testweb.com。
    2)其次选择通配符在前面的server_name,如*.testweb.com。
    3)再次选择通配符在后面的server_name,如www.testweb.*4)最后选择使用正则表达式才匹配的server_name,如~^.testweb.com$。
    5)最后的最后匹配部分匹配的,部分匹配的匹配到之后还要向后查询,后面不匹配才匹配此项,后面匹配就匹配后面的。前面的4项匹配之后直接处理,不会再匹配后面的。

    如果Host与所有的server_name都不匹配,这时将会按下列顺序选择处理的server块。

    1)优先选择在listen配置项后加入[default|default_server]的server块。
    2)找到匹配listen端口的第一个server块。

    如果server_name后跟着空字符串(如server_name"";),那么表示匹配没有Host这个HTTP头部的请求。
    注意:Nginx正是使用server_name配置项针对特定Host域名的请求提供不同的服务,以此实现虚拟主机功能。

    2)location

    location尝试用用户请求的URI来匹配表达式,匹配则就选择location{}块来处理请求

    语法: location[=|~|~*|^~|@]/uri/{...}
    配置块: server

    下面介绍下匹配的规则:

    =:精确匹配

    ~:大小写敏感

    ~*:忽略大小写

    ^~:前缀匹配

    @:内部请求之间的重定向

    正则:如

    location ~* .(gif|jpg|jpeg)$ {
      # 匹配以
    .gif、
    .jpg、
    .jpeg结尾的请求
             …
    }

    /:匹配所有请求,如

    location  / {
      # /可以匹配所有请求
            …
    }

    2. 文件路径的定义

    1)以root方式设置资源路径

    语法: root path;
    默认: root html;
    配置块: http、server、location、if

    注意:当一个请求匹配多个location时,实际请求会被第一个location处理

    例:

    location /download/ {
            root optwebhtml;
    }

    在上面的配置中,如果有一个请求的URI是/download/index/test.html,那么Web服务器将会返回服务器上optwebhtml/download/index/test.html文件的内容。

    2)以alias方式设置资源路径

    语法: alias path;
    配置块: location

    例:

    location conf {
        alias usr/local/nginx/conf/;    
    }

    在上面的配置中,如果有一个请求的URI是/conf/nginx.conf,那么Web服务器将会返回服务器上usr/local/nginx/conf/nginx.conf

    如果用root设置,如下表示:

    location conf {
        root usr/local/nginx/;         
    }

    alias后面还可以添加正则表达式,例如:

    location ~ ^/test/(w+).(w+)$ {
    alias usrlocal/nginx/$2/$1.$2;
    }

    这样,请求在访问/test/nginx.conf时,Nginx会返回usr/local/nginx/conf/nginx.conf文件中的内容(其中,$1代表正则匹配的第一个参数,$2代表正则匹配的第二个参数)。

    3)访问首页

    语法: index file...;
    默认: index index.html;
    配置块: http、server、location

    例如:

    location  {    
    root path; index index.html htmlindex.php
    /index.php; }

    接收到请求后,Nginx首先会尝试访问path/index.php文件,如果可以访问,就直接返回文件内容结束请求,否则再试图返回path/htmlindex.php文件的内容,依此类推。

  • 相关阅读:
    POJ 2234 Matches Game 尼姆博弈
    复杂问题的简单抽象:魔兽世界中的兔子们
    POJ 2368 巴什博奕
    POJ 1067 取石子游戏 威佐夫博弈
    Codeforces 704A Thor 队列模拟
    Codeforces 703B Mishka and trip
    P1447 [NOI2010]能量采集
    P2652 同花顺
    P2034 选择数字 / P2627 [USACO11OPEN]Mowing the Lawn G
    P2515 [HAOI2010]软件安装
  • 原文地址:https://www.cnblogs.com/gengsc/p/6875123.html
Copyright © 2011-2022 走看看