刻意新建了一個虛擬機器來測試,虛擬機器有兩個 ip:a.a.a.a、b.b.b.b,希望 nginx 只偵聽 a.a.a.a:80
但當設定檔裡設定指定偵聽ip listen a.a.a.a:80;
後重新啟動系統,nginx 會啟動失敗並報錯Starting nginx: [emerg]: bind() to a.a.a.a failed (99: Cannot assign requested address)
,但此時只要手動systemctl start nginx
就能正常啟動。
去掉設定檔裡的ip listen 80;
後重啟系統,nginx 卻能正常啟動。
總結:
指定偵聽 ip 後不能隨系統自動啟動服務,但手動啟動服務使用正常。
不指定偵聽 ip 的話就能隨系統自動啟動服務,使用正常。
這種情況該如何解決?
臨時解決方法請參閱本篇評論(預設沒有展開)
推測的原因是因為nginx需要偵測ip去綁定,而偵測的時候系統沒有回傳值or偵測的時機過快導致系統不允許綁定,詳細等大師補充
看看nginx啟動的用戶是不是root用戶,80埠預設是只有root才能佔用的,還的修改相關配置,才能讓一般用戶佔用80埠。