2016-05-24 5 views
5

Я настраиваю phpMyAdmin с nginx. Я могу посетить phpMyAdmin по адресу http://localhost/phpmyadmin. Однако, когда я вошел в систему, URL-адрес перенаправляется на http://localhost/sql.php вместо http://localhost/phpmyadmin/sql.php.Nginx с неправильным направлением phpmyadmin при входе

У меня phpMyAdmin symlinked в моей/var/www/html/папке.

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

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 

    # SSL configuration 
    # 
    # listen 443 ssl default_server; 
    # listen [::]:443 ssl default_server; 
    # 
    # Note: You should disable gzip for SSL traffic. 
    # See: https://bugs.debian.org/773332 
    # 
    # Read up on ssl_ciphers to ensure a secure configuration. 
    # See: https://bugs.debian.org/765782 
    # 
    # Self signed certs generated by the ssl-cert package 
    # Don't use them in a production server! 
    # 
    # include snippets/snakeoil.conf; 

    root /var/www/html; 

    # Add index.php to the list if you are using PHP 
    index index.html index.htm index.nginx-debian.html index.php; 

    server_name _; 

    location/{ 
     # First attempt to serve request as file, then 
     # as directory, then fall back to displaying a 404. 
     try_files $uri $uri/ =404; 
    } 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
    # 
    location ~ \.php$ { 
     include /etc/nginx/snippets/fastcgi-php.conf; 
     # With php7.0-fpm: 
     fastcgi_pass unix:/run/php/php7.0-fpm.sock; 
     include fastcgi_params; 
    } 

    # deny access to .htaccess files, if Apache's document root 
    # concurs with nginx's one 
    # 
    #location ~ /\.ht { 
    # deny all; 
    #} 
} 

ответ

12

У меня на самом деле было так много решений на StackOverflow сегодня и, к сожалению, ни одна из них не работает, а некоторые даже принесли некоторые ужасные рекомендации. Что страшно, сколько я натолкнулся на то, что были отмечены как ответы.

Я только что сделал новый сервер LEMP Ubuntu 16.04, все, что было сегодня установлено чистым Nginx, mySQL, PHP7.0 и PhpMyAdmin.

Эта проблема перенаправлении

ч ** р: //my.server.ip/

после входа в phpymadmin вместо

ч ** р : //my.server.ip/phpmyadmin

является ничего общего с установкой cgi.fix_pathinfo не установлено 0 в соответствии с рекомендациями всех этих руководств, которые вы читаете. Прочтите немного больше о том, почему в вашем файле php.ini должно быть установлено значение 0, и не просто отключайте его, как описано выше.

Таким образом, другими словами, вы оставляете (как рекомендовано) cgi.fix_pathinfo = 0 в вашем файле конфигурации для PHP.

FIXfrom this web site (только один правильный ответ), чтобы добавить следующую строку в ваш Nginx/файл/и т.д.// сайтов-доступных по умолчанию конфигурации. Затем перезапустите Nginx ... немедленно, без повторного обращения к корню после входа в систему.

