1

我正在设置一个服务器配置,其中包括

  • 运行 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 Admin 页面显示得恰到好处。检查控制台日志现在显示错误。然后我继续单击“添加另一个密钥”链接,该链接会打开 phpMemcachedAdmin 编辑表单。当我检查此表单的代码时,我看到

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

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

https://example.com/redisadmin/edit.php?s=0

它会立即抛出 404,因为表单的操作 URL 实际上应该是

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

在途中的某个地方,/admin钻头被砍掉了。我怀疑这归因于无效的 Nginx 反向代理设置。但是,我是一个新手,所以我不知道我应该如何纠正这个问题。我将不胜感激任何帮助。

4

2 回答 2

1

检查了 redis admin 的页面,发现它从服务器端读取请求 URI,这意味着它将在 post 表单的 URL 中包含前导斜杠“/”:

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

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

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

将上述重写规则添加到'/'部分的设置中,看看它是否有效。

于 2015-03-28T03:32:08.790 回答
0

正如@Johnnie Zhang 所指出的,这里问题的根源是前导 / 导致 post 操作被视为绝对路径。然而,经过一番调查后,我得出结论,虽然 phpredisadmin 在用作独立的 Redis Web GUI 时是一个出色的全能选项,但在通过反向代理使用时可能会带来太多问题。

于 2015-03-28T04:58:22.437 回答