Nginx-代理转发(四)
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
区别于root
和alias
,是将请求反向代理到指定的url,后面博文会讲解他们的区别
- 语法
1 | proxy_pass <URL> |
- 示例
1 | proxy_pass http://127.0.0.1:8081; |
- 注意事项:nginx 配置 proxy_pass 中 url 末尾 带/ 与 不带/ 的区别
带 / : 会将原uri去除location匹配表达式后的内容拼接在proxy_pass中url之后
用户请求 URI
1 | /bbs/abc/test.html |
proxy_pass 配置
1 | # 匹配路径,后缀不带/ |
【 location /bbs 】
计算规则:http://127.0.0.1:8080/ + (/bbs/abc/test.html - /bbs)
【 location /bbs/ 】
计算规则:http://127.0.0.1:8080/ + (/bbs/abc/test.html - /bbs/)
不带 / : location匹配到的部分属于请求部分,匹配到 /bbs/ 时会将整个请求部分追加到proxy_pass上
用户请求 URI
1 | /bbs/abc/test.html |
proxy_pass 配置
1 | # 匹配路径,后缀不带/ |
【 location /bbs 】
计算规则:http://127.0.0.1:8080 + (/bbs/abc/test.html)
【 location /bbs/ 】
计算规则:http://127.0.0.1:8080 + (/bbs/abc/test.html)
3. 设置代理请求 headers
headers:指的是Nginx服务器发送给客户端的 HTTP 响应头部信息。
在HTTP响应中,头部信息包含关于响应的元数据,如响应的内容类型、响应的日期和时间、服务器的类型和版本、以及其他有关响应和请求的信息。
3.1. 问题
问题位置:系统监控 -> 在线用户 - 主机地址
问题描述:其中主机字段应该是获取的当前登录用户的真实 ip 地址,而不是主机服务器的ip。
3.2. 解决方案
在
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;
}
}
常用变量值
| 变量名称 | 变量解释 |
| —————— | —————————————————————————— |
| $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
2[root@VM-0-9-centos home]# /usr/sbin/nginx -s reload
[root@VM-0-9-centos home]#
访问