Apache не может соединиться с удаленным MySQL, но mysql командная строка с того же сервера может

Признаки:

  • Я выполняю CentOS 6.
  • Я могу соединиться с удаленным MySQL из командной строки: mysql -h a.b.c.d -u user -p -D db.
  • Ремесленные команды Laravel работают на локальной командной строке, может также соединиться: artisan migrate.
  • Но тот же код Laravel при пробежке Apache не может соединиться.
  • Ошибка: SQLSTATE[HY000] [2003] Can’t connect to MySQL server on ‘a.b.c.d’ (13)
  • Справка MySQL на причинах "доступа запрещен" не помогла.

Что я делаю неправильно? (Я сам отвечающий за потомство.)

0
задан 1 October 2014 в 02:09
2 ответа

Ключом к этой проблеме является (13) , что означает «Permission Denied» (через perror ). Поскольку я могу подключиться из командной строки, разрешение должно быть в веб-приложении. Поскольку я знаю, что учетные данные в веб-приложении совпадают с учетными данными в командной строке, единственное, что осталось, - это веб-сервер.

Через strace я обнаружил, что SELinux блокирует его. Чтобы исправить:

sudo setsebool -P httpd_can_network_connect = 1

При этом SELinux постоянно разрешает сетевые подключения вне httpd.

1
ответ дан 4 December 2019 в 17:10

Чтобы увидеть, какие флаги установлены в процессах httpd

getsebool -a | grep httpd

Чтобы разрешить Apache подключаться к удаленной базе данных через SELinux

setsebool httpd_can_network_connect_db 1

Используйте параметр -P, чтобы сделать изменение постоянным. Без этой опции логическое значение сбрасывалось бы на 0 при перезагрузке.

setsebool -P httpd_can_network_connect_db 1
1
ответ дан 6 August 2021 в 17:09

Теги

Похожие вопросы