Nginx 服务器配置:主机名未在子域上解析
Nginx Server Configuration: Hostname not resolving on Subdomain
提前感谢您的支持。
我用 Nginx 作为 Digitalocean Droplet 设置了一个 Ubuntu 服务器,我正在使用服务器配置工具 Laravel Forge,它工作正常。我成功安装了 PHP Framework Laravel 并在服务器上部署了代码。我 ssh 进入服务器并检查了假定目录中的文件。代码部署成功。
接下来我拥有一个域,并为以下子域创建了一个 A 记录:app.mywebsite.de,它指向该服务器。我跟随 digitalocean instructions 并等待所需的时间。使用 DNS 查找工具,我确认子域实际指向服务器。
Screenshot of DNS Lookup
但是,当我在浏览器中使用子域时,浏览器没有连接到服务器。我在浏览器中收到以下错误消息:
Screenshot of Browser when connecting to server
似乎子域已正确指向服务器,但服务器配置不正确。我尝试检查 nginx 配置,在 sites-avaialble 下,我对子域进行了以下配置:
# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/app.mywebsite.de/before/*;
server {
listen 80;
listen [::]:80;
server_name app.mywebsite.de;
server_tokens off;
root /home/forge/app.mywebsite.de/public;
# FORGE SSL (DO NOT REMOVE!)
# ssl_certificate;
# ssl_certificate_key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS_AES_256_GCM_SHA384:TLS-AES-256-GCM-SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS-CHACHA20-POLY1305-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/app.mywebsite.de/server/*;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/app.mywebsite.de-error.log error;
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/app.mywebsite.de/after/*;
在forge-conf/app.website.de/before/*;中只有一个文件redirect.conf 使用以下代码:
server {
listen 80;
listen [::]:80;
server_name www.app.website.de;
if ($http_x_forwarded_proto = 'https') {
return 301 https://app.website.de$request_uri;
}
return 301 $scheme://app.website.de$request_uri;
}
服务器上没有其他站点。所以nginx配置文件夹的sites available目录下只有000-catch-all文件
不幸的是,我在这里达到了理解的极限,如果有人能指出正确的方向以找出 nginx 的哪一部分没有正确配置,我会很高兴。
P.S。
一些附加信息:
是的,我多次重启了 Nginx 和整个服务器。
事实证明,一切都配置正确。我没有做任何更改,只是在 nginx 服务器上添加了一些额外的站点。 Forge 可能更新了服务器块,这解决了问题。
提前感谢您的支持。
我用 Nginx 作为 Digitalocean Droplet 设置了一个 Ubuntu 服务器,我正在使用服务器配置工具 Laravel Forge,它工作正常。我成功安装了 PHP Framework Laravel 并在服务器上部署了代码。我 ssh 进入服务器并检查了假定目录中的文件。代码部署成功。
接下来我拥有一个域,并为以下子域创建了一个 A 记录:app.mywebsite.de,它指向该服务器。我跟随 digitalocean instructions 并等待所需的时间。使用 DNS 查找工具,我确认子域实际指向服务器。
Screenshot of DNS Lookup
但是,当我在浏览器中使用子域时,浏览器没有连接到服务器。我在浏览器中收到以下错误消息:
Screenshot of Browser when connecting to server
似乎子域已正确指向服务器,但服务器配置不正确。我尝试检查 nginx 配置,在 sites-avaialble 下,我对子域进行了以下配置:
# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/app.mywebsite.de/before/*;
server {
listen 80;
listen [::]:80;
server_name app.mywebsite.de;
server_tokens off;
root /home/forge/app.mywebsite.de/public;
# FORGE SSL (DO NOT REMOVE!)
# ssl_certificate;
# ssl_certificate_key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS_AES_256_GCM_SHA384:TLS-AES-256-GCM-SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS-CHACHA20-POLY1305-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/app.mywebsite.de/server/*;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/app.mywebsite.de-error.log error;
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/app.mywebsite.de/after/*;
在forge-conf/app.website.de/before/*;中只有一个文件redirect.conf 使用以下代码:
server {
listen 80;
listen [::]:80;
server_name www.app.website.de;
if ($http_x_forwarded_proto = 'https') {
return 301 https://app.website.de$request_uri;
}
return 301 $scheme://app.website.de$request_uri;
}
服务器上没有其他站点。所以nginx配置文件夹的sites available目录下只有000-catch-all文件
不幸的是,我在这里达到了理解的极限,如果有人能指出正确的方向以找出 nginx 的哪一部分没有正确配置,我会很高兴。
P.S。 一些附加信息: 是的,我多次重启了 Nginx 和整个服务器。
事实证明,一切都配置正确。我没有做任何更改,只是在 nginx 服务器上添加了一些额外的站点。 Forge 可能更新了服务器块,这解决了问题。