反向代理
server {
location /proxy {
proxy_pass http://localhost:10001;
# 添加响应头部返回给客户端
add_header X-Real-IP $remote_addr;
# 传给目标服务器设置的头部信息
# 源host
proxy_set_header Host $http_host;
#上层请求真实IP (一般设置在第一层代理服务器)
proxy_set_header X-Real-IP $remote_addr;
# 访问的协议
proxy_set_header X-Forwarded-Scheme $scheme;
# 将经过多个代理服务器的ip以 逗号 拼接,最左边是用户真实ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Websocket
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade $http_upgrade;
# 目标服务器数据回传超时时间
proxy_send_timeout 10;
# 目标服务器响应超时时间
proxy_read_timeout 30;
# 和目标服务器连接超时时间
proxy_connect_timeout 90;
}
}
简单的写一个后端服务:
const express = require("express");
const app = express();
const port = 10001;
app.use((req, res) => {
res.json({
port,
code: 200,
msg: "ok",
url: req.url
})
})
app.listen(port, () => console.log('server is running on port' + port));
防盗链
valid_referers [none|blocked|server_names|string ...];
none:允许空的引用来源(Referer)。blocked:阻止所有的引用来源(Referer)。server_names:允许与服务器名匹配的引用来源(Referer)。string:允许指定字符串的引用来源(Referer),可以使用通配符和正则表达式进行匹配。
下面例子设置了不允许refer为none(不允许单独打开图片),使用正则匹配只允许refer为 general-mac.com 或其任何子域名,其余的都会返回403,
server {
server_name *.general-mac.com;
location ~ \.(png|jpg|jpeg|gif|webp)$ {
valid_referers blocked server_names "~.*general-mac\.com$";
if ($invalid_referer) {
return 403;
}
}
}