Nginx 做反向代理后如何正确获取外网IP

Nginx 是当前最流行的软件方向代理,当使用Nginx做HTTP的反向代理时我们可以通过在Nginx上做以下配置,让后台应用能获取到外网IP.

http {
    server {
        listen       8088;
        server_name  localhost;  
    location / {
        # 增加以下配置
         proxy_set_header X-Real-IP    $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
}

此配置相当于在HTTP的包头,增加了外网IP字段,这样后台就能直接通过这个字段获取到外网IP.

如果使用Nginx做TCP的反向代理时,如果需要获取外网IP需要配置 proxy_protocol on. 但是这个配置需要服务端配合才能生效.原因如下.

stream {
    server {
        listen 9999;
        proxy_pass 192.168.1.1:50000;
        proxy_protocol on;
    }
}

proxy_protocol 其实是改变了tcp连接的创建过程,正常tcp握手完成后,tcp客户端会额外传一个报文给服务端,这个报文里包含了原始IP地址.服务端会更新连接信息,将这个原始IP更新到连接信息里.这样服务端就能获取到真实的IP了.
服务端也需要进行额外的配置,以nginx的配置为例,需要在listen上开启proxy_procol.

stream {
    server {
        listen 50000 proxy_protocol ;
    }
}

如果是其它tcp协议也是一样的操作,手工开启proxy_protocol. 手工开启proxy_protocol 后会有一个问题,必须客户端也是配套的proxy_protocol否则会连接失败.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容