nginx配置文件配置示例
FastCGI(通常是与Nginx或类似的web服务器一起使用)时,fastcgi_param指令用于设置传递给FastCGI服务器(如PHP-FPM)的参数。这些参数在FastCGI进程处理请求时使用,以提供有关请求的各种信息。
下面是您提到的几个fastcgi_param指令的解释:
SCRIPT_FILENAME $document_root$fastcgi_script_name;
SCRIPT_FILENAME: 这是一个FastCGI参数名,它告诉FastCGI服务器要执行的脚本的完整路径。
$document_root: 这是一个变量,代表Nginx服务器配置的文档根目录(通常是网站文件的存放位置)。
$fastcgi_script_name: 这是一个变量,代表请求中的脚本名(例如,对于URL http://example.com/index.php,$fastcgi_script_name将是/index.php)。
综合起来,$document_root$fastcgi_script_name将给出要执行的PHP脚本的完整文件系统路径。
PATH_INFO $fastcgi_path_info;
PATH_INFO: 这是一个FastCGI参数名,用于传递额外的路径信息。这通常用于处理像/index.php/some/extra/path这样的URL,其中/some/extra/path是PATH_INFO。
$fastcgi_path_info: 这是一个变量,包含请求中的额外路径信息(如果有的话)。如果没有额外的路径信息,这个变量将是空的。
PATH_TRANSLATED $document_root$fastcgi_path_info;
PATH_TRANSLATED: 这是一个FastCGI参数名,用于提供PATH_INFO的“翻译”或“解释”版本。这通常是一个文件系统路径,对应于PATH_INFO所表示的资源。
$document_root$fastcgi_path_info: 这里将文档根目录与PATH_INFO结合起来,以尝试形成一个完整的文件系统路径。然而,需要注意的是,这种方式并不总是有意义或安全的,因为PATH_INFO可能包含任意数据,不一定对应于实际存在的文件系统路径。
try_files $uri $uri/ /proysapi/index.php?s=$uri&$args;
try_files 指令:它尝试按照以下顺序为请求提供服务:
$uri - 这是请求的确切URI对应的文件或目录。
$uri/ - 这表示如果请求的是一个目录,则尝试将其当作目录来处理,通常会触发Nginx寻找目录下的index文件(例如index.html或index.php,这取决于你的其他配置)。
如果前两项都找不到,则将请求重写到/proysapi/index.php,并传递原始的URI作为s参数,同时保留原始的查询字符串($args)。
location域的作用:
location /proysapi/ { ... }:
这是一个location块,它定义了如何响应以/proysapi/开头的URL请求。
root /var/www/html/PROYS;:
指定请求的根目录为/var/www/html/PROYS。也就是说,当有人请求/proysapi/somefile时,Nginx会在/var/www/html/PROYS/proysapi/目录下查找somefile。
if (!-e $request_filename) { ... }:
这是一个条件判断。它检查请求的文件名($request_filename)是否存在。
如果文件不存在,则执行大括号内的指令。
rewrite ^/proysapi/(.*)/proysapi/index.php?s=1 last;:
如果请求的文件不存在,这条rewrite指令会被执行。
它将URL重写为/proysapi/index.php,并将原始URL中/proysapi/之后的部分作为s参数传递给index.php。
例如,如果请求的是/proysapi/some/path,它将被重写为/proysapi/index.php?s=some/path。
last标志表示重写后应重新开始搜索匹配的location,但由于break指令的存在,这个last可能在这里不起作用(通常break和last不会一起使用,因为它们有冲突的意义)。
break;:
在这个上下文中,break可能是多余的,因为rewrite指令已经带有last标志。通常,break用于在if语句中阻止进一步的处理,但在这里它可能不会产生预期的效果或与last产生冲突。为了避免混淆,建议删除其中一个。
location ~ .php(.*)$ { ... }:
这是一个嵌套的location块,用于匹配以.php结尾的请求。
fastcgi_pass 127.0.0.1:9001;: 指定将请求传递给本地机器上的9001端口的FastCGI进程(可能是PHP-FPM)。注释中还提供了使用Unix套接字的示例。
接下来的几行配置了如何传递参数给FastCGI进程,并设置了SCRIPT_FILENAME、PATH_INFO等FastCGI参数。
include fastcgi_params;: 包含其他预定义的FastCGI参数。
在nginx里打印或者断点:
# return 200 "print4 aa $document_root=$fastcgi_script_name=$fastcgi_path_info=【$uri】=$args"; # 打印结果是 print4 aa print4 aa /var/www/html/PROYS=/proysapi/public/index.php==【/proysapi/public/index.php】=s=translate/lang
指向/重定向public目录:
# 云活动产品
location /proysapi/ {
rewrite ^/proysapi/(.*)$ /proysapi/public/$1 last;
}
location /proysapi/public/ {
root /var/www/html/PROYS;
if (!-e $request_filename){
rewrite ^/proysapi/public/(.*)$ /proysapi/public/index.php?s=$1 last;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9001; # unix:/run/php-fpm/www.sock; 示例 unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# return 200 "print4 aa $document_root=$fastcgi_script_name=$fastcgi_path_info=【$uri】=$args";
# 打印结果是 print4 aa print4 aa /var/www/html/PROYS=/proysapi/public/index.php==【/proysapi/public/index.php】=s=translate/lang
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
