我想使用nginx来在端口80上映射我所有的Rails应用程序。
当前,我有3个Rails应用程序在端口3000 3001和3002上运行,我想在端口80上使用nginx进行映射,如下所示:
http://127.0.0.1/app1 => 127.0.0.1:3000
http://127.0.0.1/app2 => 127.0.0.1:3001
http://127.0.0.1/app3 => 127.0.0.1:3002
这是我所做的:
server {
listen 80;
location /app1/ {
proxy_pass http://127.0.0.1:3000/;
}
location /app2/ {
proxy_pass http://127.0.0.1:3001/;
}
location /app3/ {
proxy_pass http://127.0.0.1:3002/;
}
}
但是,当我尝试访问http://127.0.0.1/app1时,我只得到HTML内容,没有资源/ js / css,因为浏览器试图从http://127.0.0.1/assets而不是http来获取它们。://127.0.0.1/app1/assets。
有没有办法解决这个问题?
添加ActionController::Base.relative_url_root = "/app1"
到您config/environment.rb
的app1的末尾(与其他两个应用类似)。这将使Rails为URL添加适当的前缀。
如果您不想弄乱Rails的配置,则可以强迫Nginx遍历所有资产文件夹,直到找到所需的文件夹为止,如果我没记错的话,可以这样归档:
location /assets/ {
try_files /app1/$uri /app2/$uri /app3/$uri;
}
请注意,您必须为不同应用程序的资产使用不同的文件名。如果您在各处都使用资产管道,因为已经对文件名进行散列处理,那么情况已经如此。
UPD。
您也可以尝试基于“推荐人”的路由:
location /assets/ {
if ($http_referer ~* /app1) {
rewrite ^(.*)$ app1/$1 break;
}
if ($http_referer ~* /app2) {
rewrite ^(.*)$ app2/$1 break;
}
if ($http_referer ~* /app3) {
rewrite ^(.*)$ app3/$1 break;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句