2017-01-15 13 views
0

Apache HTTP 2.4를 역방향 프록시로 사용합니다. 내 구성은 하나의 생각을 제외하고 잘 작동 :reverseProxy : 포함 된 JavaScript 파일의 내용을 변경하는 방법

  • 나는이 내 실제 가상 호스트 구성입니다

파일 임베디드 자바 스크립트에서 문자열 컨텐츠 (URL)를 변경하려면 :

<VirtualHost web.mydomain.com:80> 
     ServerName web.mydomain.com 
     ServerAlias web.mydomain.com 

     DocumentRoot "..." 
     ... 

     RewriteEngine On 
     RewriteCond %{REQUEST_METHOD} OPTIONS 
     RewriteRule ^(.*)$ $1 [R=200,L] 

     #Options -Indexes 
     #ProxyRequests On 
     #ProxyPreserveHost Off 

     # Web App 
     ProxyPass /hello http://middleware.mydomain.com:8082/hello-world-0.0.7 
     ProxyPassReverse /hello http://middleware.mydomain.com:8082/hello-world-0.0.7 

     AddOutputFilterByType SUBSTITUTE text/html 
     Substitute "s|hello-world-0.0.7|hello|ni" 
</VirtualHost> 

도와 주시겠습니까?

답변

0

일반적으로 응용 프로그램 서버에서 외부 URL을 구성 할 수 있어야하므로 Apache 서버에서 대체 할 필요가 없습니다. 이러한 구성은보다 효율적입니다.

브라우저에서 반환 된 Content-Type이 필터와 일치하는지 확인 했습니까? Javascript 파일을 나타내지 만 text/html을 필터링합니다. (예 : Chrome : 개발자 도구 열기> 페이지로 이동> 네트워크 탭 열기> 대체가 필요한 리소스를 클릭하고 응답 헤더에서 Content-Type 헤더를 찾습니다). Content-Type 헤더는 필터와 일치해야합니다.

여전히 작동하지 않으면 응용 프로그램 서버가 gzip으로 처리 된 내용을 반환 할 가능성이 있습니다 (응답 헤더에서 Content-Encoding : gzip을 확인하십시오). 이 경우 대체가 작동하지 않는다는 것은 의미가 있습니다.

는 아파치 설정에서 다음 지시문을 추가, 그 해결하려면 :

RequestHeader unset Accept-Encoding 

더 많은 데이터가 네트워크를 통해 전송 될 필요가 있기 때문에이 성능 저하를 초래 있습니다. 현재 가상 호스트에 대한 모든 요청에 ​​적용되므로 프로덕션 환경에서는이 솔루션을 권장하지 않습니다.

<Location "/hello/path/to/your/javascript/file.js"> 
    RequestHeader unset Accept-Encoding 
    AddOutputFilterByType SUBSTITUTE text/html 
    Substitute "s|hello-world-0.0.7|hello|ni" 
</Location> 
+0

안녕 주셔서 감사합니다 : 당신은 단지 하나의 파일에 대한 대체를 사용해야 할 경우 아파치는 해당 파일에 대한 추가 작업을 수행하도록, 나는 블록에서 AddOutputFilterByType, 대체 및에 RequestHeader 지시어를 포장하는 것이 좋습니다 솔루션 및 유용한 의견을 제공합니다. 내 규칙의 콘텐츠 유형이 text/html 인 이유는 html.head.base 태그의 콘텐츠를 변경하는 데 사용되기 때문입니다. 내 가상 호스트 정의에 제안 된 구성을 추가하고 매력처럼 작동합니다. 고마워! – zappee

+0

질문이 하나 더있을 수 있습니까? URL이 http://web.mydomain.com/hello/ 인 경우 위의 규칙이 적용됩니다. 이 경우 html.head.base 태그가 예상대로 변경되었습니다. 그러나 요청 URL이 http://web.mydomain.com/hello/whatever이면 html.head.base 태그에 원본 콘텐츠가 포함됩니다. 그것은 변경되지 않습니다. 왜? – zappee

+0

구성에 정확히 무엇을 넣었습니까? 위치 지정 문은 포함 된 구성 지정 문 범위를 위치 이후의 경로로 시작하는 URL로 제한합니다. 따라서 두 번째 URL이 다른 경우에는 의미가 있습니다. 그것이 아니라면, 나는 무슨 일이 일어나고 있는지 잘 모르겠습니다. 위치 지정 문을 제거하면 문제가 해결되지만 필자가 원래의 대답에서 언급 한 성능 저하를 최소화하는 것이 좋습니다. – oneton