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

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

作者: weaponxx | 来源:发表于2023-03-17 20:35 被阅读0次

    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否则会连接失败.

    相关文章

      网友评论

          本文标题:Nginx 做反向代理后如何正确获取外网IP

          本文链接:https://www.haomeiwen.com/subject/bugjrdtx.html