概述

正则语法

使用 perl 正则语法

反向代理

参考: Nginx(三)——nginx 反向代理 - YSOcean - 博客园

配置 demo

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
server {
        listen       80;
        server_name  www.123.com;

        location / {
            # 被代理的服务
            proxy_pass http://127.0.0.1:8080;
            index  index.html index.htm index.jsp;
        }
    }

单端口对应多个服务

参考: nginx 一个端口多域名服务方案_玖拾说架构-CSDN博客_nginx 一个域名多个端口

配置 demo

通过 多个 server 块实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 80;
server_name server1.host.com;
location / {
proxy_pass http://server1.com/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
}
}
server {
listen 80;
server_name server2.host.com;
location / {
proxy_pass http://server2.com/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
}

启用文件列表模式

什么是文件列表模式?

  • 在访问的是文件夹时,展示文件的列表,类似命令 'ls -al'
  • 举例,访问 localhost/demo/

    Index of /demo/
    ../
    demo.txt                                           09-Mar-2022 14:51                   6
    

启用方法

参考: How to configure nginx to enable kinda 'file browser' mode? - Stack Overflow

使用 autoindex on;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
server {
    listen 80;
    listen [::]:80;
    server_name image.mysite.com;

    # 在全局启用
    location / {
        root /path/to/www/images/;
        autoindex on;
    }

    # 在特定文件夹启用
    location /somedirectory/ {
        autoindex on;
        # 更多个性配置
        autoindex_exact_size off;
        autoindex_format html;
        autoindex_localtime on;
    }

}

server_name 指令

参考:

拼写规则:

  • 可以是完全匹配字符串
  • 可以使用通配符(*)
  • 使用正则表达式

    • 规范: ~pattern
    • 注意:这里使用了符号 "~"
    • eg: server_name www.example.com ~^www\d+\.example\.com$;

location 指令(directive)

注意: 多条 location 指令之间有优先级关系

基本语法

1
2
3
4
Syntax:     location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default:    —
Context:    server, location

使用规则:

  • location 内部可以再加 location 语句块
匹配符例子解释
~~ pattern使用正则表达式 regex
~*~* pattern使用忽略大小写的 regex
"="\= uri精准匹配
^~^~ uri精准匹配,高优先级,并且匹配上,就停止,不是再去找最长匹配 ,用于目录匹配
无修饰符uri精准匹配,从头开始匹配,前缀匹配,用于定义前缀

优先级:

1
2
3
4
5
6
1. location =    # 精准匹配
2. location ^~   # 带参前缀匹配
3. location ~    # 正则匹配(区分大小写)
4. location ~*   # 正则匹配(不区分大小写)
5. location /a   # 普通前缀匹配,优先级低于带参数前缀匹配。
6. location /    # 任何没有匹配成功的,都会匹配这里处理

注意:

  1. 正则匹配

    • 取最先匹配
  2. 前缀匹配(精准 uri 匹配)

    • 取最长匹配
    • ^~ 是例外,匹配即终止寻找其他可能

笔记