toyst 发表于 2019-3-21 23:40:25

请教一个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:42:04

本帖最后由 yaren 于 2019-3-21 23:43 编辑

#这样配置可以通过x-forwarded-for获取用户真实ip
proxy_set_header X-Real-IP $remote_addr;


你不是配了吗

toyst 发表于 2019-3-21 23:48:03


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」

ssehzt 发表于 2019-3-21 23:42:00


toyst 发表于 2019-3-21 23:48

真实IP服务端能获取,我想要服务端判断客户端是访问的「https://192.168.2.5:5001」,而不是通过nginx代 ...
不能,
最后的服务端是看到的客户端ip是根据与自己建立 tcp 连接的 ip 确定的,
除非他自己设定读取 http header 的某一字段为客户端ip,

爱纯粹 发表于 2019-3-21 23:57:47

本帖最后由 爱纯粹 于 2019-3-22 00:07 编辑

https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/
里面的 IP Transparency 就是你要的功能,但是只有收费版有。
所以还是老实改后端用HTTP头传客户端IP吧
页: [1]
查看完整版本: 请教一个nginx反代配置问题