使用IP地址时不会触发nginx HTTPS重定向

时间:2016-06-27 17:39:44

标签: nginx amazon-ec2

我正在使用nginx作为我的公共EC2实例的反向代理。我有:

  • 一个漂亮,干净的公共领域
  • AWS生成的公共域(* .compute-1.amazonaws.com)
  • AWS生成的公共IP地址

我希望将所有流量通过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

1 个答案:

答案 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