0

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

我正在将一个基于 php 的网站重写为 Rails。原始网站本身是带有表单的简单 2 页。它使用 Apache 中的 mod_rewrite / mod_proxy 解决方案来屏蔽表单发布后站点继续的 url。

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>

我不是 apache 专家,但我很确定 [P,L] 与 proxy_pass 相同并且在 nginx 中是最后一个?

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

到目前为止我的解决方案不起作用,因为 rails 应用程序只返回一个 404 页面未找到,所以我知道 proxy_pass 没有将发布请求转发到另一台服务器。我的 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。任何见解都会很棒。

4

1 回答 1

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
}
于 2012-07-29T05:39:21.657 回答