# Phpmyadmin Configurations 
    location /phpmyadmin { 
     root /usr/share/; 
     index index.php index.html index.htm; 
     location ~ ^/phpmyadmin/(.+\.php)$ { 
       try_files $uri =404; 
       root /usr/share/; 
       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
       fastcgi_index index.php; 
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
       include fastcgi_params; 
     } 
     location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { 
       root /usr/share/; 
     } 
    } 

    location /phpMyAdmin { 
     rewrite ^/* /phpmyadmin last; 
    } 
+0

Как настроить '/ etc/nginx/sites-available/default', когда я хочу иметь phpmyadmin под url' site.com/myuniqupage', а не 'site.com/phpmyadmin'? –

+0

Не работает для меня. Кроме того, что со странным 'добавить эту строку'? Должно ли это быть включено или нет? (И нет, все равно не работает) – Diana

+0

Я скорректировал блок кода, удалив две пропущенные строки, поскольку они не нужны. Чтобы ответить на Jasom Dotnet, вам нужно поместить этот кодовый блок в серверный блок {} для вашего сайта «site.com» и протестировать его, он должен работать нормально. – MitchellK

-1

Некоторые из гидов учат вас, что вы должны включить cgi.fix_pathinfo параметров в php.ini и установите его значение в 0 (так эффективно отключить его;)). Я сделал это изменение в моих файлах php.ini. После этого устанавливается phpmyadmin и возникает ошибка перенаправления.

После нагрузок поиска, и ни один из ответов, которые я нашел, не работал, это внезапно перешло мне в голову, я изменил значение cgi.fix_pathinfo, я вернул его к значению по умолчанию и вуаля не странное перенаправление.

+0

Это тоже небезопасный для производства, вам нужно будет найти другое решение. – Gary

0

Изменение cgi.fix_pathinfo назад на 1 исправил проблему и для меня. Тем не менее, я не уверен, что это хорошее решение, так как гиды рассказывают:

«Это крайне неуверенный параметр, потому что он говорит PHP, чтобы попытаться выполнить ближайший файл, который он может найти, если запрошенный PHP-файл не может быть найден Это в основном позволит пользователям создавать PHP-запросы таким образом, чтобы они могли выполнять сценарии, которые им не разрешено выполнять."

Так кажется, что должно быть лучше исправить на это, так что я не должен идти на компромисс по безопасности.

Первый пост в этой теме не работает для меня. Это просто отключает PHPMyAdmin .. . Таким образом, на данный момент я остался только с cgi.fix_pathinfo обходной путь.

16

Вы можете сделать так просто, как редактирование PHPMYADMIN конфигурационный файл без overheading NGINX

  • Открыть config.inc.php файл sudo nano /etc/phpmyadmin/config.inc.php
  • Добавьте следующий код к нему

    $cfg['PmaAbsoluteUri'] = $_SERVER[HTTP_HOST].dirname($_SERVER[SCRIPT_NAME]);

  • Совершено

Credits: xaz0r

+0

Это должен быть принятый ответ. Кроме того, если это не сработает, попробуйте вместо этого поместить код в /var/lib/phpmyadmin/config.inc.php, не знаете, почему PMA имеет два возможных местоположения конфигурации (dumb af), но это то, что есть. Кому-то нужно переписать/модернизировать этот отличный инструмент. – ineedhelp

+0

Да. Это тоже работает.Но проблема в том, что в Linux лучше всего использовать системные папки: «/ etc» используется для конфигураций (файлы .conf и т. Д.). здесь вы найдете все конфиги и настройки для вашей системы. «/ var» обычно используется для файлов журналов, «временных» файлов (таких как почтовая катушка, спулер принтера и т. Д.), Базы данных и все другие данные, не привязанные к конкретному пользователю. Журналы обычно находятся в «/ var/log», в базах данных «/ var/lib» (mysql - «/ var/lib/mysql») и т. Д. Кредиты: https://serverfault.com/questions/384342/what -are-the-best-practices-of-the-usr-var-and-etc-folders – CaptainAdmin

+1

Согласен полностью, я хочу, чтобы разработчики PMA следовали протоколу. Как кто-то, кто действительно ценит правильную и здравомыслящую организацию, кодовая база довольно красавица. Я также узнал, что если файл конфигурации не найден, PMA по умолчанию будет /usr/share/phpmyadmin/libraries/config.default.php, который утверждает, что он не должен редактироваться, но моя настраиваемая конфигурация в корневом каталоге (где config.sample.php живет) игнорируется. Не знаете ли вы, если есть проблемы, если папка/var/lib/phpmyadmin удалена? – ineedhelp

0

Я также столкнулся с этой проблемой, и все решения, которые я нашел очень похож обходные, который может сломаться после обновления phpmyadmin или nginx. Поэтому я решил использовать субдомен для phpmyadmin.

My phpmyadmin теперь доступен по адресу https://phpmyadmin.your-domain.com. Это может быть немного накладными расходами, так как вам нужно добавить субдомен и получить сертификат для этого поддомена, но по крайней мере он не сломается, если будет обновление для phpymadmin, nginx и т. Д.

Смежные вопросы