Dns
Nginx - 創建連結到另一個(本地)網站的子域
我有一個帶有純 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 環境中都需要兩件事來正確創建具有不同文件根的新子域:
- 處理它的附加
server { }
塊(除了您在第 3 項中已有的塊)。- 將另一個子域指向正確的網路伺服器的 DNS 記錄。
根據提供的配置,您需要做兩件事:
- 您的
test.example.com
站點配置缺少server_name test.example.com;
指令。添加一個並重新啟動您的nginx
過程。- 在您的主域的 DNS 中設置
test.example.com
DNS 記錄(可能來自您的雲的 DNS 管理工具)。總是告訴 NGINX 哪些站點要處理哪些伺服器塊。作為
nginx
Ubuntu 中的包維護者,我熟悉人們遇到的大多數使用者級陷阱,例如這個。你給了我們這個:
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; }