Apache, Tomcat и SSL: ProxyPass и ProxyPassReverse - PullRequest
0 голосов
/ 01 июля 2018

У меня проблемы с настройкой Apache, Tomcat и SSL, это сценарий:

У меня есть веб-сервер Apache, который работает и работает нормально (но я могу получить к нему доступ, просто набрав:

https://example.com

Кроме того, на этом хосте у меня есть Tomcat, работающий и работающий нормально в порту 8080 (HTTP); Я создал мини-веб-приложение, файлы которого находятся в «тестовой» директории, я могу получить доступ к печатанию:

http://example.com:8080/test

(я знаю, что Apache работает в 80 портах, а Tomcat в 8080)

Что я хочу сделать, так это то, что через Apache пользователь может получить доступ к «test» (работающему на Tomcat) с использованием HTTPS, я имею в виду:

https://example.com/test

Но когда я получаю доступ к этой ссылке, это выглядит так:

Page not found

Когда я получаю доступ по протоколу HTTP http://example/test работает, но мне нужно, чтобы был HTTPS.

Я также создаю файл конфигурации в /etc/httpd/conf.d/vhost.conf, это содержимое:

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/html
    Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

    SSLProxyEngine on
    ProxyPass /test http://xxx.xxx.xxx.xxx:8080/test
    ProxyPassReverse /test http://xxx.xxx.xxx.xxx:8080/test
</VirtualHost>

xxx.xxx.xxx.xxx - это IP-адрес веб-сайта.

Когда я захожу на сайт https://example.com/ (с HTTPS), у меня возникает эта проблема (я использую веб-приложение на сайте):

Security Overview

Я использую сертификат Let's Encrypt (на фото выше).

Я работаю с Apache / 2.4.33 (Amazon) и Tomcat 8.5.29

Кто-нибудь знает, почему или как это решить? Заранее спасибо, ребята.

Файлы журнала:

access_log

yyy.yyy.yyy.yyy - - [01/Jul/2018:06:42:29 +0000] "GET /test HTTP/1.1" 301 245 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
::1 - - [01/Jul/2018:06:42:51 +0000] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.33 (Amazon) OpenSSL/1.0.2k-fips PHP/7.0.30 (internal dummy connection)"

error_log - пусто

ssl_access_log

yyy.yyy.yyy.yyy - - [01/Jul/2018:06:42:29 +0000] "GET /test HTTP/1.1" 404 206
yyy.yyy.yyy.yyy - - [01/Jul/2018:06:42:29 +0000] "GET /test HTTP/1.1" 404 206
yyy.yyy.yyy.yyy - - [01/Jul/2018:06:42:49 +0000] "-" 408 -
yyy.yyy.yyy.yyy - - [01/Jul/2018:06:42:49 +0000] "-" 408 -
yyy.yyy.yyy.yyy - - [01/Jul/2018:06:42:49 +0000] "-" 408 -
yyy.yyy.yyy.yyy - - [01/Jul/2018:06:42:49 +0000] "-" 408 -

ssl_request_log

[01/Jul/2018:06:42:29 +0000] yyy.yyy.yyy.yyy TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 "GET /test HTTP/1.1" 206
[01/Jul/2018:06:42:29 +0000] yyy.yyy.yyy.yyy TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 "GET /test HTTP/1.1" 206
[01/Jul/2018:06:42:49 +0000] yyy.yyy.yyy.yyy TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 "-" -
[01/Jul/2018:06:42:49 +0000] yyy.yyy.yyy.yyy TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 "-" -
[01/Jul/2018:06:42:49 +0000] yyy.yyy.yyy.yyy TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 "-" -
[01/Jul/2018:06:42:49 +0000] yyy.yyy.yyy.yyy TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 "-" -

ssl_error_log - пусто

гггггггггггг = IP моей машины

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Файл результатов /etc/httpd/conf.d/vhost.conf:

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/html
    Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

    SSLProxyEngine on
    ProxyPass /test http://xxx.xxx.xxx.xxx:8080/test
    ProxyPassReverse /test http://xxx.xxx.xxx.xxx:8080/test
</VirtualHost>
0 голосов
/ 01 июля 2018

Есть 4 проблемы с кодом

Первый: Проблема с портом . HTTPS работает на port 443 и http на port 80

 <VirtualHost *:443> 
    ServerName www.example.com
    DocumentRoot /var/www/html 
    ###Remove this redirection line to move it in separate virtual host listening to port 80
    Redirect permanent / https://example.com/
    SSLProxyEngine on
    ProxyPass /test http://xxx.xxx.xxx.xxx:8080/test
    ProxyPassReverse /test http://xxx.xxx.xxx.xxx:8080/test 
 </VirtualHost>

Второе: Отсутствует SSLProxyEngine on, поэтому проход прокси и обратный проход прокси работает для соединения https.

Третье: Удалите правило перенаправления https с этого виртуального хоста на новый. Вам нужно создать новый виртуальный хост для порта 80 , в котором должно быть перенаправление правило, в котором все http-соединения перенаправляются на https навсегда.

Redirect permanent / https://example.com/

Четвертый: Также добавьте ниже для всех виртуальных хостов

ServerName example.com 
ServerAlias www.example.com
...