2017-03-09 1 views
0

Nginx로 API를 역방향 프록시하려고합니다. 나는 다음과 같은 구성이 : 나는 다음과 같은 URL을 http://localhost:82/proxyNow/1/2/3/?app_id=someAppId&app_code=someCodeNginx proxy_pass는 역방향 프록시 중 [No Host]를 반환합니다.

를 호출 할 때

worker_processes 4; 

events { worker_connections 1024; } 

http { 

    upstream some_upstream { 
      server 1.something.com; 
      server 2.something.com; 
    } 

    server { 

      listen 80; 


      location ~/proxyNow/(?<zvar>(\w+))/(?<xvar>(\w+))/(?<yvar>(\w+))/ { 
        proxy_pass http://some_upstream/hello/something/$zvar/$xvar/$yvar/somethingelese; 
        proxy_set_header Host $http_host; 
        proxy_set_header Host   $host; 
        proxy_set_header X-Forwarded-For $remote_addr; 
        proxy_cache maps_cache; 
        proxy_cache_valid 200 302 365d; 
        proxy_cache_valid 404  1m; 
        proxy_redirect off; 

      } 

    } 


} 

를 내가받을 다음과 같은 오류 메시지가 :

잘못된 URL

요청 된 URL " http://%5bNo%20Host%5d/hello/something/1/2/3/somethingelese "이고 입니다. 참고 # 9.be35dd58.1489086561.5c9bd3c

호스트는 nginx에서 검색 할 수없는 것으로 보입니다. 하지만 직접 호출을 실행하는 경우 :

http://1.something.com/hello/something/$zvar/$xvar/$yvar/somethingelese?app_id=someAppId&app_code=someCode

http://2.something.com/hello/something/$zvar/$xvar/$yvar/somethingelese?app_id=someAppId&app_code=someCode

은 어떤 이유로 Nginx에 호스트

+0

당신은 proxy_set_header Host'와'proxy_cache_valid''에 대한 중복 된 항목이 있습니다. 먼저 수정해야합니다. –

답변

0

당신은 문서에 살펴 보셔야를 해결할 수없는 것 같다. 위치가 정규 표현식을 사용하여 지정

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

.

이 경우 지시어는 URI없이 지정해야합니다.

나는 비싼 정규식 위치하지 않고 다음과 같은 솔루션을 제안한다.
http://nginx.org/en/docs/http/ngx_http_core_module.html#location

location /proxyNow/ { 
    rewrite /proxyNow/(?<zvar>(\w+))/(?<xvar>(\w+))/(?<yvar>(\w+))/.* /hello/something/$zvar/$xvar/$yvar/somethingelese$is_args?$args break; 
    proxy_pass http://some_upstream; 
... other nginx diretives; 
}