所以我让Nginx使用以下配置代理rails应用程序
location ^~ /admin {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://admin/;
}
会影响将所有请求重新写入http://localhost/admin/XXX/YYY/ZZZ => http://admin/XXX/YYY/ZZZ
所以接下来我遇到了资源网址没有指向代理应用的问题,所以config.relative_url_root = '/admin'
做了伎俩
下一个问题是link_to生成的每个链接都返回基于/
而不是/admin
的链接,我相信config.relative_url_root
会改变...现在我有点正确,如果我转到rails console
然后include Rails.application.routes.url_helpers
然后拨打说root_path
或management_path
,我会收到/admin
和/admin/management
。完美!
现在这是我感到困惑的地方。我视图中生成的所有路由都忽略config.relative_url_root
设置的前缀...
为什么此配置选项在控制台环境中工作,但在视图环境中不工作?
config.relative_url_root位于我的application.rb
中 Rails 5.1.5
答案 0 :(得分:0)
这个决议并不是我所希望的,但与此同时它也有效。
/config.ru
map ENV['RAILS_RELATIVE_URL_ROOT'] || "/" do
run Rails.application
end
/nginx.conf
location ^~ /admin {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://HC_admin/admin;
}
所有改变的是,应用程序本身现在认为它正在/admin
或您设置RAILS_RELATIVE_URL_ROOT
的任何内容。在我看来,这会破坏你的应用程序部分分离的目的,因为你仍然需要配置它的安装位置。
在要点here
中找到了一些说明