nginx rewrite / proxy_pass问题

时间:2012-07-28 20:30:20

标签: ruby-on-rails-3 url-rewriting nginx passenger proxypass

我做了一些广泛的搜索,有很多关于nginx proxy_pass问题的帖子。我已经尝试将我的问题修改为其中的一些问题而没有任何进展,所以这里就是这样。

我正在将基于php的网站重写为Rails。原始网站本身是简单的2页表格。它使用Apache中的mod_rewrite / mod_proxy解决方案来掩盖网站在表单发布后继续的位置。

php网站有3个目录,其中只有3个.htaccess文件,为简单起见,我们可以调用目录a,b,c。每个.htaccess文件包含以下内容

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ http://www.domainbeingpostedto.com/actual_letter_directory/$1 [P,L]
</IfModule>

我不是阿帕奇专家,但我很确定[P,L]与proxy_pass相同并且在nginx中是最后的吗?

我正在尝试为使用passenger和nginx转换为rails cms的php网站重写此解决方案。

我到目前为止的解决方案无效,因为rails应用程序只返回404找不到页面,所以我知道proxy_pass没有将post请求转发给其他服务器。 我的nginx.conf文件包含:

server {
    listen 80;
    server_name newtestappdomain.com;

    location /a/ {
        proxy_pass http://www.domaintoacceptdatapostandbemasked.com/;
        #rewrite ^/a/(.*)$ http://www.domaintoacceptdatapostandbemaskedcom/a/ last;
    }

    location /b/ {
        proxy_pass http://www.domaintoacceptdatapostandbemasked.com/;
        #rewrite ^/b/(.*)$ http://www.domaintoacceptdatapostandbemasked.com/b/ last;
    }

    location /c/ {
        proxy_pass http://www.domaintoacceptdatapostandbemasked.com/;
        #rewrite ^/c/(.*)$ http://www.domaintoacceptdatapostandbemasked.com/c/ last;

    }

    root /home/deploy/testapp/public;   # <--- be sure to point to 'public'!
    passenger_enabled on;

}

如果我取消注释重写规则,它只会反弹到我试图掩盖的其他网站。我做了一个标题跟踪来验证。没有看到任何帖子到其他域名。我有点难过,因为我对nginx很新,不知道该怎么做。 Apache与rails和mod_rewrite / mod_proxy不兼容。任何见解都会很棒。

1 个答案:

答案 0 :(得分:1)

proxy_pass http://www.domaintoacceptdatapostandbemasked.com/;

此规则是对“/”位置的代理请求(在proxy_pass uri中引用斜杠)(a /,b /和c /将丢失)。

只使用uri而不使用斜杠,它应该完美无缺

proxy_pass http://www.domaintoacceptdatapostandbemasked.com;

如果您需要更改uri,可以在proxy_pass之前使用rewrite。 例如:

location /a/ {
    rewrite /(a/.*)$ /actual_letter_directory/$1 break; # as from you .htaccess example
}