Php

使用 Nginx 的別名導致 phpMyAdmin 登錄死循環

  • July 14, 2016

最近我一直在嘗試使用 Nginx 設置一個 Web 伺服器(我通常使用 Apache)。但是,我在嘗試將 phpMyAdmin 設置為alias時遇到了問題。別名也正確地將您帶到 phpMyAdmin 登錄螢幕,但是當您輸入有效憑據並點擊 go 時,您最終會返回登錄螢幕而沒有錯誤。

對我來說聽起來像是 cookie 或會話問題……但如果我符號連結 phpMyAdmin 目錄並嘗試通過符號連結版本登錄它工作正常!符號連結和別名都設置了相同數量的 cookie,並且兩者似乎都為正確的域和路徑設置了 cookie。

我的 php 別名的 Nginx 配置如下:

location ~ ^/phpmyadmin/(.*\.php)$ {
   alias /usr/share/phpMyAdmin/$1;
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   include fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $request_filename;
}
  • 我正在執行 Nginx 0.8.53
  • PHP 5.3.3
  • MySQL 5.1.47
  • phpMyAdmin 3.3.9 - 自行安裝
  • 並安裝了 php-mcrypt。

以前有沒有其他人經歷過這種行為?有人對如何解決它有任何想法嗎?

我有同樣的問題。我執行了一個帶有 doc root 的網站,/var/www/somesite並希望將 phpmyadmin 掛接到該網站上的某個子文件夾。我在 nginx 中使用此配置進行了嘗試:

root /var/www/somesite;

location /pma/ {
   alias /usr/share/phpmyadmin/;
}

location ~ ^/pma/(.+\.php)$ {
   alias /usr/share/phpmyadmin/$1;
   fastcgi_pass   unix:/tmp/phpfpm.sock;
   fastcgi_index  index.php;
   fastcgi_param  SCRIPT_FILENAME  $request_filename;
   include fastcgi_params;
}

這似乎有效,但當我登錄時,就像你描述的那樣,我又看到了首頁。沒有錯誤,什麼都沒有。如果我使用錯誤的密碼登錄,我會收到“無法登錄 MySQL 伺服器”錯誤,正如您所期望的那樣。

解決方案

最後我所做的是我從所有的東西中拖進來fastcgi_params,發現改變DOCUMENT_ROOT-parameter 解決了這個問題。於是上面的 nginx-config 改為:

root /var/www/somesite;

location /pma/ {
   alias /usr/share/phpmyadmin/;
}

location ~ ^/pma/(.+\.php)$ {
   alias /usr/share/phpmyadmin/$1;
   fastcgi_pass   unix:/tmp/phpfpm.sock;
   fastcgi_index  index.php;
   fastcgi_param  SCRIPT_FILENAME  $request_filename;

   # From fastcgi_params
   fastcgi_param  QUERY_STRING       $query_string;
   fastcgi_param  REQUEST_METHOD     $request_method;
   fastcgi_param  CONTENT_TYPE       $content_type;
   fastcgi_param  CONTENT_LENGTH     $content_length;
   fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
   fastcgi_param  REQUEST_URI        $request_uri;
   fastcgi_param  DOCUMENT_URI       $document_uri;
   fastcgi_param  DOCUMENT_ROOT      /usr/share/phpmyadmin; # <-- Changed
   fastcgi_param  SERVER_PROTOCOL    $server_protocol;
   fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
   fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
   fastcgi_param  REMOTE_ADDR        $remote_addr;
   fastcgi_param  REMOTE_PORT        $remote_port;
   fastcgi_param  SERVER_ADDR        $server_addr;
   fastcgi_param  SERVER_PORT        $server_port;
   fastcgi_param  SERVER_NAME        $server_name;
   fastcgi_param  REDIRECT_STATUS    200;
}

(旁注:我認為這是 nginx 的一個問題,您不能同時設置別名和文件根目錄。實際上很奇怪。)

引用自:https://serverfault.com/questions/223028