【问题标题】:How to change the access url of official phpmyadmin docker image to http://localhost/phpmyadmin?如何将官方phpmyadmin docker镜像的访问url改为http://localhost/phpmyadmin?
【发布时间】:2017-06-21 12:22:18
【问题描述】:

我下载了官方的 phpmyadmin docker 镜像 (https://store.docker.com/community/images/phpmyadmin/phpmyadmin)。一切都好。

对我来说只有一个问题:访问网址是http://localhost,我希望它变成http://localhost/phpmyadmin

我做了一些研究,发现密钥在由 supervisord 调用的/etc/nginx.conf。这是/etc/nginx.conf中的sn-p:

server {
    listen 80 default_server;
    server_name _;

    root /www;

    index index.php index.html index.htm;

    charset utf-8;

    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
       return 405;
    }

    location / {
        try_files $uri $uri/ =404;
    }

    location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 365d;
    }

    location ~ \.php$ {
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/var/run/php/php-fpm.sock;

        # regex to split $uri to $fastcgi_script_name and $fastcgi_path
        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        # Check that the PHP script exists before passing it
        try_files $fastcgi_script_name =404;

        # Bypass the fact that try_files resets $fastcgi_path_info
        # see: https://trac.nginx.org/nginx/ticket/321
        set $path_info $fastcgi_path_info;
        fastcgi_param PATH_INFO $path_info;

        fastcgi_read_timeout 600;
        fastcgi_buffering off;

        fastcgi_index index.php;

        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;

        fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;
        fastcgi_param  REQUEST_SCHEME     $scheme;
        fastcgi_param  HTTPS              $https if_not_empty;

        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx;

        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;

        # PHP only, required if PHP was built with --enable-force-cgi-redirect
        fastcgi_param  REDIRECT_STATUS    200;
    }

    location ~ /\. {
        deny  all;
    }

    location ~ /(libraries|templates) {
        deny all;
    }

}

有谁知道如何修改这个nginx.conf,使访问url变成http://localhost/phpmyadmin

【问题讨论】:

    标签: nginx docker phpmyadmin


    【解决方案1】:

    我不建议在 Nginx 中解决这个问题。这可能很容易出错,尤其是在有人进行反向代理的情况下。


    好像官方的 phpmyadmin 镜像是基于 Apache 的。

    不幸的是,从 2021 年起,phpmyadmin 无法从 /phpmyadmin 提供服务

    所以你必须自己构建额外的层:

    FROM phpmyadmin
    
    RUN mv /var/www/html /var/www/phpmyadmin
    RUN mkdir -p /var/www/html
    RUN mv /var/www/phpmyadmin /var/www/html/phpmyadmin
    

    或者你可以使用对你做同样事情的图片:

    laimison/phpmyadmin:latest
    

    题外话:如果有人问反向代理什么配置就足够了:

        location /phpmyadmin {
          proxy_pass http://pma:80;
          proxy_set_header Host $http_host;
          break;
        }
    

    就是这样。

    【讨论】:

      【解决方案2】:

      您可以尝试简单地将location / { 更改为alias directive

      location /phpmyadmin/ {
        alias /www;
        ...
      

      这将提供相同的根文件,但仅适用于 url http://localhost/phpmyadmin

      关于docker,意思是你需要docker构建自己的镜像,Dockerfile以FROM phpmyadmin/phpmyadmin:4.6开头,并复制nginx.conf的修改版本,有点像3bdigital/docker-phpmyadmin这个repo。


      OP faraday 选择了更简单的方法:

      以 ubuntu 作为基础镜像并安装 phpmyadmin 自己构建(ing)一个 docker 镜像。
      安装后在http://localhost/phpmyadmin下工作。

      【讨论】:

      • 不起作用。访问 url 仍然是localhost。而且我还尝试了其他一些尝试,将位置修改为其他格式,但没有运气。我对 nginx 很陌生......
      • @faraday 我忘了添加别名。另见stackoverflow.com/a/19675956/6309
      • 还是不行。使用别名,当我访问 localhost/phpmyadmin 时,我得到“403 禁止”。
      • @faraday 奇怪:stackoverflow.com/a/21401899/6309 表明它应该可以工作,但也许你只是有一个 chmod / chown 访问权限问题 (stackoverflow.com/a/20182383/6309)。另见stackoverflow.com/a/35278268/6309
      • 在为这个问题苦苦挣扎之后,我决定放弃。我用 ubuntu 作为基础镜像并安装了 phpmyadmin 自己构建了一个 docker 镜像。安装后在 ttp://localhost/phpmyadmin 下运行。仍然非常感谢您的帮助。
      猜你喜欢
      • 2017-03-02
      • 2020-10-16
      • 1970-01-01
      • 2016-03-14
      • 2016-05-30
      • 2015-11-08
      • 2014-10-03
      • 1970-01-01
      相关资源
      最近更新 更多