I use an nginx webserver and I've been trying to stop a problem where sites are given the wrong $_SERVER["PHP_SELF"]
variable. This breaks some scripts. The problem seems to be that nginx is giving the wrong variables to FPM.
$_SERVER["PHP_SELF"]
is "/index.php/index.php" and it should be "/index.php"
This is the nginx server PHP configuration...
server {
listen 192.168.0.3:80;
server_name cacti;
access_log /home/admin/cacti_access_log;
error_log /home/admin/cacti_error_log;
root /var/www/sites/cacti;
location / {
index index.php index.html index.htm;
}
location ~* \.php$ {
fastcgi_pass unix:/var/run/php-fpm/admin-socket;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
fastcgi_read_timeout 60;
}
}
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 $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param HTTPS $https if_not_empty;
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;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
First, move
include fastcgi_params
before thefastcgi_param
entries. nginx processes these directives in order, so configuration insidefastcgi_params
file will override your definition in theserver
block.Then, use thse settings for
PATH_INFO
andPATH_TRANSLATED
: