操作 .conf 文件以正确重写 https

操作 .conf 文件以正确重写 https

我有一个 nginx 服务器和一个域名 example.com。每个客户都有自己的子域名,如 wsb.example.com 等。它们的内容通过 PHP 更改,但所有子域名都会重定向到 Web 服务器上的同一文件夹。

我遇到的唯一问题是无需 https 即可访问域名。https://whatever.example.com/有效,但 whatever.example.com 将我重定向到 https://*.example.com/

我究竟做错了什么?

server {
        listen *:80;
        listen *:443 ssl;
        server_name *.alterament.de;

        index index.php;
        root /var/www/webapp.alterament.de/public;

        ssl_certificate         ssl/alterament.de.crt;
        ssl_certificate_key     ssl/alterament.de.key;

        if ($ssl_protocol = "") {
                rewrite ^/(.*) https://$server_name/$1 permanent;
        }

        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }

        location /resources {
                root /var/www/webapp.alterament.de;
        }
}

答案1

$server_name在重定向中使用了 ,这会导致server_name指令的内容被使用。这不是您想要的。

反而,你应该用它代替$host

答案2

此配置检查协议是否不是 https 并强制使用 https:

if ($ssl_protocol = "") {
       rewrite ^/(.*) https://$server_name/$1 permanent;
}

尝试注释掉整个块并重新启动 nginx

相关内容