关于在Nginx中配置顶级域名与www域名之间跳转以及https和如何搭配CDN的综合解决方案
关于在Nginx中配置顶级域名与www域名之间跳转以及https和如何搭配CDN的综合解决方案
方案一 | 方案二(不推荐) | 方案三 | |
---|---|---|---|
使用场景 | 一般情况 | 顶级域名存在邮件服务 | 顶级域名存在邮件服务 |
相对复杂度 | 低 | 中 | 高 |
终点 | https://www.example.com | https://www.example.com | https://www.example.com |
隐藏源站IP | 是 | 是 | 是 |
相对可用性 | 高 | 低 | 高 |
缺点 | 无法在顶级域名存在邮件服务的情况下使用 | 无法直接访问https://example.com | 成本略高,配置麻烦 |
特殊要求 | 无 | 要求DNS服务商支持显性URL转发 | 需要一台代理服务器 |
方案一
源站配置(以Nginx为例)
关于www和naked域名的重新向以及https的解决方案(以Nginx为例) - 西叉的代码屋 (caoxuan.top)
CDN配置(以腾讯云为例)
基础配置
加速域名:www.example.com
源站类型:自有源
回源协议:协议跟随
源站地址:1.1.1.1(源站IP)
回源HOST:www.example.com
HTTPS配置
强制跳转
跳转配置:开
跳转类型:http->https
跳转方式:301跳转
携带头部:否
DNS配置(以阿里云为例)
记录类型 | 主机记录 | 解析线路 | 记录值 | TTL |
---|---|---|---|---|
CNAME | www | 默认 | www.example.com.cdn.dnsv1.com (示例;实际以CDN控制台的为准) | 10分钟 |
CNAME | @ | 默认 | www.example.com | 10分钟 |
路径表
起点 | 过程 | 浏览器请求次数 |
---|---|---|
http://example.com 或 example.com | 起点 -> CDN(301 https://example.com )https://example.com -> CDN -> 源站(301 https://www.example.com )https://www.example.com -> CDN -> 源站资源 | 3 |
http://www.example.com 或 www.example.com | 起点 -> CDN(301 https://www.example.com )https://www.example.com -> CDN -> 源站资源 | 2 |
https://example.com | 起点 -> CDN -> 源站(301 https://www.example.com )https://www.example.com -> CDN -> 源站资源 | 2 |
https://www.example.com | 起点 -> CDN -> 源站资源 | 1 |
应急解决方案(保证可用性;前提:Nginx配置与本方案的源站配置相同)
SSL出现问题
步骤一:修改CDN的HTTPS配置
关闭强制跳转
步骤二:修改 /etc/nginx/conf.d/default.conf
先注释return 301 https://$server_name$request_uri;
,然后再将关于资源的配置(比如location, proxy等等)从server4拷贝到server2
示例:
#server2 http://www.example.com
server {
listen 80;
server_name www.example.com;
#return 301 https://$server_name$request_uri;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
通过以上两步,即可使源站恢复正常工作。
CDN出现问题
步骤一:修改域名解析记录
记录类型 | 主机记录 | 解析线路 | 记录值 | TTL |
---|---|---|---|---|
www.example.com.cdn.dnsv1.com(示例;实际以CDN控制台的为准) | ||||
CNAME | @ | 默认 | www.example.com | 10分钟 |
A | www | 默认 | 1.1.1.1(源站IP) | 10分钟 |
仅需一步,即可使源站恢复正常工作。
方案二
源站配置(以Nginx为例)
关于www和naked域名的重新向以及https的解决方案(以Nginx为例) - 西叉的代码屋 (caoxuan.top)
CDN配置(以腾讯云为例)
基础配置(同方案一)
加速域名:www.example.com
源站类型:自有源
回源协议:协议跟随
源站地址:1.1.1.1(源站IP)
回源HOST:www.example.com
HTTPS配置
强制跳转
跳转配置:开
跳转类型:http->https
跳转方式:301跳转
携带头部:否
DNS配置(以阿里云为例)
记录类型 | 主机记录 | 解析线路 | 记录值 | TTL |
---|---|---|---|---|
CNAME | www | 默认 | www.example.com.cdn.dnsv1.com (示例;实际以CDN控制台的为准) | 10分钟 |
显性URL | @ | 默认 | 301 http://www.example.com | 10分钟 |
路径表
起点 | 过程 | 浏览器请求次数 |
---|---|---|
http://example.com 或example.com | 起点 -> CDN(301 https://example.com ) https://example.com -> CDN -> 源站(301 https://www.example.com )https://www.example.com -> CDN -> 源站资源 | 3 |
http://www.example.com 或www.example.com | 起点 -> CDN(301 https://www.example.com )https://www.example.com -> CDN -> 源站资源 | 2 |
https://example.com | 无法访问 | 0 |
https://www.example.com | 起点 -> CDN -> 源站资源 | 1 |
应急解决方案(保证可用性;前提:Nginx配置与本方案的源站配置相同)
SSL出现问题
步骤一:修改CDN的HTTPS配置
关闭强制跳转
步骤二:修改 /etc/nginx/conf.d/default.conf
先注释return 301 https://$server_name$request_uri;
,然后再将关于资源的配置(比如location, proxy等等)从server4拷贝到server2
示例:
#server2 http://www.example.com
server {
listen 80;
server_name www.example.com;
#return 301 https://$server_name$request_uri;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
通过以上两步,即可使源站恢复正常工作。
CDN出现问题
步骤一:修改域名解析记录
记录类型 | 主机记录 | 解析线路 | 记录值 | TTL |
---|---|---|---|---|
www.example.com.cdn.dnsv1.com (示例;实际以CDN控制台的为准) | ||||
显性URL | @ | 默认 | 301 http://www.example.com | 10分钟 |
A | www | 默认 | 1.1.1.1(源站IP) | 10分钟 |
仅需一步,即可使源站恢复正常工作。
方案三
源站配置(以Nginx为例)
关于www和naked域名的重新向以及https的解决方案(以Nginx为例) - 西叉的代码屋 (caoxuan.top)
CDN配置(以腾讯云为例)
基础配置(同方案一)
加速域名:www.example.com
源站类型:自有源
回源协议:协议跟随
源站地址:1.1.1.1(源站IP)
回源HOST:www.example.com
HTTPS配置
强制跳转
跳转配置:开
跳转类型:http->https
跳转方式:301跳转
携带头部:否
DNS配置(以阿里云为例)
记录类型 | 主机记录 | 解析线路 | 记录值 | TTL |
---|---|---|---|---|
CNAME | www | 默认 | www.example.com.cdn.dnsv1.com (示例值;实际以CDN控制台的为准) | 10分钟 |
A | @ | 默认 | 0.0.0.0(中转服务器的IP) | 10分钟 |
中转服务器配置(以Nginx为例)
vim /etc/nginx/conf.d/default.conf
#http://example.com
server {
listen 80;
server_name example.com;
return 301 http://www.example.com$request_uri;
}
#https://example.com
server {
listen 443;
server_name example.com;
ssl_certificate 0000000_example.com.pem;
ssl_certificate_key 0000000_example.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.2 TLSv1.3;
return 301 https://www.example.com$request_uri;
}
路径表
起点 | 过程 | 浏览器请求次数 |
---|---|---|
http://example.com 或 example.com | 起点 -> 中转服务器(301 http://www.example.com ) http://www.example.com --CDN(301 https://www.example.com ) https://www.example.com -> CDN -> 源站资源 | 3 |
http://www.example.com 或 www.example.com | 起点 -> CDN(301 https://www.example.com ) https://www.example.com -> CDN -> 源站资源 | 2 |
https://example.com | 起点 -> 中转服务器(301 https://www.example.com ) https://www.example.com -> CDN -> 源站资源 | 2 |
https://www.example.com | 起点 -> CDN -> 源站资源 | 1 |
应急解决方案(保证可用性;前提:Nginx配置与本方案的源站配置相同)
SSL出现问题
步骤一:修改CDN的HTTPS配置
关闭强制跳转
步骤二:修改 /etc/nginx/conf.d/default.conf
先注释return 301 https://$server_name$request_uri;
,然后再将关于资源的配置(比如location, proxy等等)从server4拷贝到server2
示例:
#server2 http://www.example.com
server {
listen 80;
server_name www.example.com;
#return 301 https://$server_name$request_uri;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
通过以上两步,即可使源站恢复正常工作。
CDN出现问题
步骤一:修改域名解析记录
记录类型 | 主机记录 | 解析线路 | 记录值 | TTL |
---|---|---|---|---|
www.example.com.cdn.dnsv1.com (示例值;实际以CDN控制台的为准) | ||||
A | @ | 默认 | 0.0.0.0(中转服务器的IP) | 10分钟 |
A | www | 默认 | 1.1.1.1(源站IP) | 10分钟 |
仅需一步,即可使源站恢复正常工作。
鄙人才疏学浅,如有错误,欢迎指出。