我有谷歌search,看着各种SSL样本configuration,似乎我已经把事情设置正确,但有两个问题:
我已经尝试将主机头设置为$主机,而不是$ http_host,并试图设置proxy_redirect将URL设置为https,但都没有任何效果。
我的SSLconfiguration如下。 有人可以告诉我我做错了什么吗?
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; } }
已经有六个多月的时间了,但是我会给它一个机会。 我想你是缺lessX-Forwarded-Proto头。 nginx上相关的虚拟主机configuration:
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"/>
这样,你可能会得到每个应用程序的几个端口,但它工作得很好。
至于troyengel的,为什么我会打扰“Nginx + Tomcat”? 那么,Nginx的速度更快,并采取内存和CPU明智的。 那样的话,就有更多的资源可以浪费在Tomcat上。 :/
最后,我不会调用Apache-AJP13-Tomcat进行正确的集成,而不再是这样。 一旦启用了Tomcat APR Listener:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
和sendfile(与tcnative库),整个事情只是苍蝇。 然后你直接从nginx发送静态内容,并且你仍然有足够的能力通过代理到php-fpm来运行每个人最喜欢的php站点。
那么,这只是从我的经验,虽然ymmv。
我的工作有类似的configuration, nginx终止SSL并将原始HTTP传回给tomcat。 我们的应用程序使用多个域名。
我们发现将这些行添加到server.xml就足够了:
scheme="https" proxyPort="443"
proxyName不是必需的,也没有任何其他更改,不论是对于tomcat还是对nginx。