Как настроить обратный прокси для хоста Apache и Jetty с не корневым контекстным путем - PullRequest
0 голосов
/ 10 ноября 2019

Мне нужно настроить Apache 2.4 в качестве обратного прокси-сервера для внутреннего сервера Jetty 9, чтобы у меня был общедоступный сайт: https://jenkins.mysite.com, и он будет перенаправлен на внутренний http://localhost:8080/jenkins

Я пробовал разные настройки, а также:

<IfModule mod_ssl.c>
<VirtualHost *:443>


    ServerName jenkins.mysite.com
    DocumentRoot /home/jenkins/web

    Alias / /home/jenkins/web/
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>


    SSLEngine on
    SSLProxyEngine On

    BrowserMatch    "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

    <Directory "/home/jenkins/web/WEB-INF/">
             AllowOverride None
             Require all denied
    </Directory>

    ProxyRequests Off
    ProxyVia Off

    #Tried On and Off. With ProxyPassReverse and without
    ProxyPreserveHost Off

    #Tried all below settings with no luck
    #AllowEncodedSlashes NoDecode
    #RequestHeader set X-Forwarded-Proto "https" env=HTTPS
    #RequestHeader set X-Forwarded-Port 443

    <Proxy *>
      AddDefaultCharset off
          AllowOverride None
          Require all granted
    </Proxy>

    #Tried below instead of nocanon in ProxyPass
    #RewriteEngine on
    #RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
    #RewriteRule .* http://127.0.0.1:8080/jenkins/%{REQUEST_URI} [NE,P,QSA]

    ProxyPass / http://localhost:8080/jenkins nocanon 
    ProxyPassReverse / http://localhost:8080/jenkins

    #That was useful to remove contextPath from Cookie path
    #ProxyPassReverseCookiePath  "/jenkins"  "/"

    <Location />
       Options FollowSymLinks
       AddDefaultCharset off
       AllowOverride None
       Require all granted
     </Location>

    SSLCertificateFile /etc/letsencrypt/live/jenkins.mysite.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/jenkins.mysite.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Для Jetty я пытался использовать http-forwarded модуль. Не помогло ни с этим, ни без него.

Лучшее, что я мог добиться, чтобы прямые ссылки работали. Но все URL-адреса и перенаправления, на которые есть ссылка (например, имя входа), имели дополнительный внутренний contextPath: / jenkins / *

Есть ли способ настроить его так, как я хочу? В частности, чтобы избежать жалоб со стороны Jenkins на то, что обратный прокси-сервер нарушен?

Я могу заставить его работать, если я использую виртуальный хост для пристального контекста с contextPath = /. Но это требует изменения / etc / hosts, которого я пытаюсь избежать.

Конечно, mysite.com - это гипотетическое имя. Я использовал реальное доменное имя. Спасибо.

...