It looks like you're facing an issue with getting your subdomain to work with NGINX as a reverse proxy for your Node.js app. Let’s walk through the process step by step to make sure everything’s set up correctly. Here are some things to check:
First, double-check that the DNS for your subdomain is properly set up. If you’re pointing app.example.com to your server, make sure you have the correct A record. This should point directly to the IP address of the server running NGINX.
example.com).You can verify DNS resolution by using dig or nslookup:
dig app.example.com
This should return the correct IP address. If it’s not showing up, there could be a delay in DNS propagation, or something might be off in the DNS configuration.
Next, check your NGINX configuration. It should look something like this:
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;
}
}
A few things to make sure of:
server_name is pointing to your subdomain (e.g., app.example.com).proxy_pass is pointing to where your Node.js app is running (e.g., 127.0.0.1:3000).sudo nginx -t # To test the configuration
sudo systemctl reload nginx # To apply changes
Make sure that the firewall is allowing traffic through ports 80 (HTTP) and 443 (HTTPS). This can be critical if your firewall settings are restrictive.
You can check your NGINX status by running:
sudo systemctl status nginx
This will tell you if NGINX is running smoothly and listening on the expected ports.
Double-check that your Node.js app is listening on the correct interface. If it’s set to localhost or 127.0.0.1, NGINX might not be able to reach it. You want it to listen on 0.0.0.0 so it can accept connections from anywhere, including your NGINX reverse proxy.
In your Node.js app, you should have something like this:
app.listen(3000, '0.0.0.0', () => {
console.log('Node.js app is running on port 3000');
});
Once everything is set up, you can test your setup by running a curl request to check if it’s working:
curl http://app.example.com
If you see the expected result from your Node.js app, then everything is good to go!
If it’s still not working, check your NGINX error logs:
sudo tail -f /var/log/nginx/error.log
Any errors or misconfigurations will likely show up here and can help point you in the right direction.
DNS changes can sometimes take time to propagate. If you've recently updated your DNS, it might take a few hours or even up to 48 hours for the changes to fully propagate. If you’ve been testing with a cached version of DNS, try clearing it on your local machine or use a different network to test.