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.
В 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
Убедитесь что установлен пакет php7.0-fpm (в Debian Stretch PHP версии 7.0) и что модуль mcrypt включен.
Конфигурация виртуального хоста в Nginx при этом будет выглядеть примерно так:
Имеется ввиду, что у нас есть поддержка IPv6, всё это доступно по https и установлен принудительный редирект с http на https.
Настройте всё это под себя. Укажите свой путь к логам, или совсем уберите эти строки.
Имеется ввиду, что разрешён доступ только с одного IP адреса (1.2.3.4). Все остальные блокируются. Укажите здесь свой внешний IP, или подсеть, или уберите эти строки, чтобы доступ был возможен с любого адреса. В этом случае имеет смысл придумать более сложное имя хоста и разместить ссылку на phpMyAdmin глубже, чем корневая директория хоста. Чтоб адрес выглядел примерно так: https://ghg45lf3j-hidden-host.exaple.com/kgfnlt4f06kh-hidden-folder Тогда при обращении к https://ghg45lf3j.exaple.com будет вылетать 403-я ошибка и если вы не совсем параноик, то этого достаточно, так как сам phpMyAdmin и так запаролен. Но если вам кажется, что это не совсем надёжно, то можно запаролить саму директорию. Для чего придумайте и зашифруйте пароль:
Вам будет предложено создать пароль. В конечной выдаче вы увидите зашифрованную его версию. Запишите итоговую версию в файл в формате username:password.
Пример: Имя пользователя пусть будет user_name и команда openssl passwd нам выдала R7jl.LIPap.5l
И содержимое файла pma_pass должно быть следующим:
В конфигурацию хоста в Nginx добавьте следующее:
При обращении к адресу https://ghg45lf3j-hidden-host.exaple.com/kgfnlt4f06kh-hidden-folder будет всплывать окно с заголовком Admin Login куда следует ввести имя пользователя и незашифрованный пароль.
Перезагружаем Nginx
Таким образом, если всё сделать правильно, то phpMyAdmin отлично работает в связке с Nginx.
Данная статья актуальна для версии 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.