# 关于在Nginx中配置顶级域名与www域名之间跳转以及https和如何搭配CDN的综合解决方案
方案一方案二(不推荐)方案三
使用场景一般情况顶级域名存在邮件服务顶级域名存在邮件服务
相对复杂度低中高
终点https://www.example.comhttps://www.example.comhttps://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
CNAMEwww默认www.example.com.cdn.dnsv1.com(示例;实际以CDN控制台的为准)10分钟
CNAME@默认www.example.com10分钟


路径表

起点过程浏览器请求次数
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
CNAMEwww默认www.example.com.cdn.dnsv1.com(示例;实际以CDN控制台的为准)10分钟
CNAME@默认www.example.com10分钟
Awww默认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
CNAMEwww默认www.example.com.cdn.dnsv1.com(示例;实际以CDN控制台的为准)10分钟
显性URL@默认301 http://www.example.com10分钟


路径表

起点过程浏览器请求次数
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
CNAMEwww默认www.example.com.cdn.dnsv1.com(示例;实际以CDN控制台的为准)10分钟
显性URL@默认301 http://www.example.com10分钟
Awww默认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
CNAMEwww默认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
CNAMEwww默认www.example.com.cdn.dnsv1.com(示例值;实际以CDN控制台的为准)10分钟
A@默认0.0.0.0(中转服务器的IP)10分钟
Awww默认1.1.1.1(源站IP)10分钟

​ 仅需一步,即可使源站恢复正常工作。


鄙人才疏学浅,如有错误,欢迎指出。