У меня есть приложение Spring Boot, которое работает на сервере Amazon Linux. Я использую HTTP-сервер Apache в качестве прокси-сервера для этого приложения. Недавно я установил SSL-сертификат Let's Encrypt и добавил для этого запись виртуального хоста в Apache. Однако я не могу заставить его правильно работать с Spring Boot. Однако версия SSL, похоже, не работает нормально.
Я заметил, что запросы поступают в приложение Spring Boot, когда пользователь вызывает его https-версию, но пользователь получает ошибку HTTP 404 от Apache. Например, это отлично работает: 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
server.tomcat.remote_ip_header=x-forwarded-for
server.tomcat.protocol_header=x-forwarded-proto
Ссылка на ссылку: https://docs.spring.io/spring-boot/docs/1.1.5.RELEASE/reference/html/howto-embedded-servlet-containers.html
Я считаю, что это должен быть протокол 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