将 http 域名和 http 子域名重定向到 https 版本

将 http 域名和 http 子域名重定向到 https 版本

我正在使用 nginx 在 DigitalOcean 上托管我的网站,我的应用程序可以支持域和子域请求。

域名定向的工作方式如下:

http://example.com-> https://example.com
http://www.example.com-> https://example.com
http://subdomain.example.com->https://subdomain.example.com

子域名部分是动态的,所以我无法在 nginx 配置文件中修复子域名。

这就是我目前在我的 nginx conf 文件中的内容。

server {
    listen 80 default_server;
    server_name www.example.com;
    return 301 https://example.com$request_uri;
}
server {
        #listen 80;
        #listen [::]:80;
        listen 443 ssl;

        root /var/www/example.com/public;

        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name example.com;
        #rewrite ^/(.*) https://example.com/$1 permanent;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        # other stuff no relevant here
}

我已设法使第一条规则正常运行,但是无法使第二条和第三条规则正常运行: http://subdomain.example.org-> https://subdomain.example.org,它似乎改为转到https://example.org

http://www.example.org-> https://example.org,转到https://www.example.org

答案1

由于您没有 的配置块subdomain.example.org,因此 nginxdefault_server在向子域提供请求时会使用您的块。在该块中,重定向规则将请求发送到https://example.com

我会使用这样的配置:

server {
    listen 80 default_server;
    return 404;
}

server {
    listen 80;
    server_name example.com www.example.com;

    return 301 https://example.com$request_uri;
}

server {
    listen 80;
    server_name *.example.com;

    return 301 https://$host$request_uri;
}

第一个server块确保服务器对不存在的虚拟主机的请求返回 404。

第二个块处理主域的重定向,第三个块处理子域的重定向。

此外,您还需要虚拟服务器的块https

相关内容