2017-02-26 1 views
3

나는 Nginx 리버스 프록시 뒤에 Docker 내부에서 Jenkins를 실행 중입니다. 이제 해결사에게 문제가 생겼습니다.Jginkins with Nginx 역방향 프록시 및 리졸버

내가 함께 리졸버를 활성화 할 때 :

set $backend "http://jenkins:8080/"; 
proxy_pass $backend; 

나는 모든 자바 스크립트 파일에 대한 다음과 같은 오류를 얻을 것이다 :

Refused to execute script from 'http://localhost/static/....js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled. 

을 언제 해결하지 않고 단순히 프록시 패스 :

proxy_pass http://jenkins:8080/; 

해석자가 없어도 작동합니다. 리졸버는 필수입니다. 그렇지 않으면 호스트 jenkins이 Ip (Docker DNS Server)를 변경할 때 설치가 작동하지 않습니다.

내 구성 : 자바 스크립트 대신에 HTML 페이지를 받고있는 것처럼 나타나는 오류 메시지를 기반으로

resolver 127.0.0.11 ipv6=off valid=30s; 
client_max_body_size 100m; 
keepalive_timeout  65; 
types_hash_max_size 2048; 

server { 
    listen  80 default_server; 
    listen  [::]:80 default_server; 
    server_name _; 
    location/{ 
     set $backend "http://jenkins:8080/"; 
     proxy_pass $backend; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 
    } 
} 
+0

좋은 질문! :-) – cnst

+0

upvote, accept, award 감사합니다; btw, 장래에는 장래 탭에서 질문이 사라 지므로 수동 "상"부분을 잡고 싶을 수 있습니다. 따라서 다른 사람들은 노트를 작성하고 투표 할 수 없습니다. – cnst

답변

1

들린다.

변수와 함께 proxy_pass 패러다임을 사용하면 nginx에게 더 이상 값이 혼동되어서는 안된다는 것을 알 수 있습니다 (예 : location 및 URI와 상관없이). 백엔드에 대한 모든 요청은 항상 변수는 말합니다 (예 : 귀하의 경우 동일한 URI로).


에게 은 최선의 선택은 $uri, $is_args$args를 사용하는 아마 것 NGINX proxy_pass remove path prefix & resolve DNS에 따라 :

-  set $backend "http://jenkins:8080/"; 
-  proxy_pass $backend; 
+  proxy_pass http://jenkins:8080$uri$is_args$args; 

또 다른 옵션, 잠재적으로 할 수있는 덜 안전, 사용하는 것입니다Nginx pass_proxy subdirectory without url decoding에 따라 제한된 특정 경우에 일반 $uri보다 약간 다른 의미를가집니다 962,244,, :

proxy_pass http://jenkins:8080$request_uri; 
+0

왜'proxy_pass $ backend $ uri $ is_args $ args; '가 아닌가? – blacklabelops

+0

@maybeg, 변형이 작동해야합니다. 그러나 단일 컨텍스트에서 변수를 사용하면 코드가 없으면 더 명확하고 이해하기 쉬워집니다 (그렇지 않으면 누군가 변수에 특별한 의미가 있다고 생각할 수 있습니다). 또한 업스트림 변수를 정의하는 올바른 방법은 ['upstream'] (http://nginx.org/r/upstream) 지시어를 사용하는 것이지만, 그 상황에서''server'' resolve ''부분은 비 OSS 기능은 가입이없는 한 사용자를 위해 작동하지 않습니다. – cnst

관련 문제