
Данная статья актуальна для версии 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.
___
Tatyana K.
Tatyana K.