我查看了这里的信息,虽然我的问题相关,但我有更具体的需求。
- 我有一个域名,
example.com
。 - 任何流量
http://example.com/xyz
都应路由至https://example.com/xyz
- 任何流量
http://www.example.com/xyz
都应路由到https://example.com/xyz
(www 的 CNAME 位于 DNS 端) - 但是,任何到的流量
http://dev.example.com
都不应路由到https
,而应保留 http 并重定向到外部服务器(该服务器已在 DNS 端设置为 CNAME)
简而言之,除子域外,所有流量(包括 www)都应重定向到其安全的 https 等效项dev
。应该如何设置?
在 Nginx 中添加块,如下所示:
server {
listen 9.9.9.9:80;
server_name example.com ;
return 301 https://example.com$request_uri;
}
# server {
# listen 9.9.9.9:80;
# server_name dev.example.com ;
# return 301 cname.createsend.com;
# }
server {
listen 443 ssl http2 deferred;
listen [::]:443 ssl http2 deferred;
server_name example.com;
root /home/example;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;#
include common.conf;
include ssl.conf;
}
上面的includessl.conf
是这样的:https://pastebin.com/raw/sVmtV6uP
答案1
如果您的 DNS 设置如下:
example.com A 192.168.10.1
www.example.com A 192.168.10.1
dev.example.com CNAME someother.example.com
这里192.168.10.1
对应于运行网站的服务器。
https 重定向可以与 301 重定向一起发生,这些重定向由服务于每个域的每个虚拟主机发送。因此,在这种情况下,您需要在虚拟服务器块中为 http 协议设置重定向example.com
。www.example.com
该服务器someother.example.com
是一个独立的实体,在该服务器上,您将配置正常的 HTTP 服务器块。
这应该可以满足你的要求。
但是,如果您启用了 HSTS 标头,并且example.com
已includeSubdomains
设置属性,则需要删除该属性。否则浏览器将自动加载每个子域的 https 版本,例如您的dev.example.com
。
如果您已经使用该属性为您的域名设置了 HSTS 标头,则需要在更改设置之前从您的浏览器中清除该域名的 HSTS 条目。