当您在浏览器的地址栏中输入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
,因为:
https://api.example.com
没有出现在任何地方的example.com
配置文件api
不应与example.com
指令server_name
api.example.com
中的服务器块被标记为default
所以当输入含糊不清的域名时,不应该优先考虑?感谢!!!
答案 0 :(得分:0)
咄。在编写问题的过程中弄清楚了。问题是,只有普通default_server
没有出现在监听端口80的任何站点的example.com
指令中。由于这会导致歧义,nginx会按字母顺序选择第一个站点。 强>
我更新了server_name
网站的配置文件,如下所示:
default
宇宙中的一切都是正确的。