域和子域的 Nginx 配置

域和子域的 Nginx 配置

我是 Nginx 新手。

我的主要目标是在一个域名上托管两个网站。我希望有一个与主域名分开托管的子域名,例如:

  • example.com 的服务来自/home/user/Documents/vue_website/dist
  • subdomain.example.com 的服务来自/var/www/html

因为我在一台服务器上运行所有这些,所以我认为这无法完成,因为它们具有相同的 IP 地址。

我现在正尝试使用子目录来解决这个问题。如果我访问 example.com/wp,它应该会显示第二个网站。

当前 Nginx 站点配置如下:

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

    return 301 https://my-domain.com$request_uri;
}

server {
    access_log /var/log/nginx/scripts.log scripts;

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate /etc/ssl/my-domain.com.pem;
    ssl_certificate_key /etc/ssl/_.my-domain.com_private_key.key;
    server_name my-domain.com www.my-domain.com;
   location / {

            root /home/pi/Documents/vue_website/dist;
            index index.html;
    }

    location /wp {
            root /var/www/html/;

            location ~ \.php$ {
                 try_files $uri =404;
                 fastcgi_split_path_info ^(.+\.php)(/.+)$;
                 fastcgi_pass 172.0.0.1:9000;
                 fastcgi_index index.php;
                 include fastcgi_params;
            }
    }

}

但那不管用。如果能得到任何帮助我将非常感激。

编辑: 所以我现在可以让子域名正常工作了。但现在的问题是,我只能通过 ssl / 在前面输入 https 来访问它,而这并不是我想要的。

因此,现在我尝试根据搜索到的域将 http 请求重定向到给定的站点

例如如果我去http://my-domain.com将我重定向到 https 等等。

我得到的代码如下:

        'my-domain.com' '1';
        'wp.my-domain.com' '2';
}

server {
        listen 80;

        if ($new = '1') {
                return 301 https://my-domain.com$request_uri;
        }

        if ($new = '2') {
                return 301 https://wp.my-domain.com$request_uri;
        }
}

我的代码是否出了错,因为在我看来,如果我理解正确的话,它应该是那样工作的。

答案1

您认为您无法在一个 IP 上托管多个网站的假设是不正确的。您可以在一个 IP 上托管任意数量的网站,无论是使用 http 还是 https。如果您愿意,您还可以使用子文件夹托管不同的内容。

配置子域名相当简单,你只需要使用两个服务器块

server {
  server_name example.com;
  listen 443 ssl http2;
  // Add other required SSL entries
  root     /var/www/site1;
}

server {
  server_name subdomain.example2.com;
  listen 443 ssl http2;
  // Add other required SSL entries
  root     /var/www/site2;
}

使用子文件夹进行配置

server {
  server_name example.com;
  listen 443 ssl http2;
  // Add other required SSL entries
  location / {
    root     /var/www/site1;
  }
  location /subdir {
    root     /var/www/site2;
  }
}

如果您需要进一步的帮助,请编辑您的问题并提供比“它不起作用”更多的细节。理想情况下,您可以分享 URL 的 curl、匹配的访问和错误日​​志条目、有用的 PHP/应用程序日志以及预期的行为。

相关内容