Nginx 反向代理设置
Nginx Reverse Proxy settings
我正在设置包含
的服务器配置
- 一个前端服务器运行 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 管理页面出现得恰到好处。控制台日志的检查现在显示错误。然后我继续单击 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 时是一个优秀的全能选项,但在通过反向代理使用时很容易造成太多问题。
我正在设置包含
的服务器配置- 一个前端服务器运行 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 管理页面出现得恰到好处。控制台日志的检查现在显示错误。然后我继续单击 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 时是一个优秀的全能选项,但在通过反向代理使用时很容易造成太多问题。