Nginx - 创建链接到另一个(本地)网站的子域

Nginx - 创建链接到另一个(本地)网站的子域

我有一个基于 Ubuntu 16.04 的 DigitalOcean VPS,带有纯 Nginx(我通过 DigitalOcean 的 DNS 管理工具管理 DNS)。在我的 Nginx 环境中,我有 2 个站点/var/www/html/。一个是example.com(HTTPS),另一个是目录名为test(HTTP) 的无域站点。

如何创建子域example.com这将导致测试? ( test.example.com)?


1) 我的nginx.conf

2)我的example.com站点配置:

server {
    root /var/www/html/example.com;
    server_name example.com www.example.com;

    location ~ /\.ht {
        deny all;
    }

    location / {
        index index.php index.html index.htm fastcgi_index;
        try_files $uri $uri =404 $uri/ /index.php?$args;
    }

    location ~*  \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff|pdf)$ {
        expires 365d;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    listen 80; # managed by Certbot

    listen 443 ssl http2; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    # Redirect non-https traffic to https
    # if ($scheme != "https") {
    #     return 301 https://$host$request_uri;
    # } # managed by Certbot
}

3)我的test站点配置:

server {
    root /var/www/html/test;

    location ~ /\.ht {
        deny all;
    }

    location / {
        index index.php index.html index.htm fastcgi_index;
        try_files $uri $uri =404 $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    listen 80;
}

更新:

  • 我尚未更改 VPS 托管提供商的 DNS 管理工具中的任何内容。
  • 我希望世界上的每个人都能够test通过子域访问该网站。

答案1

在任何 Nginx 和 DNS 环境中,要正确创建具有不同文档根的新子域,都需要做两件事:

  1. 一个额外的server { }块来处理它(除了第 3 项中已有的块)。

  2. 将其他子域指向正确的网络服务器的 DNS 记录。

根据提供的配置,您需要做两件事:

  1. 您的test.example.com站点配置缺少server_name test.example.com;指令。添加一个并重新启动您的nginx进程。

  2. test.example.com在您的主域的 DNS 中设置DNS 记录(可能是通过云的 DNS 管理工具)。

始终告诉 NGINX 使用哪些服务器块来处理哪些站点。作为 Ubuntu 中的软件包维护者nginx,我熟悉人们遇到的大多数用户级陷阱,例如这个。


你给了我们这个:

server {
    root /var/www/html/test;

    location ~ /\.ht {
        deny all;
    }

    location / {
        index index.php index.html index.htm fastcgi_index;
        try_files $uri $uri =404 $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    listen 80;
}

所以字面上地只需在您的root行之前添加这一行:

server_name test.example.com;

...你会得到这个配置文件:

server {
    root /var/www/html/test;
    server_name test.example.com;

    location ~ /\.ht {
        deny all;
    }

    location / {
        index index.php index.html index.htm fastcgi_index;
        try_files $uri $uri =404 $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    listen 80;
}

相关内容