How to use NGINX as a reverse-proxy server for a Node.js application using

Despite the long name of the article, I have a feeling this may apply to more people than I might think. If you have a Node.js application which needs connections that you want to pass throgh nginx’s reverse_proxy directive then this is the article for you!

You must seperate the sockets and the static resources.

  • The socket connections can be routed through the default $host/ if you want to ease modifications to the source code.
  • The connections to your main npm Node.js application can be routed through the relevant directory.

Here is the relevant part of my file:

location / {
  proxy_pass http://localhost:8080/;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  proxy_http_version 1.1;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $host;

location /ttrpg {
  proxy_pass http://localhost:8080/;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


For this application, I needed the /ttrpg directory to connect to my main Node.js instance. This was going to be the root of a ttrpg project. It was to have static files served form my Node.js application.

I also needed / to conenct to my running npm instance. When I tried to route all the traffic through the /trrpg location directive I had no luck whatsoever; $host/ttrpg/* calls always failed with a 404.

Having two seperate blocks forwarding in different ways seems to fix this. I am not knowledgable enough to understand how.

For now, the project is alive!!!

Happy hacking!

P.S. I forgot to mention I also symbolically linked the file (that node is supposed to serve automatically) to the static client dir. For some reson the node instance would not serve this file without that.

$ pwd
$ ln -s ../server/node_modules/ .

Happy hacking 2.0!