Dns

Nginx - 創建連結到另一個(本地)網站的子域

  • December 27, 2017

我有一個帶有純 Nginx 的基於 Ubuntu 16.04 的 DigitalOcean VPS(我通過 DigitalOcean 的 DNS 管理工具管理 DNS)。在我的 Nginx 環境中,我在/var/www/html/. 一種是example.com(HTTPS),另一種是具有名為test(HTTP) 的目錄的無域站點。

如何為example.com創建一個將導致test的子域?( 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通過子域訪問該站點。

在任何 Nginx 和 DNS 環境中都需要兩件事來正確創建具有不同文件根的新子域:

  1. 處理它的附加server { }塊(除了您在第 3 項中已有的塊)。
  2. 將另一個子域指向正確的網路伺服器的 DNS 記錄。

根據提供的配置,您需要做兩件事:

  1. 您的test.example.com站點配置缺少server_name test.example.com;指令。添加一個並重新啟動您的nginx過程。
  2. 在您的主域的 DNS 中設置test.example.comDNS 記錄(可能來自您的雲的 DNS 管理工具)。

總是告訴 NGINX 哪些站點要處理哪些伺服器塊。作為nginxUbuntu 中的包維護者,我熟悉人們遇到的大多數使用者級陷阱,例如這個。


你給了我們這個:

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;
}

引用自:https://unix.stackexchange.com/questions/413148