Вопрос или проблема
У меня возникают проблемы с настройкой прокси в Apache 2.2
Когда я пытаюсь его запустить, я получаю ошибку Invalid command 'ProxyPass'
. Это может означать, что proxy_http_module
не загружен. Однако когда я смотрю отладочную информацию, он, кажется, загружен. Например,
E:\Apache\bin>httpd -e debug
[Пт. 21 Авг 2015 15:48:55] [debug] mod_so.c(246): загружен модуль actions_module
...
[Пт. 21 Авг 2015 15:48:55] [debug] mod_so.c(246): загружен модуль proxy_ajp_module
[Пт. 21 Авг 2015 15:48:55] [debug] mod_so.c(246): загружен модуль proxy_http_module <-----
[Пт. 21 Авг 2015 15:48:55] [debug] mod_so.c(246): загружен модуль setenvif_module
....
[Пт. 21 Авг 2015 15:48:55] [debug] mod_so.c(246): загружен модуль jk_module
[Пт. 21 Авг 2015 15:48:55] [notice] Отключено использование AcceptEx() API WinSock2
Ошибка синтаксиса в строке 84 файла E:/Apache/conf/extra/httpd-ssl.conf:
Неверная команда 'ProxyPass', возможно, опечатка или определена модулем, не включенным
в конфигурацию сервера
Так что мне кажется, что proxy_http_module загружается. Я не понимаю, почему он не знает, что такое ProxyPass.
Я, безусловно, включил его в своем файле httpd.conf
#LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule negotiation_module modules/mod_negotiation.so
#LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so # <--------------
#LoadModule rewrite_module modules/mod_rewrite.so
Примечание: Я пытаюсь сделать это через SSL-соединение, поэтому я загружаю httpd-ssl.conf
позже в моем файле httpd.conf
<IfModule ssl_module>
Include conf/extra/httpd-ssl.conf
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
Затем в httpd-ssl.conf
я настроил запись VirtualHost
<VirtualHost _default_:443>
DocumentRoot "E:/Apache/htdocs"
### условный IP
ServerName 127.12.34.56:443
ServerAdmin [email protected]
ErrorLog "E:/Apache/logs/error.log"
TransferLog "E:/Apache/logs/access.log"
#ProxyRequests Off
### Здесь возникает ошибка
ProxyPass / http://myfirewalledserver:80/
#ProxyPassReverse / http://myfirewalledserver:80/
</VirtualHost>
Что я пропустил здесь?
proxy_http модуль требует proxy, и директива ProxyPass определена в последнем.
Убедитесь, что он также загружен.
Спасибо Милду Сингу
Загрузите модуль, выполнив эту команду:
sudo a2enmod proxy_http
Ответ или решение
Ошибка "Invalid command ‘ProxyPass’" при запуске Apache 2.2 может возникать по нескольким причинам, даже если вы видите, что модуль proxy_http_module
загружен в процессе отладки. Давайте разберем это более подробно и выясним, что может быть не так.
1. Проверка загрузки необходимых модулей
Как указано в вашем процессе отладки, действительно, модуль proxy_http_module
загружен. Однако для корректной работы директивы ProxyPass
требуется, чтобы также был загружен основной модуль proxy
. Этот модуль отвечает за функции совместимости с прокси и, соответственно, директивы связанные с проксированием.
Вы должны убедиться, что в файле конфигурации httpd.conf
или в других включенных файлах конфигурации загружен модуль proxy
. Проверьте, чтобы следующая строка была раскомментирована:
LoadModule proxy_module modules/mod_proxy.so
2. Порядок загрузки модулей
Убедитесь, что порядок загрузки модулей правильный. Модуль proxy_http_module
загружается после proxy_module
, так как он зависит от него. Обратный порядок загрузки может привести к ошибкам. Например:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
3. Предоставление правильного контекста
Также учтите, что директивы ProxyPass
и ProxyPassReverse
должны находиться в блоке <VirtualHost>
, который настроен на правильный IP и порт, как у вас в конфигурации. Если вы переместили или изменили этот блок, убедитесь, что конфигурация исправна.
4. Дополнительные модули для SSL
Если вы работаете в контексте SSL, это также может потребовать загрузки дополнительных модулей, таких как ssl_module
, как вы уже сделали. Убедитесь, что он загружается и работает корректно:
LoadModule ssl_module modules/mod_ssl.so
5. Проверка ошибок
После внесения необходимых изменений, убедитесь, что вы проверяете файл error.log
, чтобы увидеть, есть ли другие ошибки, которые могут указывать на проблемы с конфигурацией. Это также может помочь в диагностике.
6. Перезапуск Apache
После внесения всех изменений не забудьте перезапустить сервер Apache командой:
httpd -k restart
Заключение
Если вы выполните все указанные шаги и убедитесь, что все необходимые модули загружены и находятся в правильном порядке, ошибка "Invalid command ‘ProxyPass’" должна исчезнуть. Если проблема все же остается, возможно, стоит рассмотреть возможность конфликта с другими модулями или настройками в вашем Apache.