我从 SSLMate 购买了 SSL 证书,当我访问时,它在我的 Nginx 服务器上运行良好http://example.com,但当我访问 http:// www.example.com 时却不行
我认为问题与我输入 CNAME 的方式有关。这是一张图片:https://i.stack.imgur.com/fTkaZ.png
我在 SSLMate 上购买的证书表明 www 证书适用于 www 和非 www,所以我认为我填写的 CNAME 错误。我正在尝试http://www。 和https://www. 301 重定向至 https:// example.com
这是我的 Nginx 配置:
server {
server_name examplesite.com;
#rewrite https://examplesite.com$request_uri? permanent;
return 301 https://examplesite.com$request_uri;
}
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/sslmate/www.examplesite.com.chained.crt;
ssl_certificate_key /etc/sslmate/www.examplesite.com.key;
server_name examplesite.com;
root /home/garrett/domains/examplesite.com/public_html;
access_log /home/garrett/domains/examplesite.com/logs/access.log;
error_log /home/garrett/domains/examplesite.com/logs/error.log;
index index.php index.html index.htm;
error_page 404 /404.php;
error_page 403 /404.php;
location / {
#try_files $uri $uri/ /index.php;
}
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires max;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm-garrett.sock;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
在第一个块中将 www.examplesite.com 添加到 server_name 会破坏所有内容。
答案1
一些建议:
- 使用 openssl 命令行工具检查证书的内容。确认它确实支持两个域。如果是这样,它可能会使用 SNI 来执行此操作。检查您的 SNI 支持。
- 首先将问题分解成更小的问题。创建 4 个
server {}
块:一个用于“http://www“,一个用于”https://www“,一个为一个”https://无www“ 还有一个是 “http://无www“。然后每个配置将尽可能小而简单。让它们一个接一个地工作。完成后,您可以寻找模式,也许可以返回并将它们组合起来。
这是我使用的替代方法,它也简化了 Nginx 配置:支持和重定向“www”子域名很重要,支持 SSL 也很重要,但不是支持某人不太可能的组合很重要两个都手动输入“www”子域名和他们也手动输入了“https://”。所以我不支持第四种变体。在十几个生产站点中,这不是一个问题。因此,这消除了对第二个 SSL 证书的需求,以及 SNI 支持可能出现的问题。
接下来,我在本地 Nginx 配置中不支持“www”。相反,我使用 DNS 提供商的“HTTP 重定向”功能。我使用 DNS Made Easy,但这是多个 DNS 提供商都支持的流行功能。通过向他们输入“www”子域的“HTTP 重定向”记录,DNS 会解析为他们的网络服务器,他们为我处理“*www”子域的配置和重定向。
我要处理的只是将主域的非 SSL 重定向到 SSL 的简单情况。