Nginx가 uri를 php5-fpm에 전달하지 않고 대신 텍스트 파일로 사용됩니다.

Nginx가 uri를 php5-fpm에 전달하지 않고 대신 텍스트 파일로 사용됩니다.

위에서 언급했듯이 uri는 nginx로 전달되지 않습니다. 이를 보여주기 위해 전체 "try" 블록을 포함했습니다.

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    set $page_to_view "/index.php";
    try_files $uri $uri.php $uri/;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
}

따라서 이는 본질적으로 "아, 우리가 $uri.php를 만들었고 그 파일이 존재합니다. 실제로 PHP로 보내는 대신 서버에 저장하자"라고 말하는 것입니다.

내 fpm 부분은 아래에 있습니다.

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
#   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

#   # With php5-cgi alone:
#   fastcgi_pass 127.0.0.1:9000;
#   # With php5-fpm:
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

재고가 꽤 많습니다. 그래서 내가 이해하지 못하는 것은 왜 세상에서 nginx가 더 이상 그것을 하지 않는가 하는 것입니다. 나는 그것이 데비안에서 fastcgi와 함께 작동하고 있다는 것을 알고 있지만 지금은 그렇지 않습니다. HDD 충돌로 인해 이전 구성 파일을 잃어버렸고 그것은 드라이브를 다시 보내기 전에 백업하지 않은 파일입니다. 다시 작성해도 완벽합니다.

답변1

로드하려는 URI가 무엇인지는 밝히지 않았지만 .php.

try_files여기서 문제는 이름에서 알 수 있듯이 지시문을 문자 그대로 받아들이지 않는다는 것입니다 . 그것은 구체적으로 시도입니다파일.try_files file ... uri;이는 마지막 인수만 내부 재작성을 유발하는 폴백으로 처리된다는 의미 로 문서화되어 있습니다 . 마지막 인수 이전의 모든 인수는 정적 파일로 테스트되며, 발견되면 정적 파일로 제공됩니다.

할 수 있지만 try_files $uri $uri/ $uri.php;할 수 없다는 뜻이다.try_files $uri $uri.php $uri/

답변2

교체해 보세요

location ~ \.php$ {

~와 함께

location ~ \.php {

$document_root에는 PHP 파일이 있는 실제 디렉토리가 있습니다.

예를 들어.

fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;

관련 정보