Reputation: 51
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
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
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 underhttp://localhost/phpmyadmin
after installation.
Upvotes: 1