Во время загрузки системы 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:
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Из журнала ошибок похоже, что ваша конфигурация nginx. В файле есть директива listen с явным IP-адресом:
listen a.b.c.d:443
Это означает, что nginx не запустится, если ваш сетевой интерфейс не включен. и IP-адрес a.b.c.d был назначен интерфейсу.
У вас есть два варианта:
Как описано в http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ network.target указывает только на то, что стек сетевого управления активен [...] Не определено, настроены ли уже какие-либо сетевые интерфейсы, когда он достигнут.
Если вы хотите убедиться, что IP-адрес уже назначен и интерфейс работает, вам нужно добавить network-online.target в файл модуля systemd вашего nginx.
В вашем файле /etc/systemd/system/multi-user.target.wants/nginx.service в строках After = и Requires = должен быть указан network-online.target.
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target network-online.target
Requires=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target