Solarium получает отказ в доступе при попытке подключить apache solr по локальному IP-адресу

У меня есть сайт drupal 8 на том же физическом сервере, что и apache solr (5.2.1). Drupal 8 использует модуль contrib search_api_solr, который использует Solarium (установленный композитором) для связи с сервером solr с помощью http API.

Я успешно установил solr и создал ядро. Я могу запросить ядро, используя cUrl в командной строке Linux, используя различных пользователей Linux.

Я могу получить доступ к экрану администратора solr в браузере (через vpn с IP-адресом 192.168 или доменом, соответствующим этому) и просмотреть ядро, которое я создал в cli.

Однако модуль solr drupal не может подключиться к ядру сервера solr, и если я создаю индекс с помощью модуля drupal, он выдает ошибку php:

[ошибка] Uncaught PHP Exception Solarium\Exception\HttpException: «Ошибка Solr HTTP: сбой HTTP-запроса, не удалось подключиться к 127.0.0.1: разрешение отклонено» в модулях/search_api_solr/vendor/solarium/solarium/library/Solarium/Core/Client /Адаптер/Curl.php строка 248

Мой URL такой: http://127.0.0.1:8983/solr/mycore

Я получаю ту же ошибку для

http://192.168.254.78:8983/solr/mycore

or

http://127.0.0.1:8080/solr/mycore ‹‹ другой порт!

Почему Solarium не может отправлять http на локальный ip?

Обратите внимание, что на 8080 ничего не прослушивается, поэтому я подозреваю, что этот сбой http не имеет ничего общего с сервером solr.


person ransomweaver    schedule 24.02.2016    source источник


Ответы (1)


Проблема заключается в том, что SELinux на этом компьютере с CentOS6 не позволяет Apache общаться с портом 8983.

# setenforce 0

и наша ошибка исчезает.

# setenforce 1

ошибка вернулась

Проверьте /var/log/audit.log.

Вот что мы увидели:

type=AVC msg=audit(1457115397.149:224568): avc: deny { name_connect } for pid=4029 comm="httpd" dest=8983 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass= tcp_socket

Обратите внимание, что scontext — это httpd_t (apache), а tcontext — это port_t (порт).

Теперь по умолчанию apache может прослушивать только порты с http_port_t.

ТАК -- мы проверяем, является ли наш желаемый порт "8983"

Но сначала нам нужно "semanage", который предоставляется:

yum установить policycoreutils-python

Теперь проверьте наличие существующих http_port_r:

# semanage port -l | grep 'http_port_t'

http_port_t TCP 80, 81, 443, 488, 8008, 8009, 8443, 9000

pegasus_http_port_t TCP 5988

Теперь добавим 8983

# semanage port -a -t http_port_t -p tcp 8983

И проверьте еще раз -- да 8983 там

# semanage port -l | grep 'http_port_t'

http_port_t TCP 8983, 80, 81, 443, 488, 8008, 8009, 8443, 9000

pegasus_http_port_t TCP 5988

Больше никаких ошибок с применением SELinux

person ransomweaver    schedule 04.03.2016