PHP FastCGI - Nginx
Setting for pass request to PHP-FPM (FastCGI Process Manager)
Run PHP-FPM
On Windows, start PHP-FPM with
php-cgi.exe -b 127.0.0.1:9000
On Linux, use php-fpm
service
Nginx config
http {
server {
root "/var/www/html";
location / {
index index.php index.html index.htm;
}
location ~* \.php$ {
# check if PHP file exists
try_files $fastcgi_script_name =404;
# when PHP-FPM listen on Unix socket
fastcgi_pass unix:/var/run/php-fpm.sock;
# when PHP-FPM listen on TCP
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
File fastcgi_params
is exist by default in Nginx
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 REQUEST_SCHEME $scheme;
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;
PATH_INFO
To support URI like /index.php/data
server {
location ~* \.php(/|$) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# NOTE: most PHP frameworks does not need PATH_INFO
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
}
Send all requests to a single PHP file
Most PHP frameworks process requests from a single entry PHP file
server {
location / {
# pass all requests to index.php if the URI file does not exist
try_files $uri /index.php$is_args$args;
}
location ~* \.php$ {
# deny direct access PHP files
internal;
try_files $fastcgi_script_name =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Note
$fastcgi_script_name = $uri
- if
$fastcgi_script_name
end with/
, value offastcgi_index
will be appended to$fastcgi_script_name