nginx - 在一台服务器上使用上游时如何获取真实的客户端 IP?
问题描述
我有一个运行 nginx 的 vps,使用 ngx_stream_ssl_preread_module 我使 SSL 和非 SSL 协议在同一个端口上工作。查了access.log,发现有很多127.0.0.1开头的行。显然这不是真正的客户端 IP。
我尝试修改我的nginx.conf,比如proxy_set_header、real_ip_header、set_real_ip_from 127.0.0.1等,都没有效果。
这是我在 nginx.conf 中的原始流配置。
stream {
server {
listen 443;
ssl_preread on;
proxy_pass $upstream;
}
map $ssl_preread_protocol $upstream {
default shadowsocks;
"TLSv1.1" https;
"TLSv1.2" https;
"TLSv1.3" https;
}
upstream shadowsocks {
server 127.0.0.1:7890;
}
upstream https {
server 127.0.0.1:8888;
}
}
解决方案
我会尝试如下设置代理标头:
server {
listen 443 ssl default_server;
ssl_preread on;
proxy_redirect off;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
proxy_pass $upstream;
}
}
推荐阅读
- flask - 如何将使用 SQLAlchemy 创建的数据库导入 Flask 应用程序?
- c# - 通常要求呼叫者通过队列进行通信?
- c# - 具有数组结构的 JSON
- java - 错误:不兼容的类型:org.opencv.core.Point 无法转换为 android.graphics.Point
- processing - 如何多次迭代同一个草图-(处理)
- python - Pandas - 读取文本文件
- node.js - 访问嵌套的 React App 路由时出现 NGINX 404 错误
- react-native - React Navigation v.5 选项卡栏图标导航到模态
- ios - 使用 FCM 仅向开发安装发送推送通知
- css - 在导航栏的中心对齐元素,除了一个(或多个)元素