我最近购买了一个域名。我已经使用该域设置了一个节点服务器。它正在返回预期结果。但我想将其转移到子域。我以与我的域相同的方式配置了 nginx 服务器块,但它仍然无法工作。我还设置了正确的 A 记录,并尝试使用 CNAME 记录,但这也不起作用。我正在使用 nginx 进行反向代理。
我已尝试更改 CNAME 记录以及子域的 A 记录,就像我的域一样,但它不起作用。
您似乎面临着让您的子域与 NGINX 作为 Node.js 应用程序的反向代理一起使用的问题。让我们逐步完成该过程,以确保一切设置正确。以下是一些需要检查的事项:
首先,仔细检查您的子域的 DNS 是否已正确设置。如果您将
app.example.com
指向您的服务器,请确保您拥有正确的 A 记录。这应该直接指向运行 NGINX 的服务器的 IP 地址。
example.com
)。您可以使用
dig
或 nslookup
验证 DNS 解析:
dig app.example.com
这应该返回正确的 IP 地址。如果未显示,则 DNS 传播可能存在延迟,或者 DNS 配置中可能存在某些问题。
接下来,检查您的 NGINX 配置。它应该看起来像这样:
server {
listen 80;
server_name app.example.com; # Replace with your subdomain
location / {
proxy_pass http://127.0.0.1:3000; # Address of your Node.js app
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
需要确认的几件事:
server_name
指向您的子域(例如,app.example.com
)。proxy_pass
指向 Node.js 应用程序运行的位置(例如,127.0.0.1:3000
)。sudo nginx -t # To test the configuration
sudo systemctl reload nginx # To apply changes
确保防火墙允许流量通过端口 80 (HTTP) 和 443 (HTTPS)。如果您的防火墙设置受到限制,这可能至关重要。
您可以通过运行以下命令来检查 NGINX 状态:
sudo systemctl status nginx
这将告诉您 NGINX 是否运行顺利并侦听预期的端口。
仔细检查您的 Node.js 应用程序是否正在侦听正确的接口。如果它设置为
localhost
或 127.0.0.1
,NGINX 可能无法访问它。您希望它侦听 0.0.0.0
,以便它可以接受来自任何地方的连接,包括您的 NGINX 反向代理。
在你的 Node.js 应用程序中,你应该有这样的东西:
app.listen(3000, '0.0.0.0', () => {
console.log('Node.js app is running on port 3000');
});
一切设置完毕后,您可以通过运行
curl
请求来测试您的设置,以检查其是否正常工作:
curl http://app.example.com
如果您从 Node.js 应用程序中看到预期的结果,那么一切都很好!
如果仍然无法正常工作,请检查您的 NGINX 错误日志:
sudo tail -f /var/log/nginx/error.log
任何错误或错误配置都可能会显示在此处,并可以帮助您指明正确的方向。
DNS 更改有时可能需要一些时间才能传播。如果您最近更新了 DNS,则更改可能需要几个小时甚至长达 48 小时才能完全传播。如果您一直在使用 DNS 缓存版本进行测试,请尝试在本地计算机上清除它或使用不同的网络进行测试。