Change phpMyAdmin port from 80 to another number
Solution 1:
Just to be clear, this is not a setting of PhpMyAdmin, it is a setting of the configuration of Apache2, and we need to create new VirtualHost for this purpose.
1. Understanding of the default configuration of PhpMyAdmin. By default (within Ubuntu 16.04) PhpMyAdmin is included (and enabled) into the Apache's configuration (for all VirtualHosts!) through this additional configuration file:
/etc/apache2/conf-enabled/phpmyadmin.conf
This file is a symbolic link to the file /etc/apache2/conf-available/phpmyadmin.conf
, which is a symbolic link to the file /etc/phpmyadmin/apache.conf
, which will be used in the next step.
2. Create new VirtualHost configuration file. Let's call it phpmyadmin.conf
and create it by nano
(or you can use your favorite text editor):
sudo nano /etc/apache2/sites-available/phpmyadmin.conf
The content of this file should looks like:
Listen 99
<VirtualHost *:99>
ServerName localhost
<Directory /usr/share/phpmyadmin>
AllowOverride None
Require all granted
</Directory>
DocumentRoot /usr/share/phpmyadmin
Include /etc/phpmyadmin/apache.conf
ErrorLog ${APACHE_LOG_DIR}/phpmyadmin.error.log
CustomLog ${APACHE_LOG_DIR}/phpmyadmin.access.log combined
</VirtualHost>
Where:
Listen 99
instructs Apache2 to listen on port99
. Like @L.D.James says you can put this directive in/etc/apache2/ports.conf
or you can leave it here;<VirtualHost *:99>...</VirtualHost>
defines a VirtualHost which will handle the requests form all interfaces (*
) on port:99
.ServerName localhost
this directive is optional and can be customised according to your needs. (Usually there haveServerName
set on the Server level - in/etc/apache2/apache2.conf
);<Directory /usr/share/phpmyadmin>...</Directory>
this directive is optional because the access permissions for/usr/share/
are usually set in/etc/apache2/apache2.conf
. But you can add specific rules here, for example you canSet Up Password Authentication
;DocumentRoot /usr/share/phpmyadmin
this directive sets/usr/share/phpmyadmin
as directory that forms the main document tree visible from the web, for the current VirtualHost;Include /etc/phpmyadmin/apache.conf
this directive includes the default phpMyAdmin's configuration into Apache's configuration. Thus/etc/phpmyadmin/apache.conf
will be included only for the current VirtualHost! Instead of this directive you can copy/paste the content of/etc/phpmyadmin/apache.conf
in this place.
3. Switch Apache's configuration and restart it.
sudo a2disconf phpmyadmin
sudo a2ensite phpmyadmin
sudo systemctl restart apache2.service
Where:
-
a2disconf phpmyadmin
will disable the default phpMyAdmin's configuration, described in 1. -
a2ensite phpmyadmin
will enable the new VirtualHost, described in 2.
!!. Edit /etc/phpmyadmin/apache.conf
and comment (#
) the first Alias
directive like thath:
#Alias /phpmyadmin /usr/share/phpmyadmin
This step is optional, but otherwise http://localhost:99
and http://localhost:99/phpmyadmin
will provide identical result, so I suppose we do not need that :)
!!. If you want this new VirtualHost to be accessible from the outside don't forget to add port 99
into your firewall's rules. If you use UFW you can do that by this command:
sudo ufw allow 99/tcp
With iptables you can do that by this command:
sudo iptables -A INPUT -p tcp -m tcp --dport 99 -j ACCEPT
Solution 2:
Adding access via port 99 is quick and easy
Add the port 99 to your Apache2 configuration. Edit /etc/apache2/ports.conf
. Add the directive Listen 99
:
# If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default.conf Listen 80 Listen 99 <IfModule ssl_module> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
This adds port 99 to the available access. To disable port 80 where you can only have access via port 99, comment out or remove the Listen 80
from the configuration.
Disabling the default port is a little more detailed
In most circumstance, disabling the default port 80 isn't necessary.
If you have other sites that you need to have access to port 80 and the Listen
directive to that Virtualhost.
Alternatively, you could restrict Phpmyadmin to only one specific port by creating a Phpmyadmin version host and use the Listen 99 directive to that virtual host.
Details for creating a virtual host for Apache2 can be found here:
Make a symbolic link to /usr/share/phpmyadmin
the virtualhost document root
.