Nginx 反向代理设置

Nginx Reverse Proxy settings

我正在设置包含

的服务器配置

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

Memcache 管理页面出现得恰到好处。控制台日志的检查现在显示错误。然后我继续单击 Add Another Key link,这会弹出 phpMemcachedAdmin 编辑表单。当我检查此表单的代码时,我看到

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

现在,如果我输入键名、值并单击表单中的添加按钮,浏览器将尝试 post 到

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

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

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

一路走来,/admin 位被砍掉了。我怀疑这是因为无效的 Nginx 反向代理设置。但是,我是新手,所以我不知道该如何解决这个问题。如果有任何帮助,我将不胜感激。

查看了redis admin的页面,发现它从服务器端读取请求URI,这意味着它将在URL中包含前导斜线'/'用于post形式:

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

您删除了 php 中的前导斜杠,这样您就可以 post 在通过反向代理访问时更正地址。但是,作为解决方法,您可以在 nginx 中重写 URL 来修复它。

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

将上面的重写规则添加到您在“/”部分的设置中,看看它是否有效。

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