先在終端下輸入以下指令,看看輸出結(jié)果有沒有–with-ipv6,沒有的話就需要重新編譯帶有ipv6支持的nginx了。
編譯nginx就不在這里說了,下面講一下正確地配置nginx讓其同時監(jiān)聽IPv4和IPv6的端口(包括http協(xié)議的80和https協(xié)議的443端口),同時介紹一下只監(jiān)聽IPv6和特定IPv6地址的方法。
我想同時監(jiān)聽IPv4和IPv6地址
編輯/etc/nginx/conf.d/default.conf,將server段的listen語句改成:
網(wǎng)上很多中文教程寫的是listen :80 [::]:80,簡直坑死人……只需要listen [::]:80就可以了,Nginx會同時監(jiān)聽IPv4和IPv6的80端口,如果再寫IPv4地址的80端口就會出現(xiàn)重復(fù)綁定的錯誤。
06 Nov. 2014 Update
從Nginx 1.3 的某個版本起,默認(rèn)ipv6only是打開的,也就是上面的語句只會監(jiān)聽IPv6的端口而不會監(jiān)聽IPv4的端口。雖然Linux系統(tǒng)默認(rèn)是監(jiān)聽IPv6的某個端口會同時監(jiān)聽對應(yīng)的IPv4的端口,但是FreeBSD是默認(rèn)分開IPv6和IPv4的。所以為了一致性的考慮(新版本Nginx必須推薦這樣做),請使用分開監(jiān)聽的方法:
1
2 |
listen 80;
listen [::]:80 ipv6only=on;
|
我只想監(jiān)聽IPv6地址,不想監(jiān)聽IPv4地址
沒問題,將listen寫成:
1 |
listen [::]:80 default ipv6only=on;
|
我想監(jiān)聽一個指定的IPv6地址
和IPv4指定地址一樣,就在listen里寫上完整的地址就OK了!以一個IPv6地址為例:
1 |
listen [2607:f0d0:1002:51::4]:80;
|
我想要IPv6監(jiān)聽SSL(443)端口
編輯你原來監(jiān)聽443端口的配置文件,如/etc/nginx/conf.d/ssl.conf,修改listen語句為:
后面的ssl可省掉。443端口的其它用法和80端口一樣,這里就不贅述了。
修改完成后,必須重啟nginx服務(wù)(reload是不行的):
最后的最后,IPv6大部分都還是教育網(wǎng)的筒子們吧?本博客是支持IPv6訪問的哦!如果默認(rèn)的DNS不給解析的話,可以在hosts文件里添加下面兩行:
1
2 |
2604:180::728f:8d23 www.librehat.com
2604:180::728f:8d23 librehat.com
|
參考文章: How to enable Nginx IPv6 support