Nginx反向代理
# 配置语法
反向代理中的常用指令:
# 该指令用来设置被代理服务器地址,可以是主机名称、IP地址加端口号形式。
proxy_pass
# 允许重新定义或添加字段传递给代理服务器的请求头。
proxy_set_header
1
2
3
4
5
2
3
4
5
# 实例
# 代理服务器
# 访问/就会被转到哔哩哔哩
location / {
root html;
index index.html index.htm;
proxy_pass http://bilibili.com;
}
1
2
3
4
5
6
2
3
4
5
6
# 反向代理解决跨域
前端
a.onclick = () => {
let xhr = new XMLHttpRequest()
// 发送请求(接口/api/)
xhr.open('GET','/api/portal/list')
xhr.onreadystatechange = () => {
if(xhr.readyState == 4 && xhr.status == 200){
console.log(xhr.responseText);
}
}
xhr.send(null)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
服务端
const express = require('express')
const app = express()
app.get('/portal/list', (req, res) => {
res.json({
code: 200,
message: "搞咩啊"
})
})
app.listen(9000,()=>{
console.log('success');
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
nginx
配置文件
# 截取到/api/ 将会转发到 http://localhost:9000/
location /api/ {
proxy_pass http://localhost:9000/;
}
1
2
3
4
2
3
4
proxy_set_header
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# X-Real-IP 客户端或上一级代理ip
# X-Real-Port 客户端或上一级端口
# X-Forwarded-For 包含了客户端和各级代理ip的完整ip链路
1
2
3
4
5
6
7
2
3
4
5
6
7
其中X-Real-IP
是必需的,后两项选填。当只存在一级nginx
代理的时候X-Real-IP
和X-Forwarded-For
是一致的,而当存在多级代理的时候,X-Forwarded-For
就变成了如下形式 。
$remote_addr
是前一节点的IP
,并不一定是用户的真实IP
。
上次更新: 2024/08/14, 04:14:33