我想使用nginx来映射端口80上的所有rails应用程序.目前,我在端口3000 3001和3002上运行了3个rails应用程序,我想在端口80上使用nginx来映射它们:http://127.0.0.1/app1 = 127.0.0.1:3000http://127.0.0.1/app2 =...
我想使用nginx来映射端口80上的所有rails应用程序.
目前,我在端口3000 3001和3002上运行了3个rails应用程序,我想在端口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内容,没有assets / js / css,因为浏览器试图从http://127.0.0.1/assets而不是http://127.0.0.1/app1/assets获取它们.
有没有办法来解决这个问题?
解决方法:
将ActionController :: Base.relative_url_root =“/ app1”添加到app1的config / environment.rb的末尾(类似于其他两个应用程序).这将使Rails为URL添加正确的前缀.
如果你不想搞乱Rails配置,你可能会迫使Nginx遍历你所有的资产文件夹,直到它找到它需要的那个,如果我没有弄错,它可以像这样存档:
location /assets/ {
try_files /app1/$uri /app2/$uri /app3/$uri;
}
请注意,您必须为不同应用的资产设置不同的文件名.如果您在任何地方都使用资产管道,那就已经是这样了,因为它会散列文件名.
UPD.
您还可以尝试基于“Referer”的路由:
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;
}
}
本文标题为:ruby-on-rails – 使用nginx映射rails应用程序
基础教程推荐
- R语言中corrplot标题居中及eps格式输出 2022-12-08
- Swift实现表格视图单元格多选 2023-07-08
- 汇编实现的memcpy和memset的方法 2023-07-06
- swift中自定义正则表达式运算符=~详解 2023-07-06
- Swift使用表格组件实现单列表 2023-07-08
- R语言数据结构之矩阵、数组与数据框详解 2022-12-18
- 用汇编语言实现从1加到100的方法(1+2+...+100) 2023-07-06
- 第02部分 Go开发学习 第3章 计算机组成原理快速扫盲 2023-09-05
- R语言学习ggplot2绘制统计图形包全面详解 2022-12-08
- 详解Golang中NewTimer计时器的底层实现原理 2023-07-25
