2017-10-06 3 views
0

동일한 호스트/포트에서 여러 개의 웹 응용 프로그램을 역방향 프록시로 사용하려고 시도하고 있습니다. 서로 다른 경로를 사용하여 응용 프로그램을 구분합니다. 예를 들어, -다른 컨텍스트 경로를 사용하는 Nginx 리버스 프록시

proxy_set_header Host $http_host; 
proxy_set_header Upgrade $http_upgrade; 
proxy_set_header Connection $proxy_connection; 
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 $proxy_x_forwarded_proto; 
proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl; 
proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port; 

upstream app1 { 
    server 192.168.0.1:8080; 
} 
upstream app2 { 
    server 192.168.0.2:8080; 
} 

server { 
    server_name my-application-server; 
    listen 80; 

    location /app1/ { 
     proxy_pass http://app1/; 
    } 
    location /app2/ { 
     proxy_pass http://app2/; 
    } 

} 

이 올바르게 내 응용 프로그램에 개별 페이지에 대한 요청을 프록시합니다 :

내의 nginx의 설정은 다음과 같습니다 http://my-application-server/app1/context/login, 내 앱의 하이퍼 링크는 경로의 일부인 app1이 누락되어 깨졌습니다. 예 : 그들은 http://my-application-server/app1/context/login-success보다는 http://my-application-server/context/login-success으로 안내합니다.

proxy_redirectrewrite에 다양한 값을 추가하려고 시도했지만이 링크가 올바르게 렌더링되도록 설득 할 수는 없습니다.

내 응용 프로그램은 Tomcat에서 실행되는 java webapp입니다. 나는 webapp의 컨텍스트 경로를 변경할 수있는 다른 솔루션을 보았지만, nginx가 nginx 경로에 대해 알도록 구성해야하는 바람둥이없이 요청을 투명하게 프록시 처리해야합니다.

답변

1

우선, 루트 도메인의 백엔드를 추가 된 기본 URL이있는 도메인으로 투명하게 프록시하는 것과 같은 것은 없습니다.

http://xyz/abc에서 http://def까지 프록시하려는 경우 모든 것이 작동하도록 100 % 보장 할 수있는 방법이 없습니다. 애플리케이션 별 변경이 필요합니다

백엔드 API가 현재 URL에 액세스하는 url을 반환하지 않는 경우 proxy_pass에 대해 걱정할 필요가 없습니다. 그러나 당신은 html이있는 경우에 당신은 당신의 방법 오는 모든 것을 고칠 필요가있다.

는 모든 sub_filter는 CSS, 자바 스크립트, HTML에서 URL을 해결하기 위해 수행 된 것처럼 내가 홍수 백엔드

How to proxy calls to specific URL to deluge using NGINX?

위해 만든 간단한 설정을 참조하십시오. 그리고 그것을 실행하고 문제를 찾은 다음 수정 프로그램을 구현해야했습니다. 다음은 참조 용 구성입니다.

location ~* /deluge/(.*) { 
    sub_filter_once off; 
    sub_filter_types text/css; 
    sub_filter '"base": "/"' '"base": "/deluge/"'; 
    sub_filter '<head>' '<head>\n<base href="/deluge/">'; 
    sub_filter 'src="/' 'src="./'; 
    sub_filter 'href="/' 'href="./'; 
    sub_filter 'url("/' 'url("./'; 
    sub_filter 'url(\'/' 'url(\'./'; 

    set $deluge_host 192.168.33.100; 
    set $deluge_port 32770; 
    proxy_pass http://$deluge_host:$deluge_port/$1; 
    proxy_cookie_domain $deluge_host $host; 
    proxy_cookie_path//deluge/; 
    proxy_redirect http://$deluge_host:$deluge_port/ /deluge/; 
} 

위의 내용은 응용 프로그램에 따라 사용자 정의 할 수 있습니다. 그러나 당신이 필요로하는 것은 아래에 있습니다

location /app1/ { 
    sub_filter_once off; 
    sub_filter '<head>' '<head>\n<base href="/app1/">'; 
    sub_filter 'src="/' 'src="./'; 
    sub_filter 'href="/' 'href="./'; 
} 
+0

답변을 주셔서 감사합니다. 쉬운 해결책은 없지만 유감스럽게도 제 신청서에 대한 규칙을 이해하기 시작했습니다. – olambert

관련 문제