Tuesday, November 5, 2013

Proxy Nodejitsu drone witth nginx

When developing an Angluar application, I needed to make requests to remove servers, and encountered the "Access-Control-Allow-Origin" problem. To overcome this, I decided to proxy the remote server using nginx. Since a remote server was a nodejitsu drone, I needed to modify my nginx configuration a little further than normal:
upstream api {
# server 127.0.0.1:3030; # Standard proxy_pass server to locally running server
server librecms-api.jit.su:80; # proxy_pass server to remote nodejitsu drone.
}
server {
listen 80;
server_name localhost;
root /var/www/librecms/src/angular/app;
underscores_in_headers on;
location /api/ {
##### proxy_pass configuration for all upstream servers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://api/;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
#### NOTE THIS IS SPECIFIC FOR NOTEJITSU DRONES.
#### Must set Host header to domain of nodejitsu drone.
proxy_set_header Host librecms-api.jit.su;
}
location / {
# Application specific
index index.html;
try_files $uri $uri/ /index.html =404;
}
}
view raw gistfile1.txt hosted with ❤ by GitHub
Note the proxy_set_header Host line. This is needed because nodejitsu proxies their drones according to the Host header (docs).