Crossroads » Linux » phpMyAdmin на Nginx

phpMyAdmin на Nginx

  • Dislike
  • +1
  • Like
phpMyAdmin в большинстве дистрибутивов Linux устанавливается из репозитория и при установке конфигурируется. Конфигурация подразумевает наличие сервера Apache или Lighttpd. На Nginx без дополнительных телодвижений phpMyAdmin не работает. По крайней мере мне не известен способ, при котором можно сделать apt install phpmyadmin и работать в phpMyAdmin под Nginx. Но в конфигурации Nginx можно указать расположение phpMyAdmin и тогда всё заработает.

Данная статья актуальна для версии Nginx 1.10. В Nginx периодически меняется синтаксис от версии к версии, так что в последующих версиях нюансы настройки конфигурации могут незначительно отличаться.

В первую очередь нужно определиться в том, где будет использоваться phpMyAdmin. Если на сервере без виртуальных хостов (то есть адрес будет выглядеть как http://1.2.3.4/phpmyadmin), то после установки Nginx, PHP и phpMyAdmin создайте ссылку в webroot Nginx на корневую директорию phpMyAdmin.

sudo ln -s /usr/share/phpmyadmin /var/www/html


В Debian /usr/share/phpmyadmin — путь к phpMyAdmin. В других популярных дистрибутивах должно быть тоже самое. /var/www/html — рабочая директория Nginx. С этим нужно быть внимательнее, так как webroot может быть и здесь: /usr/share/nginx/html. Проверьте файл /etc/nginx/sites-available/default.

Но если на сервере есть виртуальные хоты и вы хотите, чтоб доступ к phpMyAdmin был по доменному имени (например (http://phpmyadmin.example.com), просто создайте виртуальный хост и в качестве webroot для него укажите /usr/share/phpmyadmin — корневую директорию phpMyAdmin. Или ссылку на неё.
Например: корневая директория хота phpmyadmin.example.com у нас по адресу /home/user_name/www/phpmyadmin/public (доступные извне скрипты будут в папке public). Не создавайте папку public, а сделайте вместо неё ссылку на /usr/share/phpmyadmin

sudo ln -s /usr/share/phpmyadmin /home/user_name/www/phpmyadmin/public


Убедитесь что установлен пакет php7.0-fpm (в Debian Stretch PHP версии 7.0) и что модуль mcrypt включен.

sudo phpenmod mcrypt


Конфигурация виртуального хоста в Nginx при этом будет выглядеть примерно так:

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    ssl_certificate /etc/nginx/ssl/phpmyadmin/chain.pem;
    ssl_certificate_key /etc/nginx/ssl/phpmyadmin/key.pem;
    server_name phpmyadmin.example.com;
    charset UTF-8;
    access_log /home/user_name/www/phpmyadmin/logs/nginx-access.log;
    error_log /home/user_name/www/phpmyadmin/logs/nginx-error.log warn;
    
    root /home/user_name/www/phpmyadmin/public;
    index index.html index.php;
	

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

    location ~ /\.ht {
		deny all;
	}
    
    location ~ \.php$ {
            allow 1.2.3.4/32;
            deny all;
	    fastcgi_split_path_info ^(/)(/.*)$;
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            include fastcgi_params;
        }   

    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } 
}


Имеется ввиду, что у нас есть поддержка IPv6, всё это доступно по https и установлен принудительный редирект с http на https.
Настройте всё это под себя. Укажите свой путь к логам, или совсем уберите эти строки.

allow 1.2.3.4/32;
deny all;


Имеется ввиду, что разрешён доступ только с одного IP адреса (1.2.3.4). Все остальные блокируются. Укажите здесь свой внешний IP, или подсеть, или уберите эти строки, чтобы доступ был возможен с любого адреса. В этом случае имеет смысл придумать более сложное имя хоста и разместить ссылку на phpMyAdmin глубже, чем корневая директория хоста. Чтоб адрес выглядел примерно так: https://ghg45lf3j-hidden-host.exaple.com/kgfnlt4f06kh-hidden-folder Тогда при обращении к https://ghg45lf3j.exaple.com будет вылетать 403-я ошибка и если вы не совсем параноик, то этого достаточно, так как сам phpMyAdmin и так запаролен. Но если вам кажется, что это не совсем надёжно, то можно запаролить саму директорию. Для чего придумайте и зашифруйте пароль:

openssl passwd


Вам будет предложено создать пароль. В конечной выдаче вы увидите зашифрованную его версию. Запишите итоговую версию в файл в формате username:password.

Пример: Имя пользователя пусть будет user_name и команда openssl passwd нам выдала R7jl.LIPap.5l

sudo nano /etc/nginx/pma_pass


И содержимое файла pma_pass должно быть следующим:

user_name:R7jl.LIPap.5l


В конфигурацию хоста в Nginx добавьте следующее:

location /kgfnlt4f06kh-hidden-folder {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/pma_pass;
    }


При обращении к адресу https://ghg45lf3j-hidden-host.exaple.com/kgfnlt4f06kh-hidden-folder будет всплывать окно с заголовком Admin Login куда следует ввести имя пользователя и незашифрованный пароль.

Перезагружаем Nginx

sudo service nginx restart


Таким образом, если всё сделать правильно, то phpMyAdmin отлично работает в связке с Nginx.
Like Dislike

___
Tatyana K.



Tags: Linux, Nginx, PHP


 
  • Creative Commons Licence
  • Norton Safeweb
  • Website Uptime Monitoring By ServiceUptime.com