Nginx Configuration for a Go application

This is one of those reminder posts. I just set up nginx with a Go web application, and I always forget how to do it. Three things are required:

  1. Update nginx.conf to include a sub-directory where the actual conf will be stored
  2. Add an nginx.conf to the sub-directory
  3. Update /etc/hosts with your site name

Update nginx.conf

nginx.conf (in /usr/local/etc/nginx if you installed from homebrew). The include path should be relative to the nginx.conf file. If the nginx.conf file is in the nginx dir, then sites-enabled should be in the nginx dir as well.

http {
include       /usr/local/etc/nginx/sites-enabled/*;

Add a new server.nginx.conf file

Add a new conf file in sites-enabled called mysite.nginx.conf

upstream mysite {

server {
listen 80;

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://mysite;
proxy_redirect off;


A few things:

  1. The upstream block is like an alias for your application. So nginx is expecting your server to run on
  2. The upstream alias is referenced in the proxy_pass attribute http://name of upstream alias

Update /etc/hosts

Lastly, update add the server (server_name from server.nginx.conf) to /etc/hosts


Now start nginx and start your server

# Use sudo when starting nginx in order to run on port 80
$ sudo nginx

# Start your go application

Now you should be able to access your application at

Update: If you want to allow websocket connections, update the nginx conf like this