Nginx重定向到错误的站点;格式不正确的server_name指令

时间:2016-11-30 06:00:37

标签: nginx subdomain

问题

当您在浏览器的地址栏中输入example.com 没有进入方案时,即http://https://,Nginx会将用户重定向到{{ 1}}而不是预期的https://api.example.com。我很确定我的Nginx配置有问题,但我不确定是什么。

详细信息

我在同一台服务器上托管两个网站,使用相同的IP。 DNS区域文件中的相关位看起来像(域名和IP匿名):

https://example.com

我安装了两个SSL证书(由letsencrypt提供),每个站点一个,并且两个站点都配置为重定向到HTTPS。我有两个vhost配置文件,每个站点一个,如下所示:

  • example.com. 1800 IN A xxx.xxx.xxx.xxx www.example.com. 1800 IN CNAME example.com. api.example.com. 1800 IN CNAME example.com.
  • /etc/nginx/sites-available/api

两者都符号链接到/etc/nginx/sites-available/default。两个配置文件中的相关位如下:

/etc/nginx/sites-enabled/

# /etc/nginx/sites-available/api
server {
    listen 80;
    listen [::]:80 ipv6only=on;
    server_name api.example.com;
    return 301 https://api.example.com$request_uri;
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    include snippets/api-ssl-params.conf; # ssl config info
    server_name api.example.com;

    # ... the rest of the site config ...
}

我不明白为什么只是将# /etc/nginx/sites-available/default server { listen 80; listen [::]:80; server_name www.example.com; return 301 https://example.com$request_uri; } server { listen 443 ssl http2 default_server; listen [::]:443 default_server ipv6only=on; include snippets/ssl-params.conf; # ssl config info server_name example.com; # ... the rest of the site config ... } 输入地址栏会重定向到example.com,因为:

  1. 只是普通https://api.example.com没有出现在任何地方的example.com配置文件
  2. api不应与example.com指令server_name
  3. 相匹配
  4. api.example.com中的服务器块被标记为default所以当输入含糊不清的域名时,不应该优先考虑?
  5. 感谢!!!

1 个答案:

答案 0 :(得分:0)

咄。在编写问题的过程中弄清楚了。问题是,只有普通default_server没有出现在监听端口80的任何站点的example.com指令中。由于这会导致歧义,nginx会按字母顺序选择第一个站点。

我更新了server_name网站的配置文件,如下所示:

default

宇宙中的一切都是正确的。