userdir을 구성 할 때 nginx fastcgi“기본 스크립트를 알 수 없음”


10

nginx 구성이 싫습니다. 너무 복잡합니다. 사용자 디렉토리에서 PHP를 작동 시키려면 어떻게해야합니까? 내 nginx.conf의 관련 부분은 다음과 같습니다.

    location ~ ^/~(.+?)(/.*)?$ {
        autoindex on;
        autoindex_exact_size off;
        alias /home/$1/public_html$2;

        location ~ \.php {
            include /etc/nginx/fastcgi.conf;
            fastcgi_intercept_errors on;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
        }
    }

이것은 나에게 오류를 준다 : FastCGI sent in stderr: "Primary script unknown" while reading response header from upstreamnginx 오류 로그.

여기 내 /etc/nginx/fastcgi.conf:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

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

nginx가 스크립트 이름을 올바르게 해석하지 않는다고 가정합니다. 내장 (또는 최소한 표준화되고 문서화 된) 기능에 대한 사용자 정의 정규 표현식을 작성하여 파일 시스템에서 볼 위치를 nginx에 알려주는 것이 싫습니다.


나머지는 어?습니까? 즉 /etc/nginx/fastcgi.conf?
Michael Hampton

@MichaelHampton 방금 그 정보를 추가했습니다
nnyby

답변:


9

문제는 fastcgi.conf에서 다음 SCRIPT_FILENAME과 같이 정의 $document_root$fastcgi_script_name;하지만 alias차이를 사용하여 경로를 설정한다는 것입니다.

SCRIPT_FILENAME사용하려면 업데이트해야 합니다$request_filename

원하는 경우 중첩 위치로 돌아갈 수도 있습니다. 그래도이 오류가 계속 발생하면 여기에 모든 가능성이 기록되어 있습니다. http://blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/

여러 가지 다른 원인이있을 수 있으므로 확인하십시오.


4

리디렉션, 별칭을 정의하고 nginx에서 사이트의 conf에 fastcgi를 사용하면 다음을 수행하여 작동시킬 수 있습니다.

변화:

location ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
...
}


으로:

location ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ request_filename;
fastcgi_param REQUEST_URI $ uri? $ args;
...
}

이것이 작동하지 않으면 REQUEST_URI없이 위에서 말한 것처럼 사용하십시오.

location ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ request_filename;
...
}


이것은 OSX 시에라에서 나를 위해 일한
ajaybc

2

locationuserdirs에서 별도의 PHP 스크립트 블록을 사용해보십시오 . 중첩 될 필요는 없습니다.

location ~ ^/~([^/]+)/(.+\.php)$ {
    alias /home/$1/public_html/$2;
    include /etc/nginx/fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
}

제안 해 주셔서 감사합니다! 나는 지금 조금 더 가까이 있지만 여전히 똑같은 오류가 발생합니다.
nnyby
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.