nginx / ssl:始终重定向到两个 https 子域之一

nginx / ssl:始终重定向到两个 https 子域之一

我的网络服务器支持以下两个子域:

我想创建我的 nginx 配置以便:

  1. http://en.example.com$请求uri =>https://en.example.com$请求uri
  2. http://www.example.com$请求uri =>https://www.example.com$请求uri
  3. 独立于 http 或 https 的每个其他子域 =>https://www.example.com$请求uri

我在网上找不到任何可以解决这个问题的方法。有人能帮我提供正确的 nginx 配置吗?

答案1

首先,您应该明白,如果您的 SSL 证书不支持域,则无法进行从https://something.example.com到 的“透明”https 重定向。访问时将显示错误或类似信息。但是,您应该能够毫无困难地从 到 重定向。为此,请在 顶部添加以下内容:https://www.example.comsomething.example.comYour connection is not securehttp://*.example.comhttps://www.example.comnginx.conf

server {
    listen 80;
    default_server;
    server_name  _;
    return 301 https://www.example.com$request_uri;
}

它应该将任何对你的 IP 的请求重定向到https://www.example.com

然后我们添加特定重定向的配置。这个是针对http://en.example.com-> 的配置https://en.example.com

server {
    listen 80;
    server_name en.example.com;
    return 301 https://en.example.com$request_uri;
}

这个针对http://www.example.com-> https://www.example.com

server {
    listen 80;
    server_name www.example.com;
    return 301 https://www.example.com$request_uri;
}

最后,我们为应通过 SSL 提供所需内容的“真实”域添加配置。这一项适用于http://www.example.com

server {
    listen 443 ssl;
    ssl_certificate /etc/ssl/www.example.com.crt;
    ssl_certificate_key  /etc/ssl/www.example.com.key;
    server_name www.example.com;
    <your www.example.com server config here>
    ...
    </your www.example.com server config here>
}

此款适用于http://en.example.com

server {
    listen 443 ssl;
    ssl_certificate /etc/ssl/en.example.com.crt;
    ssl_certificate_key  /etc/ssl/en.example.com.key;
    server_name en.example.com;
    <your en.example.com server config here>
    ...
    </your en.example.com server config here>
}

相关内容