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 port 99. 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 have ServerName 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 can Set 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

&ltIfModule ssl_module&gt
    Listen 443
&lt/IfModule&gt

&ltIfModule mod_gnutls.c&gt
    Listen 443
&lt/IfModule&gt

# 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.