Spring Boot Apache SSLリバースプロキシ


1

Amazon Linuxサーバーで実行されるSpring Bootアプリケーションがあります。このアプリケーションのプロキシサーバーとしてApache HTTPサーバーを使用します。最近、Let's Encrypt SSL証明書をインストールし、そのためにApacheに仮想ホストエントリを追加しました。ただし、Spring Bootで正しく動作させることはできません。ただし、SSLバージョンは正常に動作していないようです。

私が観察したのは、ユーザーがhttpsバージョンを呼び出したときにリクエストがSpring Bootアプリケーションに届くが、ユーザーがApacheからHTTP 404エラーを受け取るということです。たとえば、これは正常に動作します:http : //example.com/oauth/tokenしかし、これは動作せず、404を返しますhttps : //example.com/oauth/token

以下に設定ファイルを投稿しましたが、何が欠けていますか?

vhosts.conf

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin support@example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog /var/www/example.com/logs/error.log
    CustomLog /var/www/example.com/logs/access.log combined

    RewriteEngine On
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
    RewriteRule ^ - [L]
    RewriteRule ^(/api/v1) - [L]
    RewriteRule ^(/oauth/token) - [L]

    RewriteRule ^ /index.html [L]

    SSLEngine on
    SSLCertificateFile /var/www/example.com/cert/cert.pem
    SSLCertificateKeyFile /var/www/example.com/cert/privkey.pem

    ProxyPreserveHost on
    RequestHeader set X-Forwarded-Proto https
    RequestHeader set X-Forwarded-Port 443
    ProxyPass /api/v1 http://127.0.0.1:8080/api/v1
    ProxyPassReverse /api/v1 http://127.0.0.1:8080/api/v1
    ProxyPass /oauth/token http://127.0.0.1:8080/oauth/token
    ProxyPassReverse /oauth/token http://127.0.0.1:8080/oauth/token
</VirtualHost>

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin support@example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog /var/www/example.com/logs/error.log
    CustomLog /var/www/example.com/logs/access.log combined

    RewriteEngine On
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
    RewriteRule ^ - [L]
    RewriteRule ^(/api/v1) - [L]
    RewriteRule ^(/oauth/token) - [L]

    RewriteRule ^ /index.html [L]

    ProxyPreserveHost on
    ProxyPass /api/v1 http://127.0.0.1:8080/api/v1
    ProxyPassReverse /api/v1 http://127.0.0.1:8080/api/v1
    ProxyPass /oauth/token http://127.0.0.1:8080/oauth/token
    ProxyPassReverse /oauth/token http://127.0.0.1:8080/oauth/token
</VirtualHost>

application.properties

server.context-path=/api/v1
server.address=127.0.0.1
server.port=8080
server.use-forward-headers=true
server.tomcat.remote_ip_header=x-forwarded-for
server.tomcat.protocol_header=x-forwarded-proto

「apachectl -S」の出力を質問に追加します。出力がここに表示されている仮想ホストと一致することを確認してください。
ezra-s

回答:


0

「protocol _ header」ではなく、「server.tomcat.protocol-header」であるべきだと思います

例: server.tomcat.protocol-header-https-value=https server.tomcat.protocol-header=X-Forwarded-Proto server.tomcat.port-header=X-Forwarded-Port

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.