Correct way to use Nginx as reverse proxy for node js app?

Am trying to use nginx as reverse proxy for my simple node app , however am keeping getting 404 error on proxy side while locally on everything is OK.

here is my basic node app

const express = require('express');
const path = require('path');
const app = express();
const port = 3000;

// Serve static files from the 'assets' directory
app.use('/assets', express.static(path.join(__dirname, 'assets')));

// Log all incoming requests
app.use((req, res, next) => {
  console.log(`Request received: ${req.method} ${req.url}`);

// Serve a simple HTML page that displays the image
app.get('/', (req, res) => {
    <!DOCTYPE html>
    <html lang="en">
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Image Display Test</title>
      <h1>Image Display Test</h1>
      <img src="/assets/coffee.png" alt="Test Image">

// Start the server
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);

// log
app.use((req, res, next) => {
  console.log('Request received:', req.method, req.url);

app.use('/assets', (req, res, next) => {
  console.log('Static asset requested:', req.url);
  express.static(path.join(__dirname, 'assets'))(req, res, next);

and here is my nginx config : node_app_3000.stpl

server {
    listen %ip%:%proxy_port%;
    server_name %domain_idn% %alias_idn%;
    error_log /var/log/%web_system%/domains/%domain%.error.log error;

	root /home/admin/web/;

    location /app_v567657/ {
        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;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    location /error/ {
        alias %home%/%user%/web/%domain%/document_errors/;

    location @fallback {

    location ~ /sachat_app_v567657/\.ht {
        return 404;
    location ~ /sachat_app_v567657/\.svn/ {
        return 404;
    location ~ /sachat_app_v567657/\.git/ {
        return 404;
    location ~ /sachat_app_v567657/\.hg/ {
        return 404;
    location ~ /sachat_app_v567657/\.bzr/ {
        return 404;

    include %home%/%user%/conf/web/nginx.%domain%.conf*;

my node js app.js file is public_html/app_v567657/ so that no body can directly download app.js source code.

so whenever i visit my url from browser i get 404 for the app assets like which is displayed OK when i visit

so not sure what am doing wrong. any idea. thanks

You want my listen to nodes

Then use

location / {
here your code

Then it should work fine

1 Like

ok thanks its working now , however i had to dig deeper and found out that issue was in


for some reason it was modified and was different from chat.stpl template . so had to copy location block from chat.stpl to nginx.ssl.conf

it might be bug or should i comment out

include %home%/%user%/conf/web/nginx.%domain%.conf*;

in chat.stpl end