Проблемы с настройкой сервера Apache для прокси-соединения SSL
Я запускаю приложение на Tomcat7 с Apache Portable Runtime, я купил сертификат SSL и правильно его настроил - когда я пытаюсь подключиться через комбинацию ip:port, он подключается нормально, но предупреждает, что сертификат выдан для доменного имени, не IP.
У VPS, на котором я работаю, нет SELinux (и есть проблема с установкой), так как AFAIK требуется, чтобы SSL был настроен в apache, поэтому я хочу просто перенаправить запросы в Tomcat, который делает это в конце.
Я настроил apache для прокси соединений, сначала с портом 80, который работает отлично:
NameVirtualHost www.mysite.com:80
<VirtualHost www.mysite.com:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName http://www.mysite.com
ServerAlias http://www.mysite.com
ProxyPass / http://localhost:8180/MYSITE/
ProxyPassReverse / http://localhost:8180/MYSITE/
ProxyPassReverseCookiePath /MYSITE/ /
</VirtualHost>
И затем с портом SSL, который по какой-то причине не хочет работать:
NameVirtualHost www.mysite.com:443
<VirtualHost www.mysite.com:443>
SSLProxyEngine On
ProxyPreserveHost On
ProxyRequests Off
ServerName https://www.mysite.com
ServerAlias https://www.mysite.com
ProxyPass / https://localhost:8443/MYSITE/
ProxyPassReverse / https://localhost:8443/MYSITE/
ProxyPassReverseCookiePath /MYSITE/ /
CacheDisable *
</VirtualHost>
РЕДАКТИРОВАТЬ: я добавил
RequestHeader set Front-End-Https "On"
Директива для VirtualHost www.mysite.com:443, согласно: http://www.gossamer-threads.com/lists/apache/users/396577
Вот коннектор Tomcat APR, настроенный в файле Tomcat server.xml:
<Connector port="8443" maxHttpHeaderSize="16500"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLCertificateFile="x509-cert-path"
SSLCertificateKeyFile="key-file-path"
/>
Не было ошибок / предупреждений, включающих виртуальные хосты и перезапускающих Apache. Когда я пытаюсь https, это то, что я вижу в FFox:
SSL received a record that exceeded the maximum permissible length.
(Error code: ssl_error_rx_record_too_long)
И в хром:
Error 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protocol error.
Apache error.log показывает это предупреждение:
[warn] [client 216.58.38.90] proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be www.mysite.com for uri /
Я потратил несколько дней, пытаясь настроить его, и был бы очень признателен, если бы кто-то объяснил, что происходит и как это исправить.
Большое спасибо. Виктор.
1 ответ
Вам не нужен 8443 HTTPS-разъем в Tomcat. Apache HTTPD должен разорвать соединение SSL и передать открытый текст в Tomcat через ProxyPass / http://localhost:8080/MYSITE/.
Вам просто нужен текстовый HTTP-коннектор с port=8080
, а также address=127.0.0.1
так что никакие посторонние не могут получить это.
Более того, у Tomcat нет никаких HTTP-коннекторов, просто AJP-коннектор, address=127.0.0.1
все еще, и используйте mod_proxy_ajp в Apache.