Прокси-сервер Apache: нет обработчика протокола была действительна



Я пытаюсь прокси подкаталог на другой сервер. Мой файл httpd.conf:



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


проблема в том, что Apache всегда регистрирует это:



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.



как я могу это исправить?

667   6  

6 ответов:

Это может произойти, если у вас нет 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 

чтобы уточнить для дальнейшего использования, a2enmod, как предлагается в нескольких ответах выше, предназначен для Debian/Ubuntu. Red Hat не использует это для включения модулей Apache-вместо этого он использует операторы LoadModule в httpd.конф.

подробнее здесь: https://serverfault.com/questions/56394/how-do-i-enable-apache-modules-from-the-command-line-in-redhat

разрешение / правильный ответ находится в комментариях к OP:

Я думаю, что вам нужен mod_ssl и SSLProxyEngine с ProxyPass-Deadooshka 29 мая ' 14 в 11: 35

@Deadooshka Да, это работает. Если вы опубликуете это в качестве ответа, я могу принять его – das_j 29 мая ' 14 в 12: 04

Я пишу ответ здесь, так как у меня было то же сообщение об ошибке по другой причине.

это сообщение об ошибке может произойти, например, если вы используете apache httpd для прокси-запросов от источника по протоколу A до цели по протоколу B.

вот пример моей ситуации:

AH01144: нет обработчика протокола, является допустимым URL-адреса /sockjs-узел/информация (схема 'ws').

в случае выше, что происходило было просто следующее. Я включил прокси-сервер mod для прокси-запросов websocket к nodejs на основе path / sockjs-node.

проблема в том, что node не использует путь /sockjs-node исключительно для запросов websocket. Он также использует этот путь для размещения точек входа REST, которые предоставляют информацию о websockets.

таким образом, когда приложение попытается открыть http://localhost:7001/sockjs-node/info, apache httpd будет пытаться направить остальные вызов из протокола HTTP в вызов конечной точки Webscoket. Узел не принял этого.

Это приводит к исключению выше.

поэтому помните, что даже если вы включите правильные модули, если вы попытаетесь сделать неправильную пересылку, это закончится тем, что apache httpd сообщит вам, что протокол, который вы пытались использовать на целевом сервере, недействителен.

Я пытался получить uwsgi:// работает, но как-то руководство думало, что мне было ясно, что мне действительно нужно mod_proxy_uwsgi. Это было не так. Вот как вы это делаете:как скомпилировать mod_proxy_uwsgi или mod_uwsgi?

Comments

    Ничего не найдено.