nginx의 try_files가 위치 패턴 캡처의 변수와 작동하지 않습니다


1

명명 된 캡처가있는 위치 지시문이있는 경우 :

location ~ ^/api/(?<endpoint>[^/]+)(?<pathinfo>.*) {
    root /opt/software/endpoints;
    ## breaks the config:
    # try_files $endpoint.php =418;
    include fastcgi_params; # as supplied by debian 8 "jessie"
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root/$endpoint.php;
}

try_files가 없으면 올바른 URL을 호출하면 php-file이 호출되고 출력이 반환됩니다.

curl -s http://example.com/api/foo/param
> output of foo.php with param "param"

그러나 구성에서 try_files도 활성화하면 curl은 항상 418을 반환합니다.

(이유는 try_files에 대한 마지막 매개 변수로 그러한 끝 점이 존재하지 않는 경우 내부 리디렉션을 지정하려고하기 때문에 = 418이 퍼즐을 더 잘 보여줍니다.)

답변:


0

선행 슬래시를 캡처해야합니다. nginxURI에는 슬래시가 있으므로 try_files지시문 (있는 그대로)이 항상 실패합니다. fastcgi_param SCRIPT_FILENAME지시문 과 함께 슬래시를 다시 추가했습니다 .

이 시도:

location ~ ^/api(?<endpoint>/[^/]+)(?<pathinfo>.*) {
    root /opt/software/endpoints;
    try_files $endpoint.php =418;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root$endpoint.php;
}

여기에 게시 된 최소 구성은 슬래시가 추가 된 상태에서 작동했습니다. 그러나 실제 구성은 여전히 ​​작동하지 않았습니다. try_files가 / gin / user / 디렉토리에 대한 권한이없는 nginx 사용자로 실행되었습니다. 그러나 php5-fpm이했습니다.
Max-Julian Pogner

이 위치에 들어가시겠습니까? 충돌하는 위치 차단이있을 수 있습니까? 우선 순위에 대해서는 이 문서 를 참조하십시오 .
Richard Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.