我安装了phpMyAdmin docker image并使用
运行它# docker run --name phpmyadmin -d --link mariadb:db -p 8081:80 -e PMA_ABSOLUTE_URI=http://servm3/pma --restart unless-stopped phpmyadmin/phpmyadmin
访问http://servm3:8081工作正常。变量PMA_ABSOLUTE_URI用于反向代理,如docker page所示。
然后我设置nginx(在本地安装,而不是在docker中)充当反向代理(为guacamole等其他几个应用程序工作)。
在我的nginx.conf中,我有:
location /pma/ {
proxy_pass http://localhost:8081/;
proxy_buffering off;
}
访问http://servm3/pma会在浏览器标签上显示favicon,但只显示空白页而不是登录页面。删除前面的" /"并重新启动nginx只能得到404。
# docker logs phpmyadmin
除了php和nginx服务启动信息之外,没有显示任何内容,与phpmyadmin无关。
本地nginx访问日志显示几个304和404代码,大约200个,错误日志不存在。可以找到详细日志here on pastebin。
我希望有人能够告诉我如何让nginx作为phpMyAdmin docker容器的反向代理工作。
如果遗失了一些重要信息,请告知我们。
答案 0 :(得分:3)
请务必加入重写:
location ~ \/pma {
rewrite ^/pma(/.*)$ $1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://localhost:8081;
}
您还需要在docker-compose.yml中设置PMA_ABSOLUTE_URI环境变量:
PMA_ABSOLUTE_URI: https://yourdomain.com/pma/
如果您运行的是docker phpmyadmin的4.6.5或更高版本,则应该设置。要更新你可以使用docker pull来拉下最新的。即。
docker pull phpmyadmin/phpmyadmin
答案 1 :(得分:0)
只需删除/pma/
的结尾反斜杠:
location /pma {
proxy_pass http://localhost:8081/;
proxy_buffering off;
}
有了它,浏览器会将其视为目录并相应地请求资产,这对于PMA来说是意料之外的。
答案 2 :(得分:0)
没有什么可以做的。问题是phpmyadmin正在从本地主机提供其页面,即使nginx将访问从http://servm3/pma
转换为http://localhost
,HTML内容中的所有链接也会忽略最新内容,即使它们是相对的,它们也不会这样做。不要考虑/pma
部分。因此,您看到的所有404错误都是来自HTML内的资源,这些资源被称为诸如styles.css
之类的相对链接,当被引用/单击时,它们变成http://servm3/styles.css
,在服务器中不存在
不幸的是,反向代理在标头级别起作用,因此即使反向代理能够快速更改诸如Location
之类的标头,它们也不会影响HTML内容,因此也带来了问题。有一些变通办法涉及即时更改HTML代码,但是它们不容易,至多不可靠,并且会严重影响性能,因此,唯一可行的解决方案是网站明确支持某种基本路径设置。在这种情况下,解决方案将是phpmyadmin Docker映像允许使用docker-compose.yaml
中的环境变量设置基本路径,而不是默认为root。
与此同时,另一种解决方法是不使用相对路径,而是使用子域。如果您可以控制servm3
的DNS设置,则可以使用类似phpmyadmin.servm3
和proxy_pass这样的东西。
答案 3 :(得分:0)
不知道您是否还在寻找答案。
只需从 answer 关注此 Joshua Ostrom。
问题是我不知道为什么它的行为不像它应该的那样,但是你需要像 https://yourdomain.com/pma/index.php
这样在最后添加 index.php。
我遇到了同样的问题