Nginx
從 Puppet nginx 模組中刪除“ipv6only”選項
我的 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; ...
現在,這個配置是由 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修復。因此,您可以將其從模板或升級模組中刪除。