2014-11-11 5 views
0

아파치를 프록시 서버로 사용하여 일부 요청을 다른 포트에서 실행중인 서비스로 리디렉션하려고합니다. 로아파치 mod_rewrite가 작동하지 않습니다.

sudo apt-get install apache2 
sudo a2enmod rewrite 
sudo a2enmod proxy 
sudo a2enmod proxy_http 

그런 다음 편집 /etc/apache2/httpd.conf을 : http://httpd.apache.org/docs/2.4/rewrite/proxy.html

내가 정확히 설치했던 (그리고 아무것도) : 나는 여기 지침에 따라 시도하고있어

RewriteEngine on 
RewriteRule ^/(.*) http://localhost:9200/$1 [P] 
ProxyPassReverse/http://localhost:9200/ 

마지막으로, apache2 (sudo service apache2 restart)가 다시 시작되었습니다. 결국, 나는 그 규칙에 몇 가지 실제 조건을 추가 할 것이지만, 나는 지금 그것을 테스트하려고하고있다.

하지만 작동하지 않습니다. curl -XGET localhost:80/foo이 404 응답으로 실패하면 curl -XGET loaclhost:9200/foo이 성공합니다. 오류 로그 또는 액세스 로그에 유용한 것은 없습니다.

답변

0

Apache 역 프록시 명령을 다음과 같이 설정하는 것이 좋습니다. ProxyPass 설정뿐만 아니라 ProxyRequestsProxyPreserveHost 설정주의 :

<IfModule mod_proxy.c> 

    # Proxy specific settings 
    ProxyRequests Off 
    ProxyPreserveHost On 

    <Proxy *> 
    AddDefaultCharset off 
    Order deny,allow 
    Allow from all 
    </Proxy> 

    ProxyPass/http://localhost:9200/ 
    ProxyPassReverse/http://localhost:9200/ 

</IfModule> 

을 나는 것 또한이 같은 -I 옵션을 사용하여 curl의 응답 출력의 헤더를 확인하는 것이 좋습니다 :

curl -I localhost:80/foo 

그것은해야을 서버의 정확한 응답을 보여 주므로 실패 할 수도 있고 작동 할 수도있는 것을 완전히 이해할 수 있습니다.

+0

고마워요. 내가 결국 RewriteRule을 사용하려고하는 이유는 내가 결국 다소 복잡한 RewriteCond를 원할 수도 있기 때문입니다. 단지 ProxyPass로 가능한 것보다 훨씬 낫습니다. –

+0

@ JoeK 당신은 두 가지 문제를 혼합하고 있습니다. 내가 가지고있는 설정을 사용하는 서버 자체는'http : // localhost : 9200 /'에 대한 모든 트래픽을 프록시합니다. 'mod_rewrite'로 무엇을하는지는 완전히 다른 논리입니다. – JakeGould

+0

이러한 설정을 사용하지만 특정 요청 방법 만 전달할 수있는 방법이 있습니까? 한 걸음 뒤로 물러나십시오 - 내가하고 싶은 것은 프록시 만 GET 요청이며 특정 경로에 대한 요청 만하고 다른 모든 것을 거부합니다. 이 같은 설정을 사용하여 추가 재 작성 규칙을 시도했지만 재 작성 전에 프록시가 발생하고있는 것 같았습니다. 예를 들어'RewriteRule. * - [F]'를 추가했지만 모든 요청은 여전히 ​​성공적으로 처리되었습니다. –

관련 문제