Configuring nginx as a proxy

NodeBB by default runs on port 4567, meaning that builds are usually accessed using a port number in addition to their hostname:

In order to allow NodeBB to be served without a port, nginx can be set up to proxy all requests to a particular hostname (or subdomain) to an upstream NodeBB build running on any port.


  • NGINX version v1.3.13 or greater


NGINX-served sites are contained in a server block. This block of options goes in a specific place based on how nginx was installed and configured:

  • /path/to/nginx/sites-available/* – files here must be aliased to ../sites-enabled
  • /path/to/nginx/conf.d/*.conf – filenames must end in .conf
  • /path/to/nginx/httpd.conf – if all else fails

Below is the basic nginx configuration for a NodeBB build running on port 4567:

server {
    listen 80;


    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_redirect off;

        # Socket.IO Support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";


  • Remember to also edit config.json and change use_port from true to false
  • nginx must be on version 1.4.x to properly support websockets. Debian/Ubuntu use 1.2, although it will work there will be a reduction in functionality.
  • The proxy_pass IP should be if your NodeBB is hosted on the same physical server as your nginx server. Update the port to match your NodeBB, if necessary.
  • This config sets up your nginx server to listen to requests for It doesn’t magically route the internet to it, though, so you also have to update your DNS server to send requests for to the machine with nginx on it!