하위 서버를 다른 서버에 프록시하려고합니다. 내 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을받습니다.
이 문제를 어떻게 해결할 수 있습니까?
답변
mod_proxy_http
활성화 하지 않은 경우 발생할 수 있습니다
sudo a2enmod proxy_http
https 기반로드 밸런서가 작동하게하려면 다음을 활성화해야합니다.
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
답변
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>
답변
제 경우에는 proxy_ajp
모듈이 필요했습니다 .
a2enmod proxy proxy_http proxy_ajp
답변
이것은 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
. 그것이 가능 해지면 모든 것이 좋았습니다.
답변
나중에 참조 할 수 있도록 위의 여러 답변에서 제안 된 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
답변
다른 이유로 동일한 오류 메시지가 있었으므로 여기에 답변을 게시하고 있습니다.
예를 들어, 아파치 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로 끝납니다.
답변
나는 일을하려고 uwsgi://
했지만 어떻게 든 매뉴얼은 실제로 내가 필요하다는 것이 분명하다고 생각했다 mod_proxy_uwsgi
. 아니었다. mod_proxy_uwsgi 또는 mod_uwsgi를 컴파일하는 방법 은 다음과 같습니다 .
