Я погуглил и посмотрел на различные образцы конфигураций SSL, и кажется, что все настроено правильно, но есть две проблемы:
Я попытался установить заголовок Host на $ host вместо $ http_host, и я попытался установить proxy_redirect для установки URL-адреса на https, но ни один из них не дал никакого эффекта.
Моя конфигурация SSL ниже. Кто-нибудь может сказать мне, что я сделал не так?
server {
listen 443;
server_name dev.mysite.com;
access_log /var/log/nginx/dev_mysite_access.log;
error_log /var/log/nginx/dev_mysite_error.log;
ssl on;
ssl_certificate /export/nginx/certs/mysite.com.crt;
ssl_certificate_key /export/nginx/certs/mysite.com.key;
location / {
# give site more time to respond
proxy_read_timeout 120;
# needed to forward user's IP address
proxy_set_header X-Real-IP $remote_addr;
# needed for HTTPS
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_max_temp_file_size 0;
proxy_pass http://localhost:8081;
}
}
Прошло больше шести месяцев, но я попробую. Я думаю, вам не хватает заголовка X-Forwarded-Proto. Соответствующая конфигурация виртуального хоста на nginx:
server jira.site.com;
...
location /jira {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080/jira;
}
В некоторых случаях, как, например, в JIRA выше, вам нужно сообщить Tomcat, что он находится за прокси:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443"
scheme="https"
proxyName="jira.site.com"
proxyPort="443"/>
Таким образом, вы можете получить несколько портов для каждого приложения, но это работает нормально.
Что касается троенгела, зачем мне "Nginx + Tomcat"? Ну, nginx намного быстрее и почти ничего не требует как памяти, так и процессора. Таким образом, можно потратить больше ресурсов, например, на Tomcat. : /
Наконец, я бы больше не называл Apache-AJP13-Tomcat правильной интеграцией. После включения Tomcat APR Listener:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
и sendfile (с родной библиотека), все дело просто летает. Затем вы просто отправляете статический контент прямо из nginx, и у вас все еще достаточно мощности для запуска всеми любимых сайтов php путем проксирования на php-fpm.
Ну, это только из моего опыта, мммммм.
У меня на работе похожая конфигурация; nginx завершает работу SSL и передает необработанный HTTP обратно в tomcat. Наше приложение использует несколько доменных имен.
Мы обнаружили, что достаточно добавить строки в server.xml
:
scheme="https"
proxyPort="443"
proxyName не требовалось, как и никаких других изменений ни в tomcat, ни в nginx.