多年来,我一直使用 SSL 在一个 IP 上运行两个域名。一个是 example.com,另一个是 other.com。example.com 有三个带有 SSL 证书的名称:example.com、www.example.com 和 dev.example.com。other.com 有 other.com 和 www.other.com。
首次启动 dev.example.com 时,我仅通过复制 example.com 的 nginx 配置,如下所示:
server {
listen 80;
server_name example.com www.example.com dev.example.com;
root /var/empty;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name dev.example.com;
root /home/dev;
index index.html;
charset utf-8;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Xss-Protection "1; mode=block" always;
ssl on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_prefer_server_ciphers on;
ssl_ciphers ...
...
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
root /home/example;
index index.html;
charset utf-8;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Xss-Protection "1; mode=block" always;
ssl on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_prefer_server_ciphers on;
ssl_ciphers ...
...
}
完成上述操作后,我现在可以访问 example.com 的所有三个变体。但是,无法访问 other.com,因为我得到了(释义):
SSL_协议_错误
和
此网站服务不安全
在 Chrome 中,而 Firefox 重定向到 Google(我的默认主页)。
other.com 的配置与 example.com 相同,除了 dev 子域之外。我没有为 dev.example.com 设置任何位置块。配置文件的其余部分仅包含 ssl 证书指针和位置块。
所以我有点困惑为什么 dev 子域名会关闭 other.com。
答案1
解决方案可能在于 nginx 如何处理默认服务器以及我如何为站点创建配置。执行curl -I http://example.com
显示了一些错误的重定向,这可能使 nginx 寻找的默认服务器不是我想要的。
我的解决方案是,实际上为服务器更好地拼写。我这样做了:
server {
listen 80;
server_name dev.example.com;
root /var/empty;
return 301 https://dev.example.com$request_uri;
}
server {
listen 80;
server_name example.com www.example.com;
root /var/empty;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name dev.example.com;
root /home/dev;
...
server {
listen 443 ssl http2;
server_name example.com www.example.com;
root /home/bc;
...
}