我有一个基于子域名提供不同页面(连接到不同DB)的应用程序。
因此,假设我有docs-for-app1.domain.com
,docs-for-app2.domain.com
和docs-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
,无论真实的主机名如何。
执行此重定向的正确方法是什么?
答案 0 :(得分:1)
接受请求的服务器的名称
要重定向到“请求的”主机,请使用$host
变量;
return 301 https://$host$request_uri;
按此优先顺序:请求行中的主机名,或“主机”请求标头字段中的主机名,或与请求匹配的服务器名