我做了一些广泛的搜索,并且有很多关于 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。任何见解都会很棒。