1. 前言

在 《Nginx-反向代理(三)》博文中在 nginx 的配置文件中出现了一下参数 proxy_pass 以及 如何 设置代理请求headers

1
2
3
4
5
# 监听请求静态资源路径
location / {
# 配置代理服务器, 这里 如果是本机就直接使用 http://localhost:port,如果不是就是用目标服务器的 ip + 端口。
proxy_pass http://server2:port;
}

2. proxy_pass

  • proxy_pass: 用于配制代理服务器,proxy_pass 区别于 rootalias ,是将请求反向代理到指定的url,后面博文会讲解他们的区别
  • 语法
1
proxy_pass <URL>
  • 示例
1
2
proxy_pass http://127.0.0.1:8081;
proxy_pass http://127.0.0.1/proxy
  • 注意事项:nginx 配置 proxy_pass 中 url 末尾 带/ 与 不带/ 的区别

带 / : 会将原uri去除location匹配表达式后的内容拼接在proxy_pass中url之后

用户请求 URI

1
/bbs/abc/test.html

proxy_pass 配置

1
2
3
4
5
6
7
8
9
10
11
# 匹配路径,后缀不带/
location /bbs {
# 带 / : 会将原uri去除location匹配表达式后的内容拼接在proxy_pass中url之后
proxy_pass http://127.0.0.1:8080/;
}

# 匹配路径,后缀带/
location /bbs/ {
# 带 / : 会将原uri去除location匹配表达式后的内容拼接在proxy_pass中url之后
proxy_pass http://127.0.0.1:8080/;
}

【 location /bbs 】

【 location /bbs/ 】

不带 / : location匹配到的部分属于请求部分,匹配到 /bbs/ 时会将整个请求部分追加到proxy_pass上

用户请求 URI

1
/bbs/abc/test.html

proxy_pass 配置

1
2
3
4
5
6
7
8
9
10
11
# 匹配路径,后缀不带/
location /bbs {
# 不带 / : location匹配到的部分属于请求部分,匹配到 /bbs/ 时会将整个请求部分追加到proxy_pass上
proxy_pass http://127.0.0.1:8080;
}

# 匹配路径,后缀带/
location /bbs/ {
# 不带 / : location匹配到的部分属于请求部分,匹配到 /bbs/ 时会将整个请求部分追加到proxy_pass上
proxy_pass http://127.0.0.1:8080;
}

【 location /bbs 】

【 location /bbs/ 】

3. 设置代理请求 headers

headers:指的是Nginx服务器发送给客户端的 HTTP 响应头部信息

在HTTP响应中,头部信息包含关于响应的元数据,如响应的内容类型、响应的日期和时间、服务器的类型和版本、以及其他有关响应和请求的信息。

3.1. 问题

问题位置:系统监控 -> 在线用户 - 主机地址

问题描述:其中主机字段应该是获取的当前登录用户的真实 ip 地址,而不是主机服务器的ip。

image-20230511203608477

3.2. 解决方案

  1. nginx 配置文件(8002.conf)中新增如下如下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # 虚拟主机server块
    server{

    # 监听端口
    listen 8002;
    # 匹配请求中的host值
    server_name ruoyi.localhost;

    # 监听请求静态资源路径
    location / {

    #nginx的主机地址
    proxy_set_header Host $http_host;

    #用户端真实的IP,即客户端IP
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # 配置代理服务器
    proxy_pass http://192.168.206.120:8088;
    }

    }
  1. 常用变量值

    | 变量名称 | 变量解释 |
    | —————— | —————————————————————————— |
    | $host | nginx主机IP,例如 192.168.206.120 |
    | $http_host | nginx主机IP和端口,例如 192.168.206.120:8002 |
    | $proxy_host | proxy_pass里配置的主机名和端口,例如:localhost:8088 |
    | $remote_addr | 用户的真实IP,即客户端IP |

  1. 然后刷新配置文件

    1
    2
    [root@VM-0-9-centos home]# /usr/sbin/nginx -s reload
    [root@VM-0-9-centos home]#
  1. 访问

    image-20230511203437468

4. 参考博文