faraday
faraday

Reputation: 51

How to change the access url of official phpmyadmin docker image to http://localhost/phpmyadmin?

I downloaded official phpmyadmin docker image (https://store.docker.com/community/images/phpmyadmin/phpmyadmin). Everything is OK.

Just one problem for me: the access url is http://localhost and I wan it to become http://localhost/phpmyadmin.

I did some research and found the key is in /etc/nginx.conf which is called by supervisord. Here's the snippet in /etc/nginx.conf:

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;
    }

}

Does anyone know how to modify this nginx.conf to make the access url become http://localhost/phpmyadmin?

Upvotes: 5

Views: 4006

Answers (2)

laimison
laimison

Reputation: 1698

I would not recommend to solve this issue in Nginx. It could be error prone, especially if someone does reverse proxy.


It seems official phpmyadmin image is based on Apache.

Unfortunately, as of 2021 phpmyadmin cannot be served from /phpmyadmin

So you have to build additional layer by yourself:

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

Or you can use image which does same for you:

laimison/phpmyadmin:latest

Off topic: if someone asks what configuration is sufficient in reverse proxy:

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

That's it.

Upvotes: 5

VonC
VonC

Reputation: 1323753

You could try and simply change location / { with an alias directive:

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

That would serve the same root files, but only for the url http://localhost/phpmyadmin

Regarding docker, it means you need to docker build your own image, with a Dockerfile starting with FROM phpmyadmin/phpmyadmin:4.6, and COPYing a modified version of nginx.conf, a bit like this 3bdigital/docker-phpmyadmin repo.


The OP faraday chose the simpler approach of:

build(ing) a docker image myself with ubuntu as base image and phpmyadmin installed.
It works under http://localhost/phpmyadmin after installation.

Upvotes: 1

Related Questions