【已解决】nginx 通过stream模块转发后如何获取真实来源ip?

小W

问题描述

因为服务端只开放了一个端口,由于服务器中服务需要同时支持http和https,所有通过nginx stream模块转发的。其实就是端口复用,一个端口同时支持http和https

但是wokerman获取到ip是127.0.0.1,如何获取到真实的ip呢

1943 1 1
1个回答

six

https://www.workerman.net/doc/webman/others/nginx-proxy.html
不就是手册这样配置么?

upstream webman {
    server 127.0.0.1:8787;
    keepalive 10240;
}

server {
  server_name 站点域名;
  listen 80;
  access_log off;
  root /your/webman/public;

  location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      if (!-f $request_filename){
          proxy_pass http://webman;
      }
  }
}

proxy_set_header X-Real-IP $remote_addr; 是重点,然后$request->getRealIp() 就获取到了

  • 小W 2023-03-01

    因为服务器只开放了一个端口,所以http和https都使用的8008,stream监听在8008,然后转发到http服务下,http服务就是你发的这个配置

  • 小W 2023-03-01

    stream模块转发,端口复用导致的

  • 小W 2023-03-01

    已解决感谢

  • six 2023-03-01

    怎么解决的?

  • 小W 2023-03-01

    在stream转发后,在http模块下设置X-Real-IP 为转发后的ip

  • hxq 2023-12-03

    具体是怎么解决的呢,我也是这一个问题,端口要复用,在stream中写的server转发到upstream的map里面。

年代过于久远,无法发表回答
🔝