Apache 프록시 : 유효한 프로토콜 핸들러가 없습니다.


192

하위 서버를 다른 서버에 프록시하려고합니다. 내 httpd.conf :

RewriteEngine On
ProxyPreserveHost On
RewriteRule .*subdir/ https://anotherserver/subdir/ [P]

문제는 아파치가 항상 이것을 기록한다는 것입니다.

AH01144: No protocol handler was valid for the URL /subdir/. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer: http://localhost/

인터넷을 검색 한 후 다음 모듈을 활성화했습니다.

LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule rewrite_module modules/mod_rewrite.so

(나는 그들 모두가 필요하지는 않지만 하나만 누락되지 않도록 활성화했습니다.)

그러나이 오류는 여전히 나타나고 클라이언트는 HTTP 500을받습니다.

이 문제를 어떻게 해결할 수 있습니까?


프록시 요청에 HTTPS 처리기가 필요한 것 같습니다. 대신 HTTP를보십시오 ...
Deadooshka

9
난 당신이 필요하다고 생각 mod_sslSSLProxyEngine함께ProxyPass
Deadooshka

@Deadooshka 예, 작동합니다. 답변으로 게시하면, 받아 들일 수 있습니다
das_j

답변:


422

mod_proxy_http활성화 하지 않은 경우 발생할 수 있습니다

sudo a2enmod proxy_http

https 기반로드 밸런서가 작동하게하려면 다음을 활성화해야합니다.

sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http

23
또한 사용 사례를 위해 'sudo a2enmod proxy_wstunnel'을 수행해야했습니다.
JimJty

8
나를 위해 그것은이었다 LoadModule ssl_module modules/mod_ssl.so. 나도 사용해야했다 SSLProxyEngine on.
Chloe

1
또한 활성화해야했습니다mod_slotmem_shm
SiggyF

2
나를 위해 WAMP에, 나는 메뉴를 통해 위의 모듈을 설치하고 주석에 한 LoadModule slotmem_shm_module modules/mod_slotmem_shm.so을 httpd.conf에
Flion

1
sudo a2enmod proxy_connectCONNECT를 사용하여 https를 터널링하는 것이 필요했습니다
Raul Nohea Goodness

22

Apache2.4 + php5-fpm 설치가 작동하려면 다음 Apache 모듈을 활성화해야했습니다.

sudo a2enmod proxy
sudo a2enmod proxy_fcgi

필요가 없으며 proxy_http모든 .php파일을 php5-fpm으로 바로 보냅니다 .

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost"
</FilesMatch>

예, fcgi의 경우 이것은 사실이지만 HTTP 프록시가 있습니다. :)
das_j 2016

10

제 경우에는 proxy_ajp모듈이 필요했습니다 .

a2enmod proxy proxy_http proxy_ajp 

8

이것은 Apache / 2.4.18 (Ubuntu) 설정에서 발생했습니다. 제 경우에는 내가 본 오류는 다음과 같습니다.

... AH01144: No protocol handler was valid for the URL /~socket.io/. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

이와 관련된 구성은 다음과 같습니다.

  ProxyPass /~socket.io/ ws://127.0.0.1:8090/~socket.io/
  ProxyPassReverse /~socket.io/ ws://127.0.0.1:8090/~socket.io/

" No protocol handler was valid for the URL /~socket.io/"는 Apache가 " ws://127.0.0.1:8090/~socket.io/"(으) 로 전송 된 요청을 처리 할 수 ​​없음을 의미했습니다.

나는 proxy_http로드했지만 필요했습니다 proxy_wstunnel. 그것이 가능 해지면 모든 것이 좋았습니다.


6

나중에 참조 할 수 있도록 위의 여러 답변에서 제안 된 a2enmod는 데비안 / 우분투 용입니다. Red Hat은이를 사용하여 Apache 모듈을 활성화하지 않고 httpd.conf에서 LoadModule 문을 사용합니다.

자세한 내용은 /server/56394/how-do-i-enable-apache-modules-from-the-command-line-in-redhat

해결 / 정답은 OP에 대한 의견에 있습니다.

ProxyPass와 함께 mod_ssl과 SSLProxyEngine이 필요하다고 생각합니다 – Deadooshka May 29 '14 at 11:35

@Deadooshka 예, 작동합니다. 답변으로 게시하면, 받아 들일 수 있습니다 – das_j May 29 '14 at 12:04


4

다른 이유로 동일한 오류 메시지가 있었으므로 여기에 답변을 게시하고 있습니다.

예를 들어, 아파치 httpd를 사용하여 프로토콜 A의 소스에서 프로토콜 B의 대상으로 요청을 프록시하는 경우이 오류 메시지가 발생할 수 있습니다.

내 상황의 예는 다음과 같습니다.

AH01144 : URL / sockjs-node / info에 유효한 프로토콜 핸들러가 없습니다 (체계 'ws').

위의 경우에 일어난 일은 단순히 다음과 같습니다. 경로 / sockjs-node를 기반으로 nodejs에 websocket 요청을 프록시하기 위해 mod 프록시를 활성화했습니다.

문제는 노드가 websocket 요청에 / sockjs-node 경로를 독점적으로 사용하지 않는다는 것입니다. 또한이 경로를 사용하여 웹 소켓에 대한 정보를 제공하는 REST 진입 점을 호스팅합니다.

이 방식으로 애플리케이션이 http : // localhost : 7001 / sockjs-node / info를 열려고 하면 Apache httpd는 나머지 호출을 HTTP 프로토콜에서 Webscoket 엔드 포인트 호출로 라우팅하려고합니다. 노드가이를 수락하지 않았습니다.

이것은 위의 예외로 이어집니다.

따라서 올바른 모듈을 활성화하더라도 잘못된 전달을 시도하면 대상 서버에서 사용하려고 시도한 프로토콜이 유효하지 않음을 알리는 apache httpd로 끝납니다.


아마도 proxy_wstunnel 일 것입니다. 허용 된 답변에 대한 첫 번째 의견을 참조하십시오.
Lerk April


0

나를 위해 xampp에서 위에서 언급 한 모든 답변이 여전히 작동하지 않습니다. 아래 모듈을 활성화하면 가상 호스트가 다시 작동합니다

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.