Переадресация прокси-сервера nginx и имя_потока_сетей - PullRequest
0 голосов
/ 05 сентября 2018

Как заставить stream_socket_get_name вернуть реальный IP-адрес от удаленного клиента?

$ip = stream_socket_get_name($socket, true);

Выше указано что-то вроде 127.0.0.1:39872

Nginx

server {
    listen 8443 ssl;
    server_name  websocket.example.com;

    ssl_certificate  /var/ini/ssl/public.crt;
    ssl_certificate_key  /var/ini/ssl/private.key;

    location / {
        proxy_redirect  off;

        proxy_pass  http://127.0.0.1:9000/;
        proxy_http_version  1.1;
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection "upgrade";
        proxy_read_timeout  300;

        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-Proto https;
        proxy_set_header  X-Forwarded-For $remote_addr;
        proxy_set_header  X-Forwarded-Host $remote_addr;
    }
}

1 Ответ

0 голосов
/ 13 сентября 2018

Проблема в том, что stream_socket_get_name() работает с дескриптором файла. В этом случае дескриптор файла всегда подключается к вашему прокси, поэтому вы можете получить только информацию прокси. Но вы видите эти proxy_set_header директивы? Вот как могут передаваться удаленный IP-адрес и удаленный порт. В PHP вы должны проверить значения заголовков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...