구성 파일에서 설정하면 아무런 차이가 없습니다.
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
또는:
fastcgi_param SCRIPT_FILENAME $request_filename;
그들은 각각 무엇을합니까? 둘 중 하나가 다른 것보다 낫습니까?
미리 감사드립니다.
답변
설명서에 나와있는 내용은 다음과 같습니다.
이 변수는 지시문 루트 또는 별명 및 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
답변
TLDR
에 사용 $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/
나는 그것이 미래의 누군가를 도울 수 있기를 바랍니다.