Nginx +独angular兽多个应用程序的位置 – 路由

我想要使​​用不同的位置块来运行多个rails应用程序。 不同的独angular兽工作者被启动和configuration,他们工作得很好。

每个应用程序都在同一个文件夹下: /var/www/<app> ,所以我像这样configuration了nginx

 root /var/www; location /app1/ { root /var/www/app1/public; try_files $uri/index.html $uri.html $uri @app1; } location /app2/ { root /var/www/app2/public; try_files $uri/index.html $uri.html $uri @app2; } 

我的问题是,这个规则集请求(像mydomain / app1 /检查)进入我的app1像这样: Started GET "/app1/check" for ...我想刚刚Started GET "/check" for ...

我应该改变我的configuration?

如果你不想改变你的上游参数(无论你在@app位置上做什么),简单的rewrite可以帮助你:

 location /app1/ { root /var/www/app1/public; rewrite ^/app1/(.*)$ /$1 break; try_files /app1/$uri/index.html /app1/$uri.html /app1/$uri @app1; } 

rewritebreak参数将导致nginx重写URI而不实际redirect或重新路由请求。

不要忘了添加前缀/app1/到你的try_files名字,因为$uritry_files运行的时候已经被重写了。

在这种情况下,你是如何设置资产path的?

我的资产path是

 <host>/assets/<asset_name>.css 

但正确的path是:

 <host>/<app_name>/assets/<asset_name>.css 

我的configuration大部分与上面的一样。

 upstream app1 { # Path to Unicorn SOCK file, as defined previously server unix:/tmp/unicorn.app1.sock fail_timeout=0; } upstream app2 { # Path to Unicorn SOCK file, as defined previously server unix:/tmp/unicorn.app2.sock fail_timeout=0; } location /app1/ { root /home/<user_app1>/<app1>; rewrite ^/app1/(.*)$ /$1 break; try_files $uri @app1; } location /app2/ { root /home/<user_app2>/<app2>; rewrite ^/app2/(.*)$ /$1 break; try_files $uri @app2; } location @app1 { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app1; } location @app2 { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app2; } 

我用nginx,uwsgi和django / wsgi做这个 – 关键是:

 location ~* /tiny/(.+?)/ { include uwsgi_params; uwsgi_pass unix:/run/uwsgi/tiny_$1.sock; uwsgi_param SCRIPT_NAME /tiny/$1; uwsgi_modifier1 30; } 

我将这些应用程序作为“名称”托pipe; 即/ tiny / foobar /,但由于上面的SCRIPT_NAME更改,该应用将path视为/ foobar /。 modifier1是WSGI(IIRC)特有的,所以可能不适用于你的设置。