根据nginx 文档,下面的服务器块应该适用于两者https://joycegroup.org和https://www.joycegroup.org
server {
listen 443 ssl;
ssl_certificate /etc/ssl/certs/joycegroup_org_chain.crt;
ssl_certificate_key /etc/ssl/private/joycegroup_org.key;
root /var/www/joycegroup_org/;
server_name joycegroup.org www.joycegroup.org;
location / {
index index.html index.htm index.html index.php;
}
}
它适用于https://www.joycegroup.org, 不是https://joycegroup.org。 我究竟做错了什么?
最终我也想将 http 重定向到 https,但我首先想解决这个问题。
我很抱歉问了这个问题。我已经绞尽脑汁思考了好几个小时了。
答案1
www.joycegroup.org其本身并不意味着 joycegroup.org(不带 www)是有效的 DNS 记录。
请注意,您无法为域的根设置 CNAME 记录(为什么不能在域名的顶点(又称根)使用 CNAME 记录?),因此您需要一条 A 记录。
您可以通过多种方式显示这是 DNS 解析问题,例如curl https://joycegroup.org
。如果显示curl: (6) Could not resolve host: joycegroup.com; Name or service not known
,则这是 DNS 问题。
您可以通过在两种情况下运行 nslookup 或 host 或 dig 并比较输出来进一步确认这是与两个记录之间的差异相关的 DNS 问题。
一些例子:
host
(Linux):
$ host <record with www>
<record with www> has address 192.168.1.10
$ host <record without www>
<no output is shown>
nslookup
(Linux):
$ nslookup <record without www>
Server: <dns server ip>
Address: <dns server ip>#53
*** Can't find <record without www>: No answer
$ nslookup <record with www>
Server: <dns server ip>
Address: <dns server ip>#53
Name: <record with www>
Address: 192.168.1.10
nslookup
(视窗):
C:\Users\myuser> nslookup <record without www>
Server: <dns server>
Address: <dns server ip>
Name: <record without www>
请注意,没有显示任何 IP 地址。它返回一些信息,因为每个区域都有自己的记录,尽管它不是 A 记录(与 IP 地址相关联),而是 SOA 记录。
另一方面,如果您查询实际存在的 A 记录,您将得到经典的答复:
C:\Users\myuser>nslookup <record with www>
Server: <dns server>
Address: <dns server ip>
Name: <record with www>
Address: 192.168.1.10
答案2
根据 的回答A. Darwin
,您没有为 设定 DNS 记录joycegroup.org
:
c-nan@mba-c-nan ~ % dig www.joycegroup.org A +short
50.116.60.151
c-nan@mba-c-nan ~ % dig joycegroup.org A +short
c-nan@mba-c-nan ~ %
您应该添加以下 DNS A 记录
joycegroup.org IN A 50.116.60.151
在您的 DNS 提供商处:
c-nan@mba-c-nan ~ % dig joycegroup.org NS +short
dns1.registrar-servers.com.
dns2.registrar-servers.com.
c-nan@mba-c-nan ~ %
如果您想将所有 http 流量重定向到 https,您可以进行以下配置:
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
对于特定域,您可以使用:
server {
listen 80;
server_name www.joycegroup.com joycegroup.com;
return 301 https://joycegroup.com$request_uri;
}