upstream discourse { server unix:/home/discourse/discourse/tmp/sockets/thin.0.sock; server unix:/home/discourse/discourse/tmp/sockets/thin.1.sock; server unix:/home/discourse/discourse/tmp/sockets/thin.2.sock; server unix:/home/discourse/discourse/tmp/sockets/thin.3.sock; } server { listen 80; gzip on; gzip_min_length 1000; gzip_types application/json text/css application/x-javascript; server_name enter.your.web.hostname.here; sendfile on; keepalive_timeout 65; location / { root /home/discourse/discourse/public; location ~ \.(jpe?g|png|gif)$ { valid_referers none blocked mysite.com *.mysite.com; if ($invalid_referer) { return 403; } } location ~ ^/t\/[0-9]+\/[0-9]+\/avatar { expires 1d; add_header Cache-Control public; add_header ETag ""; } location ~ ^/assets/ { expires 1y; add_header Cache-Control public; add_header ETag ""; break; } 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; proxy_set_header Host $http_host; # If the file exists as a static file serve it directly without # running all the other rewite tests on it if (-f $request_filename) { break; } if (!-f $request_filename) { proxy_pass http://discourse; break; } } }