我正在尝试根据目录为多个主机创建单个 Nginx 配置。我遵循了一个指南,该指南似乎适用于标准 HTTP 设置,但当我添加 HTTPS 301 重定向时,我收到错误“无效重定向”。对此有什么想法吗?以下是我的配置。谢谢
server {
listen x.x.x.x:80;
server_name ~^(?<sname>.+?).domain.com$;
return 301 https://$server_name$request_uri;
}
server {
listen x.x.x.x:443 ssl default_server;
server_name ~^(?<sname>.+?).domain.com$;
root /var/web/$sname;
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
ssl_certificate /etc/letsencrypt/live/wildcard.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wildcard.domain.com/privkey.pem;
access_log /var/log/nginx/$sname-access.log;
error_log /var/log/nginx/wildcard-error.log debug;
error_page 404 /index.php;
sendfile off;
location ~ \.php {
include fastcgi.conf;
#fastcgi_index index.php;
include cors_support;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
}
location ~ /\.ht {
deny all;
}
location /.well-known {
root /var/www/html;
}
}
答案1
您的重定向是“无效的”,因为您尝试重定向到的重定向https://~^(?<sname>.+?).domain.com$
显然是无效的。
为什么会这样?
您选择按如下方式编写重定向:
return 301 https://$server_name$request_uri;
这没有意义。这server_name
不是有效的主机名。
相反,你应该重定向到用户代理使用的同一主机。正确的变量使用 有$host
,没有$server_name
。
return 301 https://$host$request_uri;