将多个HTTP服务器重定向到Nginx中的HTTPS

时间:2020-02-18 10:43:04

标签: nginx

我有一个基于子域名提供不同页面(连接到不同DB)的应用程序。

因此,假设我有docs-for-app1.domain.comdocs-for-app2.domain.comdocs-for-app3.domain.com子域。他们使用相同的PHP代码,因此我只想在nginx中配置一台服务器。

此方案的配置如下所示:

server {
    listen 80;
    listen [::]:80;

    root /var/www/html/docs/;

    index index.php;

    server_name docs-for-app1.domain.com docs-for-app2.domain.com docs-for-app3.domain.com;

######################## REDIRECT ############################
##############################################################
    if ($http_x_forwarded_proto = "http") {
        return 301 https://$server_name$request_uri;
    }
##############################################################

    location / {
            try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.3-fpm.sock;
            fastcgi_read_timeout 10m;
    }

    location ~ /\.ht {
            deny all;
    }
}

除一件事外,一切正常。我的带代理服务器的防火墙无法将HTTP重定向到HTTPS。我必须在Nginx服务器中执行此操作。如您所见,我已经尝试执行此操作(在cfg中标记为一部分),但是它没有按我预期的那样工作。问题在于,$server_name总是返回名称docs-for-app1.domain.com,无论真实的主机名如何。

执行此重定向的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

$server_name

接受请求的服务器的名称

要重定向到“请求的”主机,请使用$host变量;

return 301 https://$host$request_uri;

$host

按此优先顺序:请求行中的主机名,或“主机”请求标头字段中的主机名,或与请求匹配的服务器名