Nginx

ngnix 啟動 isse ipv4 & ipv6

  • May 19, 2013

我正在嘗試設置我的第一個 nginx 伺服器,但在設置 ipv4 和 ipv6 時遇到了問題。

我在配置文件的頂部有這個(它是配置文件中唯一的伺服器塊):

   server {

           # Listen for requests on these ports 
           listen 80 default;
           listen [::]:80 default_server;
   }

這是我嘗試啟動 ngnix 時遇到的錯誤:

* Restarting nginx nginx
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

任何幫助表示讚賞。

您嘗試綁定到 IPv4 兩次。

       listen 80 default;
       listen [::]:80 default_server;

預設情況下(在 Linux 上),第二個listen指令同時綁定到 IPv4 和 IPv6,除非您使用該ipv6only選項明確要求它僅綁定到 IPv6。

有兩種方法可以解決此問題。選擇一個(但不能同時選擇兩個):

  1. 刪除第一個listen指令作為多餘的。第二個指令將涵蓋通過 IPv4 映射的 IPv6 的 IPv4 和 IPv6 連接。唯一的缺點是您的日誌將以映射形式顯示 IPv4 地址,例如::ffff:203.0.113.25.
  2. 添加ipv6only=on到第二個listen指令。

請注意,從 nginx 1.3.4 開始,ipv6only=on現在是預設配置,這使得您的原始配置在這些更高版本中是必需的。在此之前,預設值取決於作業系統。

引用自:https://serverfault.com/questions/489843