Назад | Перейти на главную страницу

Обратный прокси-сервер OSX Server, сохранить IP-адрес

У меня возникают проблемы с получением прокси-сервера службы Apache OSX Server для сохранения IP-адреса клиента при пересылке трафика на написанный мной сервер на основе Go.

Поскольку у меня есть функция "Веб-сайты" сервера OSX выключено и хочу оставить это так, я последовал эти инструкции проксировать трафик с помощью прокси-сервера службы. Конфигурационный файл по адресу /Library/Server/Web/Config/Proxy/apache_serviceproxy_customsites_ext.conf содержит:

<VirtualHost *:443>
   ServerName my.host.com:443
   ProxyPreserveHost On
   SetEnv proxy-chain-auth on
   RequestHeader set X-Forwarded-Proto "https"
   RequestHeader set X-Forwarded-Port "443"
   RequestHeader unset Proxy early

    <IfModule mod_ssl.c>
       SSLEngine On
       SSLCertificateFile "/etc/letsencrypt/live/my.host.com/cert.pem"
       SSLCertificateKeyFile "/etc/letsencrypt/live/my.host.com/privkey.pem"
       SSLCertificateChainFile "/etc/letsencrypt/live/my.host.com/chain.pem"
       SSLCipherSuite "HIGH:MEDIUM:!MD5:!RC4:!3DES"
       SSLProtocol -all +TLSv1.2
       SSLProxyEngine On
       SSLProxyProtocol -all +TLSv1.2
       SSLProxyCheckPeerCN off
       SSLProxyCheckPeerName off
    </IfModule>

    <IfModule mod_secure_transport.c>
       MSTEngine On
       MSTIdentity ${MST_IDENTITY}
       MSTCipherSuite HIGH, MEDIUM
       MSTProtocolRange TLSv1.2 TLSv1.2
       MSTProxyEngine On
       MSTProxyProtocolRange SSLv3 TLSv1.2
    </IfModule>

   ProxyPass /sub/ http://localhost:8080/
   ProxyPassReverse /sub/ http://localhost:8080/

   RewriteEngine on
   RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
   RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
   RewriteRule .* ws://localhost:8080%{REQUEST_URI} [P]

</VirtualHost>

После перезапуска com.apple.serviceproxy.plist ЗапуститеDaemon с launchctl, это отлично работает! Трафик в https://my.host.com/sub/ перенаправляется на другую службу, прослушивающую :8080

Однако все запросы показывают IP-адрес клиента как ::1. Даже X-Forwarded-For заголовок содержит ::1, и когда я это сделаю tail -f /var/log/apache2/service_proxy_access.log все запросы регистрируются следующим образом:

my.host.com "my.host.com" ::1 - - [26/Mar/2018:10:13:34 -0700] "GET /sub/ HTTP/1.1" 200 8164 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"

Я не очень хорошо знаком с Apache или OSX Server. Есть ли какая-то конфигурация, которую мне нужно включить или исправить, чтобы получить настоящий IP-адрес клиента? Есть ли какой-то компонент сервера OSX, о котором я не думаю?