使用 Rubber,我使用 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
(Rubber 添加到您的工具索引页面的链接只是/resque
)。但是 resque 网页上的所有其他链接(包括任何 CSS 和 .js 文件)现在都已损坏,因为这些链接没有以resque/
. 换句话说,Working 的链接只是,/working
但它需要/resque/working
让 nginx 知道如何处理它。
我已经尝试过其他方法,例如摆脱重写并更改索引页面指向,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
或时,我得到“Sinatra...ditty”页面/resque/overview
。
然后我将重写添加回:
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 Web 服务器很好地协同工作?