Nginx反向代理设置

时间:2015-03-26 16:24:08

标签: nginx reverse-proxy phpredis

我正在设置包含

的服务器配置
  • 运行Nginx的前端服务器。称之为example.com
  • 另一台服务器,也运行Nginx,(在同一个网络上,可以通过内部IP访问,比如说10.118.10.9)运行 - 除其他外 - phpRedisAdmin。
  • 前端服务器具有反向代理配置,如下所示

    位置^〜/ admin / {  proxy_pass https://10.118.0.9:8085/; }

现在我浏览“https://example.com/admin/redisadmin/index.php'

Memcache管理页面恰到好处。对控制台日志的检查现在显示错误。然后,我接着点击添加另一个密钥链接,该链接将显示phpMemcachedAdmin编辑表单。当我检查这个表单的代码时,我看到了

<form action="/redisadmin/edit.php?s=0" method="post">

现在,如果我输入一个键名,一个值,然后点击浏览器尝试发布到的表单中的“添加”按钮

https://example.com/redisadmin/edit.php?s=0
由于表单的操作URL实际上应该是

,因此

会立即抛出404

<form action="/admin/redisadmin/edit.php?s=0" method="post">

一路上/admin位被砍掉了。我怀疑这是无效的Nginx反向代理设置。但是,我是一个新手,所以我不知道如何纠正这个问题。我非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

检查了redis admin的页面,发现它从服务器端读取了请求URI,这意味着它将包含前导斜杠&#39; /&#39;在帖子表格的网址中:

<form action="<?php echo format_html($_SERVER['REQUEST_URI'])?>" method="post">

您可以删除php中的前导斜杠,以便在通过反向代理访问时发布到正确的地址。但是,作为一种解决方法,您可以在nginx中重写URL来修复它。

location / {
    rewrite ^/redisadmin/(.*)$ /admin/redisadmin/$1 last;

将上述重写规则添加到&#39; /&#39;中的设置这是否有效。

答案 1 :(得分:0)

正如@Johnnie Zhang所指出的那样,问题的根源在于领导/导致后期行动被视为绝对路径。但是,经过一番调查后我得出结论,虽然phpredisadmin在作为独立的Redis Web GUI使用时是一个很好的全方位选项,但是当通过反向代理使用时,它可能会造成太多问题。