Durante el inicio del sistema CentOS 7, el inicio de nginx falla con el siguiente error:
2014/08/04 17:27:34 [emerg] 790#0: bind() to a.b.c.d:443 failed (99: Cannot assign requested address)
Sospecho que esto está sucediendo debido a que las interfaces de red aún no están activas antes de intentar enlazar a esa dirección IP para servir un vhost sobre SSL.
Supongo que necesito especificar el network.service como un requisito para el nginx.service, pero no puedo encontrar el servicio de red en / etc / systemd / en absoluto.
¿Cómo puedo configurar el orden de servicio o las dependencias en systemd?
Respuestas:
Debe, como mínimo,
After=network.target
en la[Unit]
sección del archivo de su unidad, asegurarse de que la red esté activa antes de iniciar nginx. No tengo idea de por qué su archivo de unidad no lo tiene.Aquí hay un ejemplo completo de mi práctico sistema Fedora, tal como lo envió Fedora:
fuente
Desde el registro de errores, se parece a su configuración nginx. El archivo tiene una directiva de escucha con una dirección IP explícita:
Esto significa que nginx no arrancará a menos que su interfaz de red está activa y el ABCD IP ha sido asignada a la interfaz.
Tienes dos opciones:
Como se describe en http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/, el network.target solo indica que la pila de administración de red está activada [...] si las interfaces de red ya están configuradas cuando se alcanza es indefinido.
Si desea asegurarse de que la dirección IP ya esté asignada y que la interfaz esté activa, debe agregar network-online.target al archivo de unidad systemd de su nginx.
Su archivo /etc/systemd/system/multi-user.target.wants/nginx.service debe tener network-online.target en las líneas After = y Requiere =.
fuente
network-online.target
, en caso de que alguien también se pregunte: sí, ambosRequires=
yAfter=
son necesarios porqueRequires=
(posiblemente sorprendentemente) no implica un pedido entre la unidad requerida y la unidad requerida.