Nginx配置中fastcgi_params文件详细理解

由于Nginx无法解析动态网页,所以动态请求一般需要php来完成.通过fastcgi, 也就是php-fpm(fastcgi的实现)来实现.

今天在使用LNMP搭建wordpress的时候,遇到个问题 在浏览器中访问.php文件的时候,nginx不能正常访问.动态资源更换了个端口.发现静态资源正常访问.访问动态资源页面只是空白,经过几番尝试,发现了问题.

nginx的配置文件wordpress.conf中的server配置段:(最初)

server {
        listen       8080;
        server_name  www.3linux.com;
        root         /usr/share/nginx/wordpress;
        index index.php index.html;

        location ~\.php$ {
                include fastcgi_params;
                fastcgi_pass    127.0.0.1:9000;
                fastcgi_index   index.php;
                #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
        location = /favicon.ico{
                root html;
              
        }
 }

修改后如下:

server {
        listen       8080;
        server_name  www.3linux.com;
        root         /usr/share/nginx/wordpress;
        index index.php index.html;

        location ~\.php$ {
                include fastcgi_params;
                fastcgi_pass    127.0.0.1:9000;
                fastcgi_index   index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
        location = /favicon.ico{
                root html;
              
        }
 }

只是启用了这一行.

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

此条语句含义:
传递脚本文件请求的路径;
SCRIPT_FILENAME变量是php-fpm可识别的脚本名称;对应的$fastcgi_script_name变量是Nginx定义的脚本名称. $document_root变量是Nginx配置的根目录即root 指定的路径.本文配置当中可理解为,document_root= /usr/share/nginx/wordpress
所以该条语句也可以改成这样,也是可以的:

fastcgi_param SCRIPT_FILENAME  /usr/share/nginx/wordpress/$fastcgi_script_name;

深入理解:
由于Nginx作为web服务器,动态请求需转发给后端php服务处理,那么转发过程中就需要传递客户端请求的一些参数,Nginx传递这些参数是由fastcgi_params这个文件来定义实现的.文件内有详细的可传递的所有变量信息.
fastcgi_param SCRIPT_FILENAME $ documentroot$ fastcgi_script_name;"#脚本文件请求的路径
fastcgi_param QUERY_STRING $query_string; #请求的参数;如?app=123
fastcgi_param REQUEST_METHOD $request_method; #请求的动作(GET,POST)
fastcgi_param CONTENT_TYPE $content_type; #请求头中的Content-Type字段
fastcgi_param CONTENT_LENGTH $content_length; #请求头中的Content-length字段。
fastcgi_param SCRIPT_NAME $fastcgi_script_name; #脚本名称
fastcgi_param REQUEST_URI $request_uri; #请求的地址不带参数
fastcgi_param DOCUMENT_URI document_uri; #与document_uri; #与uri相同。
fastcgi_param DOCUMENT_ROOT $document_root; #网站的根目录。在server配置中root指令中指定的值
fastcgi_param SERVER_PROTOCOL KaTeX parse error: Expected 'EOF', got '#' at position 18: …rver_protocol; #̲请求使用的协议,通常是HTTP…nginx_version;#nginx 版本号,可修改、隐藏

fastcgi_param REMOTE_ADDR $remote_addr; #客户端IP
fastcgi_param REMOTE_PORT $remote_port; #客户端端口
fastcgi_param SERVER_ADDR $server_addr; #服务器IP地址
fastcgi_param SERVER_PORT $server_port; #服务器端口
fastcgi_param SERVER_NAME $server_name; #服务器名,域名在server配置中指定的server_name

#fastcgi_param PATH_INFO $path_info;#可自定义变量

#PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param REDIRECT_STATUS 200;


版权声明:本文为Matt_li原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。