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 http://127.0.0.1:3000 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}`);
next();
});
// Serve a simple HTML page that displays the image
app.get('/', (req, res) => {
res.send(`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Image Display Test</title>
</head>
<body>
<h1>Image Display Test</h1>
<img src="/assets/coffee.png" alt="Test Image">
</body>
</html>
`);
});
// 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);
next();
});
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/test.example.com/public_html;
location /app_v567657/ {
proxy_pass http://127.0.0.1:3000;
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 {
proxy_pass http://127.0.0.1:3000:/$1;
}
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 https://test.example.com/assets/coffee.png
which is displayed OK when i visit http://127.0.0.1:3000
so not sure what am doing wrong. any idea. thanks