请教一个nginx反代配置问题
先贴个我的配置:```
[*]server
[*]{
[*] listen 8 ssl http2;
[*] server_name domain.com;
[*] ssl_certificate /etc/default/fullchain.cer;
[*] ssl_certificate_key /etc/default/domain.com.key;
[*]
[*]
[*] error_page497 https://$host:8$request_uri;
[*] location / {
[*] proxy_redirect off;
[*] proxy_set_header Host $http_host;
[*] proxy_set_header X-Real-IP $remote_addr;
[*] proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
[*] proxy_set_header X-Scheme $scheme;
[*] proxy_pass https://192.168.2.5:5001;
[*] }
[*]}复制代码
```
IP 和端口的情况:
客户端( 192.168.2.2 )→Nginx ( domain.com:8 )→服务器后端( https://192.168.2.5:5001 )
我想实现这样的配置,通俗来说就是当「客户端」输入:「 https://domain.com:8 」访问的时候,服务器后端接受到的信息是:「客户端」的 IP 是「 192.168.2.2 」是通过访问「 https://192.168.2.5:5001 」来访问服务器后端的,也就是说当 Nginx 完全不存在一样,这样的话应该怎么样配置呢?
谢谢! 本帖最后由 yaren 于 2019-3-21 23:43 编辑
#这样配置可以通过x-forwarded-for获取用户真实ip
proxy_set_header X-Real-IP $remote_addr;
你不是配了吗
yaren 发表于 2019-3-21 23:42
#这样配置可以通过x-forwarded-for获取用户真实ip
proxy_set_header X-Real-IP $remote_addr;
真实IP服务端能获取,我想要服务端判断客户端是访问的「https://192.168.2.5:5001」,而不是通过nginx代理访问的「https://domain.com:8」
toyst 发表于 2019-3-21 23:48
真实IP服务端能获取,我想要服务端判断客户端是访问的「https://192.168.2.5:5001」,而不是通过nginx代 ...
不能,
最后的服务端是看到的客户端ip是根据与自己建立 tcp 连接的 ip 确定的,
除非他自己设定读取 http header 的某一字段为客户端ip, 本帖最后由 爱纯粹 于 2019-3-22 00:07 编辑
https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/
里面的 IP Transparency 就是你要的功能,但是只有收费版有。
所以还是老实改后端用HTTP头传客户端IP吧
页:
[1]