Назад | Перейти на главную страницу

Проблемы с ProxyPass и ProxyPassReverse при проксировании на localhost и другой порт TCP

Я пытаюсь использовать 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

Затем вы можете отключить это логическое значение и заставить его работать.