使用橡胶我用resque和redis硫化我现有的项目。我把它全部部署了。点击web_tools索引显示了Resque链接。但点击它给了我一个404。
我认为nginx不知道如何处理“/ resque”所以我添加了文件config/rubber/role/web_tools/resque-nginx.conf
:
<% if resque_host = rubber_instances.for_role('resque_web').first %>
<%
@path = "/etc/nginx/rubber/tools/resque.conf"
%>
location /resque
{
proxy_pass http://<%= resque_host.full_name %>:<%= rubber_env.resque_web_port %>;
}
<% end %>
基本上从同一目录复制haproxy-nginx.conf文件。
我的第一个问题是 - 为什么我需要这样做?硫化是否应该这样做,还是我做错了什么?
继续前进。这个nginx配置不起作用。但是我得到了一点点,至少我现在正在点击WEBrick服务器。我有一个页面说:
Sinatra doesn’t know this ditty.
所以我改变了我的配置,认为Resque的WEBrick服务器不知道什么/ resque是:
location /resque
{
rewrite ^/resque/(.*) /$1 break;
proxy_pass http://<%= resque_host.full_name %>:<%= rubber_env.resque_web_port %>;
}
这是有效的,但只有当我手动转到https://myhost.com/resque/overview
时(橡胶添加到工具索引页面的链接只是/resque
)。但是resque网页上的所有其他链接(包括任何CSS和.js文件)现在都被破坏了,因为这些链接不以resque/
开头。换句话说,Working的链接仅为/working
,但nginx需要/resque/working
知道如何处理它。
我尝试过其他一些事情,例如摆脱重写并更改索引页面以指向resque/overview
,但这仍然让我“Sinatra不知道这个小曲”页面。
我试过了:
location /resque
{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://<%= resque_host.full_name %>:<%= rubber_env.resque_web_port %>;
}
当我点击/resque
或/resque/overview
时,我收到了“Sinatra ... ditty”页面。
然后我重新加入了重写:
location /resque
{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
rewrite ^/resque/(.*) /$1 break;
proxy_pass http://<%= resque_host.full_name %>:<%= rubber_env.resque_web_port %>;
}
这与没有所有代理呼叫的结果相同。
有谁知道如何让nginx和Resque网络服务器很好地协同工作?
答案 0 :(得分:3)
是的,rubber vulcanize resque
应该注意这一点,但显然没有人写过Nginx代理配置。
你第一次尝试Nginx几乎是正确的做法。
CSS,图像和链接被破坏的原因是因为resque-web正在查找相对于resque-web应用程序根目录的所有内容。您需要更改resque-web Rack文件(/config/resque-web.ru)以在/ resque的子目录中启动应用程序。这样一切都将是相对的(/ resque / overview等)并且没问题。
我昨天提交了一个pull request来为将来的用户解决此问题,但您可以将这些更改应用到您的项目中,一切都会对您有用。
如果这不起作用,请告诉我。