Во время загрузки системы CentOS 7 запуск nginx завершается с ошибкой:
2014/08/04 17:27:34 [emerg] 790#0: bind() to a.b.c.d:443 failed (99: Cannot assign requested address)
Я подозреваю, что это происходит из-за того, что сетевые интерфейсы еще не подключены, прежде чем пытаться привязать этот IP-адрес для обслуживания виртуального хоста через SSL.
Я думаю, мне нужно указать network.service в качестве требования для nginx.service, но я не могу найти сетевой сервис в / etc / systemd /.
Как я могу настроить порядок обслуживания или зависимости в systemd?
Ответы:
Вам необходимо, как минимум,
After=network.target
в[Unit]
разделе файла вашего модуля убедиться, что сеть запущена до запуска nginx. Я понятия не имею, почему ваш файл модуля не имеет его.Вот полный пример из моей удобной системы Fedora, поставляемой Fedora:
источник
Из журнала ошибок это выглядит как ваш конфиг nginx. Файл имеет директиву listen с явным IP-адресом:
Это означает, что nginx не запустится, если ваш сетевой интерфейс не подключен и IP-адрес abcd не назначен интерфейсу.
У вас есть два варианта:
Как описано в http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/, network.target указывает только на то, что стек сетевого управления работает [...] Независимо от того, настроены ли какие-либо сетевые интерфейсы, когда он достигнут не определено
Если вы хотите убедиться, что IP-адрес уже назначен, а интерфейс включен, вам нужно добавить network-online.target в системный файл вашего nginx.
Ваш /etc/systemd/system/multi-user.target.wants/nginx.service файл должен иметь network-online.target в строках After = и Require =.
источник
network-online.target
- в случае, если кто-то также задается вопросом: да, и то,Requires=
и другоеAfter=
необходимо, потому чтоRequires=
(возможно удивительно) не подразумевает упорядочение между требуемой единицей и требуемой.