Rails app served via Passenger standalone behind an nginx proxy -


i have 2 apps: /foo , /bar. in each of folders i'm starting passenger. foo:

passenger start -d -e production -p 4000 

and bar:

passenger start -d -e production -p 4001 

i have nginx configured so:

server {   listen 80 default_server;   server_name www.server.com;   root /var/www/html;    location /foo/ {       proxy_pass http://0.0.0.0:4000/;       proxy_set_header host $host;   }    location /bar/ {       proxy_pass http://0.0.0.0:4001/;       proxy_set_header host $host;   } } 

the apps getting served up, none of links work. link users#index action comes '/users' not '/foo/users'.

  • i've set config.relative_url_root in both apps, helps assets not links.
  • i've tried both _url , _path methods, neither work.
  • this answer close, passenger_base_uri isn't valid directive stock nginx.
  • so followed advanced configuration instructions passenger's nginx configuration , added passenger_base_uri = '/foo'; custom conf file , loaded so:

    passenger start -d -e production -p 4000 --nginx-config-template nginx.conf.erb

still no love, , i'm out of ideas. has done before? seems common way deploy multiple apps in production.


more thoughts (2015-06-05)

adding passenger_base_uri = '/foo' nginx.conf.erb file hosts application in 2 locations (which odd me, whatever):

  • localhost:4000/
  • localhost:4000/foo/

the first doesn't have correct resource links (i.e. it's '/users') has access assets.

the second has correct resource links (e.g. '/foo/users') doesn't have assets (this because it's looking /foo/assets/* inside of public folder, not /assets/*). believe way go though, can change proxy @ application:

location /foo/ {     proxy_pass http://0.0.0.0:4000/foo/;     proxy_set_header host $host; } 

does else have thoughts though? if this, it'll mean i'll have rake assets public/foo work. not end of world, still seems weird.

for else looking same thing, here's in end:

  1. follow advanced configuration project specific nginx.conf.erb file.
  2. add passenger_base_uri directive file app (e.g. passenger_base_uri = '/foo';)
  3. in config/environments/production.rb file move location of assets: config.assets.prefix = '/foo/assets'.
  4. start passenger passenger start -d -e production -p some_port --nginx-config-template nginx.conf.erb
  5. in nginx proxy configuration add location directive app:

    location /foo/ {     proxy_pass http://0.0.0.0:some_port/foo/;      proxy_buffering off;     proxy_http_version 1.1;      proxy_set_header connection $connection_upgrade;     proxy_set_header host $host; # more robust http_host     proxy_set_header upgrade $http_upgrade;     proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; # ensures app's env correct     proxy_set_header x-forwarded-host $host;     # proxy_set_header x-forwarded-proto https; # add if want redirects go https } 

after that, (re)start nginx proxy , should @ http://your_proxy/foo/.


Comments

Popular posts from this blog

Magento/PHP - Get phones on all members in a customer group -

php - Bypass Geo Redirect for specific directories -

php - .htaccess mod_rewrite for dynamic url which has domain names -