我注意到我的一台服务器上出现了奇怪的行为,我无法理解它是如何工作的,最重要的是,这种配置是否会进行重定向,因为我不确定我最终是如何进入 https 的。
我有两个子域名:
test.domain.com
和
test2.domain.com
在测试配置中,我看到 server_name 的值错误:
test server config
server {
root /var/www/html/test/public;
index index.html index.php index.nginx-debian.html;
server_name test test.domain.com;
location / {
try_files $uri $uri/ /index.php?$query_string; # =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
location ~ /\.ht {
deny all;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/test.domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/test.domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = test.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name testings test.domain.com;
return 404; # managed by Certbot
}
现在test2具有相同的server_name逻辑
server_name: test2 test2.domain.com
**and no ssl enabled**
server {
root /var/www/html/test2/public;
index index.html index.php index.nginx-debian.html;
server_name test2 test2.domain.com;
location / {
try_files $uri $uri/ /index.php?$query_string; # =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
location ~ /\.ht {
deny all;
}
# listen [::]:443 ssl ipv6only=on; # managed by Certbot
# listen 443 ssl; # managed by Certbot
# ssl_certificate /etc/letsencrypt/live/test.domain.com/fullchain.pem; # managed by Certbot
# ssl_certificate_key /etc/letsencrypt/live/test.domain.com/privkey.pem; # managed by Certbot
# include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
# if ($host = test2.domain.com) {
# return 301 https://$host$request_uri;
# } # managed by Certbot
listen 80;
listen [::]:80;
server_name test2 test2.domain.com;
# return 404; # managed by Certbot
}
有警告说 test2 已经在使用中但仍能工作。
现在奇怪的是,当我去https://test2.domain.com它确实有效,
但是给我带来的是 test 的根而不是 test2;
而有意义的是,如果我打开http://test.domain.com
我扩展了test2的证书
certbot certonly --nginx -d "test.domain.com,test2.domain.com"
因此同一个证书应该对两者都适用。
我的问题是,当我打开时,如何指向测试的根https://test2.domain.com?
答案1
没有什么奇怪的 - 你得到的就是你配置的。没有什么奇怪或神奇的。这只是 tcp 套接字使用你的配置监听的内容。即使不阅读 nginx 文档,这也是显而易见的。
您没有说是在一个主机上配置了两个服务器还是在两个不同的主机上配置了两个服务器,以及您的 IP 地址test.domain.com
test2.domain.com
被解析为哪些 - 这对于您的问题来说非常重要,而且并不明显。
第一个猜测是 - 你谈论的是两个具有不同 IP 的 nginx 服务器,而你只是在 DNS 配置中混淆了服务器的 IP 地址
https://test2.domain.com... 带给我的是 test 的根源,而不是 test2
test2.domain.com
解析服务器的 IProot /var/www/html/test/public
如果我打开,我会被重定向到 test2 的根目录http://test.domain.com
test.domain.com
解析服务器的 IProot /var/www/html/test2/public
第二个猜测-你谈论一个具有两个站点配置的 nginx 服务器,并且test.domain.com
解析test2.domain.com
为同一主机的 IP。
有
一个 ngninx 的“服务器块”监听 IP:443 和 IP:80 (
server_name test.domain.com
)以及另一个 ngninx 的“服务器块”监听 IP:80 (server_name
test2.domain.com
)。
https://test2.domain.com... 带给我的是 test 的根源,而不是 test2
当你打开https://测试2.domain.com 它在您的客户端上解析为IP地址:443因为你想要HTTPS. Nginx 向您展示测试内容因为在端口 443 上只配置了test.domain.com
。root /var/www/html/test/public
如果我打开,我会被重定向到 test2 的根目录http://test.domain.com
当你打开http://测试.domain.com 它在您的客户端上解析为IP:80因为你想要HTTP。Nginx 有 2server_name
个 80 端口:test.domain.com
和test2.domain.com
应该选择test.domain.com
并返回来自的内容,/var/www/html/test/public
但您声明它返回test2.domain.com
的内容。如果指向带有的服务器的 IP ,
则有可能- 请参阅第一个猜测。test.domain.com
root /var/www/html/test2/public