我需要使用Nginx作为SSL代理,它根据子域将流量转发到不同的后端。
我似乎到处都认为应该定义多个"server {“部分,但这对SSL不起作用。这样做,我将始终在第一个虚拟主机中处理SSL,因为在处理https流量之前,服务器名称是未知的。
场景:
需要按如下方式访问的
https://one.mysite.com/ -> http://localhost:8080 https://two.mysite.com/ ->
Nginx说"if“是邪恶的:http://wiki.nginx.org/IfIsEvil,但我还能做什么呢?
我已经尝试过了,但它不起作用,我得到了一个500错误,但在错误日志中什么也没有。
server {
listen 443;
server_name *.mysite.com;
ssl on;
ssl_certificate ssl/mysite.com.crt;
ssl_certificate_key ssl/mysite.com.key;
location / {
if ($server_name ~ "one.mysite.com") {
proxy_pass http://localhost:8080;
}
if ($server_name ~ "two.mysite.com") {
proxy_pass http://localhost:8090;
}
}
有没有人用Nginx做到了这一点?任何帮助/替代方案,链接,将非常感谢。
发布于 2013-08-20 22:44:10
我找到了解决方案,基本上就是在"server“块之外定义SSL选项和SSL证书:
ssl_certificate ssl/mysite.com.crt;
ssl_certificate_key ssl/mysite.com.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+EXP;
ssl_prefer_server_ciphers on;
server {
listen 80;
server_name *.mysite.com;
rewrite ^ https://$host$request_uri? permanent;
}
server {
listen 443 ssl;
server_name one.mysite.com;
ssl on;
location / {
proxy_pass http://localhost:8080;
}
}
server {
listen 443 ssl;
server_name two.mysite.com;
ssl on;
location / {
proxy_pass http://localhost:8090;
}
}
关键点:
发布于 2013-08-21 00:13:25
简短的答案是使用Server Name Indication。默认情况下,这应该可以在常见的浏览器和cURL中工作。
发布于 2013-08-20 02:24:33
根据http://www.informit.com/articles/article.aspx?p=1994795的说法,您确实应该有两个“服务器”部分,具有两个不同的服务器名称。在每一个文件中,都应该包含ssl_*指令。
https://stackoverflow.com/questions/18319721
复制相似问题