我想要使用不同的位置块来运行多个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; }
要rewrite
的break
参数将导致nginx重写URI而不实际redirect或重新路由请求。
不要忘了添加前缀/app1/
到你的try_files
名字,因为$uri
在try_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)特有的,所以可能不适用于你的设置。