나는 꽤 오랫동안이 주변을 둘러 보았고, nginx + hhvm이 나의 요청을 매핑하는 방법에 대해 정말로 이해할 수 없었다.nginx지도 api 이상한 행동에 대한 하위 디렉토리를 받아 들일 때
나는 기본적으로 api.example.com에 API를 사용하여 Accept : application/vnd.com.example.api.v1 + json 버전 1과 application/vnd.com.example .api.v2 + json (버전 2). API 자체는 새로 설치 한 HHVM을 사용하여 실행할 PHP 응용 프로그램입니다. 모든 요청은 index.php에 의해 전달됩니다.
폴더 구조는 다음과 같습니다 : 내 REST 클라이언트를 사용할 때마다
api.example.com/
index.php (content: fail)
v1/
index.php (content: v1)
v2/
index.php (content: v2)
내가 다시 V1의 응답을받을 헤더를 수락 V1과 api.example.com/test에 액세스 할 수 있습니다. v2에 accept 헤더를 사용하면 v2가 표시됩니다. 그래서 모든 것이 정확합니다. 내가 어떤 헤더를 허용 제공하지 않으면 내가 Nginx에 구성이 hhvm.conf 파일이 아래에 포함되어 있습니다이
map $http_accept $api_version {
default 0;
"application/vnd.com.example.api.v1+json" 1;
"application/vnd.com.example.api.v2+json" 2;
}
server {
# listen to :80 is already implied.
# root directory
root /var/www/api.example.com/;
index index.html;
server_name api.example.com;
include hhvm.conf;
location/{
if ($api_version = 0) {
# redirect to example.com if applicable
# Accept-header is missing
return 307 http://example.com;
}
try_files /v$api_version/$uri /v$api_version/$uri/ /v$api_version/index.php?$args;
}
# Prevent access to hidden files
location ~ /\. {
deny all;
}
}
과 같은
example.com로 리디렉션. hhvm에 포함 된 기본 hhvm.conf의 파생되거나 다소 정확한 기능입니다. 내가 응답을 "실패"내가 할 api.example.com/index.php에 액세스하려고 나는 V1에 대한 V1을 기대하고 경우에도 헤더 및 v2에 동의하면 location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
이
내 문제입니다 v2 accept 헤더. 다른 모든 것들이 잘 작동하는 것처럼 보입니다. 심지어 index.html도 올바르게 서브 디렉토리에 매핑됩니다. 내가 구성에
root /var/www/api.example.com/v$api_version/;
를 사용
내가 해봤을 시도했습니다,하지만 그건 단지의 nginx에서 나에게 404 오류를 제공 무엇
. 내가 찾고있는 것이 루트 경로를 실제로 바꾸는 것이라고 생각하지만 실제로 작동하게 만드는 방법에 대한 내 머리가 없습니다. 또한 nginx 구성 및 hhvm.conf에서 인덱스 매개 변수를 제거하려고 시도했지만 도움이되지 않습니다. 나 또한 다른 구성의 톤을 시도하고 적어도 20-30 탭 stackoverflow이 문제를 해결하기 위해 열어 봤지만, 분명히 여기에 뭔가가 (아마 비교적 간단) 누락되었습니다. 나는 또한 위치 블록 내부에 hhvm include를 이동 시키려고 시도했다.
셋업
의 nginx/1.2.1 데비안 7, , hhvm 3.2.0
아, 그리고 실제로 여기에 질문을 내 첫 번째 시간입니다. :) 나는 모든 것을 올바르게 포맷했으면 좋겠다.
+1 큰 질문입니다. 왜 모든 신규 사용자가 당신과 같을 수 있습니까? –
@RaduMurzea 대단히 감사합니다. 듣는 것이 즐겁습니다. 슬프게도 귀하의 질문에 대한 답변이 없지만 더 자세히 조사 할 것입니다. –