Я пытаюсь использовать ProxyPass и ProxyPassReverse для прокси-запросов через Apache к другому экземпляру сервера, который привязан к localhost на другом TCP-порту, на котором существует Vhost (VHost привязан к: 80, когда цель привязана к: 5000).
Однако я постоянно получаю HTTP 503 при доступе к Location.
Согласно Документация ProxyPass...
<VirtualHost *:80>
ServerName apacheserver.domain.local
DocumentRoot /var/www/redmine/public
ErrorLog logs/redmine_error
<Directory /var/www/redmine/public>
Allow from all
Options -MultiViews
Order allow,deny
AllowOverride all
</Directory>
</VirtualHost>
PassengerTempDir /tmp/passenger
<Location /rhodecode>
ProxyPass http://127.0.0.1:5000/rhodecode
ProxyPassReverse http://127.0.0.1:5000/rhodecode
SetEnvIf X-Url-Scheme https HTTPS=1
</Location>
Я протестировал привязку альтернативного сервера к IP-адресу интерфейса, и возникла та же проблема.
Запрос на обслуживание сервера является экземпляром вставки python: httpserver, и он был настроен на использование суффикса / rhodecode (как я видел, это упоминалось в других сообщениях о ProxyPass). В документация из самого проекта, Rhodecode, сообщает об использовании вышеуказанного.
Проблема сохраняется, если я нацелен на другой сервер, обслуживающий другой порт.
Допускает ли ProxyPass проксирование на другой порт TCP?
[Обновить]
Я не буду удалять это, если кто-то столкнется с той же проблемой.
Я установил ErrorLog, и в этом ErrorLog сообщалось о следующей ошибке:
[Wed Nov 09 11:36:35 2011] [error] (13)Permission denied: proxy: HTTP: attempt to connect to 127.0.0.1:5000 (192.168.100.100) failed
[Wed Nov 09 11:36:35 2011] [error] ap_proxy_connect_backend disabling worker for (192.168.100.100)
После некоторых дополнительных исследований я попытался установить для SELinux разрешающий (echo 0 >/selinux/enforce
), и попробуй еще раз.
Получается SELinux boolean httpd_can_network_connect
должен быть установлен на 1
.
Для сохранения при перезагрузке:
setsebool -P httpd_can_network_connect=1
Более приятный способ исправить это (получить свой пирог и съесть его) в отношении SELinux - запустить эту команду, чтобы типы httpd_t знали об используемом вами порту.
semanage port -a -p tcp -t http_port_t 5000
Затем вы можете отключить это логическое значение и заставить его работать.