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