我正在使用nginx作为我的公共EC2实例的反向代理。我有:
我希望将所有流量通过HTTPS传输到公共域。我尝试通过创建一个配置为路由到我的应用程序的“主”服务器块来实现此目的,使用两个辅助服务器块来捕获所有其他流量并重定向到https://public.domain.com。这就是我的配置:
# "Primary" block
server {
listen 443 ssl;
server_name public.domain.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
# Other config; SSL config
}
# Catch-all redirects
server {
listen 80;
return 301 https://public.domain.com$request_uri;
}
server {
listen 443;
return 301 https://public.domain.com$request_uri;
}
在测试中,我得到以下结果:
为什么nginx不会将我的HTTPS流量重定向到我的公共域?是否在网址匹配过程中使用了server_name
?
答案 0 :(得分:1)
您没有在端口443上设置默认服务器,因此nginx采用第一个定义的主机,即server_name public.domain.com;
使用listen 443 ssl default_server
,您还需要一个通配符证书才能使您的重定向服务器正常工作(自签名,客户端无论如何都会显示警告,如果主机不匹配)
请参阅https://serverfault.com/questions/578648/properly-setting-up-a-default-nginx-server-for-https