답변:
설명서에 나와있는 내용은 다음과 같습니다.
이 변수는 지시문 루트 또는 별명 및 URI 요청으로 구성된 현재 요청의 파일 경로와 같습니다.
이 변수는 현재 요청의 지시문 루트 값과 같습니다.
이 변수는 URI 요청과 같거나 URI가 슬래시로 끝나면 URI 요청에 fastcgi_index가 제공 한 색인 파일의 이름을 더한 것입니다. SCRIPT_FILENAME 및 PATH_TRANSLATED 대신이 변수를 사용할 수 있으며, 특히 PHP에서 스크립트 이름을 결정하는 데 사용됩니다.
여기에 작성된 것처럼 fastcgi_index 또는 fastcgi_split_path_info를 사용할 때 차이가 있습니다. 어쩌면 더있을 수도 있습니다 ... 지금 내가 아는 것입니다.
요청 /info/
을 받고 다음 구성을 갖습니다.
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
SCRIPT_FILENAME
동일 것이다 /home/www/scripts/php/info/index.php
, 그러나 사용 $request_filename
단지 것 /home/www/scripts/php/info/
.
구성 fastcgi_split_path_info
도 중요합니다. 추가 도움이 필요하면 여기를 참조하십시오 : http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info
fastcgi_split_path_info
. 어쩌면 당신 의 조정이 필요할 것입니다. Steely Wing의 답변은 문서가 아니라 경험에 기반한 것 같습니다.
fastcgi_split_path_info
두 개의 캡처 외부에 내 별칭 접두사를 제외시켜 조정하려고 시도했지만 아무런 효과가없는 것 같습니다. 별명을 포함하는지 여부에 관계없이 $request_filename
as로 전달 SCRIPT_FILENAME
하는 것이 매력처럼 작동합니다.
SCRIPT_FILENAME
있을 때 처음에 두 개의 문자열을 연결하도록 제안하는 이유를 이해할 수 없습니다 $request_filename
. 실제로 위의 예제는 $request_filename
파일이 명시 적으로 요청되지 않은 경우에도 경로와 달리 파일 이름을 포함 하므로 실제로 올바르지 않습니다. 적어도 어제 나의 결론이다.
에 사용 $request_filename
하는 것이 좋습니다 SCRIPT_FILENAME
.
root
지시문 을 사용하는 경우$document_root$fastcgi_script_name
와 같습니다 $request_filename
.
alias
지시문 을 사용하는 경우$document_root$fastcgi_script_name
$fastcgi_script_name
경로가 아닌 URL의 경로 이므로 잘못된 경로를 반환합니다 $document_root
.
구성이있는 경우
location /api/ {
index index.php index.html index.htm;
alias /app/www/;
location ~* "\.php$" {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
/api/testing.php
:$document_root$fastcgi_script_name
== /app/www//api/testing.php
$request_filename
== /app/www/testing.php
/api/
:$document_root$fastcgi_script_name
== /app/www//api/index.php
$request_filename
== /app/www/index.php
그리고를 사용 $request_filename
하면 index
지시문을 사용하여 색인을 설정해야 fastcgi_index
작동하지 않습니다.
그 줄은 'fastcgi_params'파일에서 가져온 것 같습니다.
기본적으로 SCRIPT_FILENAME
vhost 파일에서 루트 지시문을 정의 할 때 이미 정의 되어 있기 때문에 오류가 발생하지 않습니다 . 따라서 vhost 파일에서 명시 적으로 정의하지 않는 한의 fastcgi_param
값을 사용 SCRIPT_FILENAME
하여 루트 지시어에서 가져옵니다. 요청을 PHP 서버로 보내기 위해 nginx에 필요한 또 다른 변수가 $fastcgi_script_name
있으며 반복 URL과 슬래시로 끝나는 URI의 오류를 피하기 위해 잘 정의해야합니다.
결론 :
모든 것이 SCRIPT_FILENAME
훌륭하게 작동하도록하려면 모든 사람이 / etc / nginx 폴더에있는 'fastcgi_params'파일에 명시 적으로 정의 하거나 PHP 위치 블록에 다음 줄을 포함시켜 사이트 사용 가능 폴더에있는 사이트의 호스트에서 쉽게 정의해야합니다 .
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
위와 같이 'fastcgi_params'파일에 포함되어있는 것과 동일합니다. ngnix를 PHP-FPM에 연결하는 자세한 정보는 다음을 참조하십시오.
https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/
나는 그것이 미래의 누군가를 도울 수 있기를 바랍니다.