Dro*_*dOS 4 reverse-proxy nginx adminer
我正在运行Nginx,它被配置为允许我访问另一个可用作反向代理的服务器上的多个资源.例如
main server:http://example.com
slave: http://example.com/slave
adminer on slave: http://example.com/slave/admin/adminer.php
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都好.我在Adminer中输入我的数据库用户名和密码,麻烦就开始了.检查Adminer登录后返回的标题我注意到它发回了一个
Location:/admin/adminer.php?username=user
Run Code Online (Sandbox Code Playgroud)
头.这是麻烦的根源.在我的浏览器中,当然,这被解释为相对于当前服务器而不是反向代理的含义.我找到了一个hainer the adminer代码,找到了一个有一个Location头的地方,但是它刚刚停止了它的轨道.
我怎样才能防止这种情况发生?我考虑在Nginx上运行一个Lua脚本来检查标题并替换它,但它让我感到震惊,即使我让它工作,我也会让我的服务器做大量不必要的工作.
我非常感谢任何帮助.
编辑
在探讨了这个问题之后,我开始认为,顾客可能没有做太多错误.它实际上使用$ _SERVER ['REQUEST_URI']值来构造位置标头,而这恰好很少/admin/adminer.php.我注意到引用,$ _SERVER ['HTTP_REFERRER']具有完整的原始请求路径http://example.com/slave/admin/adminer.php.所以解决方案是发送回位置/slave/admin/adminer.php?username=user.
简单?好吧,问题是我的设置/slave/会变化,所以我需要在代码中解决它.我可以用一个PHP的地方很容易地做到这一点,但我想知道...肯定有一个更容易的选择由Nginx提供?
我或许应该提一下
我有同样的问题,这是我解决它的方式:
upstream adminer {
server adminer;
}
server {
listen 80;
location /adminer/ {
proxy_set_header X-Forwarded-Prefix "/adminer";
proxy_pass http://adminer/;
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,我能想到的最简单的解决方法是修补管理员 PHP 脚本。我只是$_SERVER["REQUEST_URI"]在开始时进行了硬编码adminer.php,如下所示:
--- adminer.php 2015-10-22 12:31:18.549068888 +0300
+++ adminer.php 2015-10-22 12:31:40.097069554 +0300
@@ -1,4 +1,5 @@
<?php
+$_SERVER["REQUEST_URI"] = "/slave/admin/adminer.php";
/** Adminer - Compact database management
* @link http://www.adminer.org/
* @author Jakub Vrana, http://www.vrana.cz/
Run Code Online (Sandbox Code Playgroud)
如果将上述内容放入名为的文件中,fix则只需
patch < /path/to/fix在包含的目录中运行adminer.php即可获得正确的工作版本。如果需要,运行patch -R < /path/to/fix将恢复原始行为。
要了解补丁文件的结构,请阅读此 SO 线程。
| 归档时间: |
|
| 查看次数: |
1212 次 |
| 最近记录: |