0%

nginx指令详解

Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

一、基础

二、详解

  1. http

  2. location

  3. rewrite

ngx_http_rewrite_module模块用来使用正则表达式(PCRE)改变请求的URI,返回重定向,并有条件地选择配置。

      Nginx由内核和模块组成:内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作;Nginx的功能如此强大是因为它有非常多的模块来支撑,Nginx本身包含很多模块,用户也可以根据自己的需求开发模块。

      Nginx模块从结构上分为:基础模块、核心模块和第三方模块。第三方模块从功能上又可以分为Handlers处理器模块:直接处理请求,并进行输出内容和修改headers信息等操作,一般只有一个;Filters过滤器模块:主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出;Proxies代理类模块:此类模块是Nginx的HTTP Up-stream之类的模块,主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能。其中,ngx_http_rewrite_module模块用来使用正则表达式(PCRE)改变请求的URI,返回重定向,并有条件地选择配置。

  • 语法rewrite regex replacement [flag];

    • regex,正则表达式,这个太重要了,好多地方都会用到
    • replacement,重写后的内容,即替代前面的regex
    • flag,可选参数,根据具体情况使用,常见如下:
      • last,本条规则匹配完成后继续向下匹配新的location
      • break,本条规则匹配完成后终止,不再匹配任何规则
      • redirect,返回302临时重定向
      • permanent,返回301永久重定向
  • 实战

    • 永久重/临时定向
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      ## 编辑hosts文件,加入以下内容
      127.0.0.1 rewrite.com
      127.0.0.1 nginx.com

      ## 编辑nginx配置文件,加入以下内容(或者使用多个子配置文件)
      server {
      listen 80;
      server_name nginx.com;
      location / {
      root /your_path/nginx
      index index.php index.html index.htm;
      }
      }

      server {
      listen 80;
      server_name rewrite.com;
      location / {
      root /your_path/rewrite;;
      rewrite ^/(.*) http://nginx.com permanent;
      #rewrite ^/(.*) http://nginx.com redirect;
      index index.php index.html index.htm;
      }
      }

      ## 重启nginx
      nginx -s reload

      ## 浏览器访问,command + option + i审查元素
      rewrite.com

      Status Code: 301 Moved Permanently
      Status Code: 302 Moved Temporarily
  1. server
  2. upstream

二、参考

  1. 参考一
  2. 参考二
  3. 参考三