Selama sistem CentOS 7 boot, nginx start gagal dengan kesalahan berikut:
2014/08/04 17:27:34 [emerg] 790#0: bind() to a.b.c.d:443 failed (99: Cannot assign requested address)
Saya menduga ini terjadi karena antarmuka jaringan belum bangun sebelum mencoba mengikat ke alamat IP untuk melayani vhost melalui SSL.
Dugaan saya adalah saya perlu menentukan network.service sebagai persyaratan untuk nginx.service, tetapi saya tidak dapat menemukan layanan jaringan di / etc / systemd / at all.
Bagaimana saya bisa mengkonfigurasi urutan layanan atau dependensi dalam systemd?
Jawaban:
Anda perlu, setidaknya,
After=network.target
di[Unit]
bagian file unit Anda, untuk memastikan bahwa jaringan sudah aktif sebelum memulai nginx. Saya tidak tahu mengapa file unit Anda tidak memilikinya.Ini adalah contoh lengkap dari sistem Fedora saya yang praktis, seperti yang dikirimkan oleh Fedora:
sumber
Dari log kesalahan, sepertinya konfigurasi nginx Anda. file memiliki arahan mendengarkan dengan alamat ip eksplisit:
Ini berarti bahwa nginx tidak akan memulai kecuali antarmuka jaringan Anda dan IP abcd telah ditetapkan untuk antarmuka.
Anda memiliki dua opsi:
Seperti yang dijelaskan dalam http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ the network.target hanya menunjukkan bahwa tumpukan manajemen jaringan sudah habis [...] Apakah ada antarmuka jaringan yang sudah dikonfigurasi ketika tercapai tidak terdefinisi.
Jika Anda ingin memastikan bahwa alamat IP sudah ditetapkan dan antarmuka sudah habis, Anda perlu menambahkan network-online.target ke file unit systemd nginx Anda.
File /etc/systemd/system/multi-user.target.wants/nginx.service Anda seharusnya memiliki network-online.target di baris After = dan Membutuhkan =.
sumber
network-online.target
- jika seseorang juga bertanya-tanya: ya, keduanyaRequires=
danAfter=
perlu karenaRequires=
(bisa dibilang mengejutkan) tidak menyiratkan pemesanan antara unit yang diperlukan dan yang membutuhkan.