Nginx conf 用于安全重定向,但一个子域名除外

Nginx conf 用于安全重定向,但一个子域名除外

我查看了这里的信息,虽然我的问题相关,但我有更具体的需求。

  • 我有一个域名,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.comwww.example.com

该服务器someother.example.com是一个独立的实体,在该服务器上,您将配置正常的 HTTP 服务器块。

这应该可以满足你的要求。

但是,如果您启用了 HSTS 标头,并且example.comincludeSubdomains设置属性,则需要删除该属性。否则浏览器将自动加载每个子域的 https 版本,例如您的dev.example.com

如果您已经使用该属性为您的域名设置了 HSTS 标头,则需要在更改设置之前从您的浏览器中清除该域名的 HSTS 条目。

相关内容