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