首页 > 解决方案 > 如何为同一域上的多个站点配置 Nginx?

问题描述

我在服务器配置方面真的很新手,我想在同一个域上为多个站点提供服务,如下所示:

example.com/site1 -> /var/www/example.com/site1/html/
example.com/site2 -> /var/www/example.com/site2/html/  
example.com/site3 -> /var/www/example.com/site3/html/

等等

我的目的是让在同一个域上拥有完全不同的站点(PHP 上的 site1,python 上的 site2 等)成为可能,但路径不同。
应为所有站点启用 HTTPS。

我从一个目前仅使用 statiс 的站点开始:

server {
    listen               80;
    listen               [::]:80;
    server_name          example.com www.example.com;
    set                  $base /var/www/example.com;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log warn;

    # Open index.html for example.com/site1
    location = /site1 {
        alias            $base/site1/html;
        index            index.html;
        try_files        $uri $uri/ =404;
    }
    
    location /site1/ {
        alias            $base/site1/html/;
        index            index.html;
        try_files        $uri $uri/ =404;

        access_log       /var/log/nginx/example.com/site1/access.log;
        error_log        /var/log/nginx/example.com/site1/error.log warn;
    }
}

但即使使用这个简单的配置,我也有一些问题:

  1. 出于某种原因,它在没有 SSL 配置的情况下通过 HTTPS 工作,但是当我启用它时,我对任何请求都有 502。
  2. https://example.com/site1重定向到http://example.com/site1/然后重定向到https://example.com/site1/,但我不想要它。我根本不想要斜杠。
  3. 我不知道如何在不使用绝对 URL 的情况下从前端加载静态。例如,如果我在 site1 上,那么请求 /css/styles.css 实际上应该转到https://example.com/site1/css/styles.css

非常感谢您的帮助!

标签: nginxwebwebserver

解决方案


推荐阅读