自动虚拟主机 - 单一 Nginx 配置

自动虚拟主机 - 单一 Nginx 配置

我正在尝试根据目录为多个主机创建单个 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;

相关内容