如何配置 nginx 来托管多个子域

Posted

技术标签:

【中文标题】如何配置 nginx 来托管多个子域【英文标题】:How to configure nginx to host multiple sub-domains 【发布时间】:2019-09-05 23:30:48 【问题描述】:

我目前在 nginx 上设置了 example.com 域并且它可以工作。我想设置一个子域 test.example.com,但在遵循多个不同的指令后,我要么不断收到 404,要么被重定向到主域。

我的服务器配置和文件结构如下所示:

/usr/local/nginx
├── conf
│   ├── fastcgi_params
│   ├── includes
│   ├── nginx.conf
│   ├── nginx.conf.save
│   ├── sites
│   │   ├── example.com.conf
│   │   ├── test.example.com.conf
│   ├── uwsgi_params
│   └── win-utf
├── html
├── logs
└── snippets
    ├── ssl-example.com.conf
    └── ssl-params.conf

/var/www
├── example.com
│   └── ...
└── test.example.com
    └── index.html

我已更新 DNS 记录,使“*.example.com”指向同一个 IP

默认域 example.com.conf 文件如下所示:

server 
    listen 80;
    server_name exmaple.com www.example.com;
    return 301 https://$server_name$request_uri;

server 
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    location ~ /.well-known 
        root /var/www/lets-encrypt/example.com;
        access_log off;
        expires max;
        break;
    
    include /usr/local/nginx/conf/includes/m2-php71.conf;

以及子域 test.example.com.conf 文件:

server 
    listen 80;
    server_name test.example.com;
    return 301 https://$server_name$request_uri;    


server 
    listen 443 ssl;
    server_name test.example.com;
    ssl_certificate /etc/letsencrypt/live/test.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/test.exampe.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    location ~ /.well-known 
        root /var/www/lets-encrypt/test.example.com;
        access_log off;
        expires max;
        break;
    
    include /usr/local/nginx/conf/includes/m2-php71.conf;

当我删除 listen 443 部分时,它会重定向到主域。

我希望从 var/www/test.subdomain.com 提供对子域 test.example.com 的请求,但似乎无法通过 404 错误

【问题讨论】:

【参考方案1】:

您需要执行以下操作 -

    从两种配置之一中删除www.example.com。 在两个配置的服务器部分添加alias

【讨论】:

我不同意您的建议:“example.com”已经在一个配置文件中,而不是您在回答中暗示的两个。 我认为用户已经更新了问题。在这种情况下,您只需执行第 2 点即可。【参考方案2】:

问题出在 php.conf 文件上。我应该已经意识到,因为我能够加载 index.html 文件,但不能加载 .php 文件。包含正确的 php.conf 文件后,一切都开始工作了。

【讨论】:

以上是关于如何配置 nginx 来托管多个子域的主要内容,如果未能解决你的问题,请参考以下文章

配置服务器 —— Nginx添加多个二级子域名 --- 2018-06-26

如何在 Apache 中使用 SSL 配置多个子域?

nginx服务器配置多域名

如何在单个 AWS EC2 实例上托管多个域和子域

如何在 nginx 中调试和查找子域的默认文档根目录?

通过子域在同一 Droplet 中的两个或多个 Django 项目