Nginx

從 Puppet nginx 模組中刪除“ipv6only”選項

  • November 10, 2016

我的 nginx 伺服器(服務於多個虛擬主機)無法啟動:

Nov 08 23:54:43 foo systemd[1]: Starting nginx - high performance web server...
Nov 08 23:54:43 foo nginx[3830]: nginx: [emerg] duplicate listen options for [::]:8081 in /etc/nginx/sites-enabled/000-mysite.vhost:3
Nov 08 23:54:43 foo nginx[3830]: nginx: configuration file /etc/nginx/nginx.conf test failed
Nov 08 23:54:43 foo systemd[1]: nginx.service: control process exited, code=exited status=1
Nov 08 23:54:43 foo systemd[1]: Failed to start nginx - high performance web server.
Nov 08 23:54:43 foo systemd[1]: Unit nginx.service entered failed state.
Nov 08 23:54:43 foo systemd[1]: nginx.service failed.

我已將問題確定為listen綁定到 IPv4 和 IPv6 的同一 TCP 埠的兩個指令,其中ipv6only使用了該選項:

[root@foo ~]# head /etc/nginx/sites-enabled/mysite.vhost 
server {
       listen 8081;
       listen [::]:8081 ipv6only=on;  
       ssl off;
...

所以這個配置可以正常工作:

[root@foo ~]# head /etc/nginx/sites-enabled/mysite.vhost 
server {
       listen 8081;
       listen [::]:8081;  
       ssl off;
...

[相關問題:https://serverfault.com/questions/638367/do-you-need-separate-ipv4-and-ipv6-listen-directives-in-nginx]

現在,這個配置是由 Puppet 通過puppet-nginx 模組提供的。有沒有辦法(通過 Puppet)不指定ipv6only選項,或以其他方式解決問題?

我不能說,你的木偶部分是什麼樣子的。無論如何, puppet-nginx 模組有 resource nginx::resource::vhost,我猜你會以某種方式使用它。該資源有選項ipv6_listen_options預設包括 ipv6only=on。所以你應該可以這樣呼叫它:

nginx::resource::vhost { 'example.com':
   ipv6_listen_options => '',
   # another options there
}

另一種可能性是您使用了ipv6only=on在模板中硬編碼的舊模組。它在 2 月通過這個 pull request修復。因此,您可以將其從模板或升級模組中刪除。

引用自:https://unix.stackexchange.com/questions/321879