我有一个基于 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 环境中,要正确创建具有不同文档根的新子域,都需要做两件事:
一个额外的
server { }
块来处理它(除了第 3 项中已有的块)。将其他子域指向正确的网络服务器的 DNS 记录。
根据提供的配置,您需要做两件事:
您的
test.example.com
站点配置缺少server_name test.example.com;
指令。添加一个并重新启动您的nginx
进程。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;
}