Spring boot - безопасность Spring за обратным прокси-сервером Apache - PullRequest
0 голосов
/ 19 января 2019

У меня есть 3 приложения для весенней загрузки:

  • фронт (угловой, завернутый в springboot) на: 8084
  • ресурс (пружинная загрузка) на: 8082
  • аутентификация (spring-boot spring security) на: 8081.

Здесь мой Vhost:

<VirtualHost *:80>
    ServerName www.website.com
    Redirect / https://www.website.com/
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =www.website.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLProxyEngine on

    ServerName www.website.com

    ProxyPass /auth https://127.0.0.1:8081
    ProxyPassReverse /auth https://127.0.0.1:8081

    ProxyPass /api https://127.0.0.1:8082
    ProxyPassReverse /api https://127.0.0.1:8082

    ProxyPass / https://127.0.0.1:8084/
    ProxyPassReverse / https://127.0.0.1:8084/


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

Это работает, и когда вызывается конечная точка https://www.website.com/auth/oauth/authorize, яЯ перенаправлен на https://www.website.com/auth/login и вижу форму входа в систему.

Проблема в том, что ресурсы, такие как jquery или css, не загружены, потому что он пытается связаться с ними через URL https://www.website.com/resources/jquery.min.js (хотядолжно быть https://www.website.com/auth/resources/jquery.min.js).

Я попробовал решение здесь: Spring-boot со встроенным Tomcat за прокси-сервером Apache Итак, у меня есть Vhost:

<VirtualHost *:443>
    SSLEngine on
    SSLProxyEngine on
    ProxyPreserveHost On

    ServerName www.website.com

    ProxyPass /auth https://127.0.0.1:8081
    ProxyPassReverse /auth https://127.0.0.1:8081
    RequestHeader set X-Forwarded-Proto https
    RequestHeader set X-Forwarded-Port 443

    ProxyPass /api https://127.0.0.1:8082
    ProxyPassReverse /api https://127.0.0.1:8082

    ProxyPass / https://127.0.0.1:8084/
    ProxyPassReverse / https://127.0.0.1:8084/

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

И я добавил

server.use-forward-headers=true

в application.properties.

Но тогда, когда вызывается https://www.website.com/auth/oauth/authorize, я перенаправляюсь на https://www.website.com/login -> / отсутствует часть authтак что я получаю 404.

Не уверен, что я должен установить и где это работает?

1 Ответ

0 голосов
/ 20 января 2019

На самом деле я нашел решение, если оно может кому-то помочь:

Vhost должен быть:

ProxyPreserveHost On
...
ProxyPass /auth https://127.0.0.1:8081/auth
ProxyPassReverse /auth https://127.0.0.1:8081/auth
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
...

А в application.properties:

server.servlet.context-path=/auth
server.use-forward-headers=true
...