1. Nginix基本配置框架

a. 配置的几个顶级指令:

  • events – 一般连接处理
  • http – HTTP协议流量
  • mail – Mail协议流量
  • stream – TCP协议流量

b. 配置文件:nginx安装目录下的 conf 文件夹内 nginx.conf 文件

 

c. 基本结构如下:

user nobody; # a directive in the 'main' context

events {
    # configuration of connection processing
}

http {

    # Configuration specific to HTTP and affecting all virtual servers

    server {
        # configuration of HTTP virtual server 1

        location /one {
            # configuration for processing URIs with '/one'
        }

        location /two {
            # configuration for processing URIs with '/two'
        }
    }

    server {
        # configuration of HTTP virtual server 2
    }
}

stream {
    # Configuration specific to TCP and affecting all virtual servers

    server {
        # configuration of TCP virtual server 1 
    }
}


 2. 设置虚拟服务器

a. 基本结构:

http {
    server {
        # Server configuration
    }
}

b. server基本机构:

server {
    listen 80;
   server_name localhost;
# The rest of server configuration
   location / {
     proxy_pass http://www.example.com;
   } }

c. location配置:

location指令有两种类型的参数:前缀字符串(路径名)和正则表达式。

对于要匹配前缀字符串的请求URI,必须以前缀字符串开头:

location /path/ {
    ...
}

正则表达式之前是区分大小写匹配的波形符号(~),或者不区分大小写匹配的波形符号(~*):

location ~ \.html? {
    ...
}

请求处理方式:

  1. 测试所有URI的前缀字符串。
  2. =(等号)修饰符定义了URI和前缀字符串完全匹配。如果找到完全匹配,则搜索停止。
  3. 如果^~(插入符号)修饰符预先添加最长匹配前缀字符串,则不会检查正则表达式。
  4. 存储最长匹配的前缀字符串。
  5. 根据正则表达式测试URI。
  6. 断开第一个匹配的正则表达式并使用相应的位置。
  7. 如果没有正则表达式匹配,则使用与存储的前缀字符串相对应的位置。

location上下文可以包含定义如何解析请求的指令:

server {
    location /images/ {
    # 静态文件文件系统路径 root
/data; } location / {
    # 代理服务配置 proxy_pass http
://www.example.com; } }

d. 重写URI请求

可以通过使用rewrite指令在请求处理期间多次修改请求URI,您可以在locationserver上下文中包含多个rewrite指令。

该指令具有一个可选参数和两个必需参数。 第一个(必需)参数是请求URI必须匹配的正则表达式。 第二个参数是用于替换匹配URI的URI。 可选的第三个参数是可以停止进一步重写指令的处理或发送重定向(代码301302)的标志。例如:

server {
    ...
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
    return  403;
    ...
}

此示例配置区分两组URI(正则匹配知识请自行补充,代码中颜色对应匹配,对号入座)。 诸如/download/some/media/file之类的URI更改为/download/some/mp3/file.mp3。由于最后一个标志,所以跳过后续指令(第二次rewritereturn指令),但NGINX继续处理该请求,该请求现在具有不同的URI。类似地,诸/download/some/audio/file的URI被替换为/download/some/mp3/file.ra。 如果URI与rewrite指令不匹配,则NGINX将403错误代码返回给客户端。

有两个中断处理重写指令的参数:

  • last - 停止执行当前服务器或位置上下文中的重写指令,但是NGINX会搜索与重写的URI匹配的位置,并且应用新位置中的任何重写指令(URI可以再次更改,往下继续匹配)。
  • break - 像break指令一样,在当前上下文中停止处理重写指令,并取消搜索与新URI匹配的位置。新位置(location)块中的rewrite指令不执行。

更多配置:重写http响应、错误处理、状态码配置、变量等:

参考:https://www.yiibai.com/nginx/nginx-web-server.html#article-start

 

posted on 2018-08-15 15:39  i野老i  阅读(731)  评论(0编辑  收藏  举报