I see in the web template where it checks to see if /proc/net/if_inet6
exists and turns off the listen for [::]:80
, but there’s still one in the default nginx file.
I added these to try to fix that:
- exec: sed -i '/listen \[::\]:80 default_server;/d' /etc/nginx/sites-available/default
- exec: sed -i 's/listen 80 default_server;/listen 0.0.0.0:80 default_server ipv6only=off;/' /etc/nginx/sites-available/default
- exec: sed -i 's/listen 80 default_server;/listen 0.0.0.0:80 default_server ipv6only=off;/' /etc/nginx/conf.d/discourse.conf
But I still see this in the logs:
2025/09/02 21:34:29 [emerg] 359#359: socket() [::]:80 failed (97: Address family not supported by protocol)
2025/09/02 21:34:34 [notice] 3240#3240: signal process started
2025/09/02 21:34:34 [error] 3240#3240: open() "/run/nginx.pid" failed (2: No such file or directory)
A long time ago, it seemed impossible:
Has anyone actually made Discourse work with IPv6 disabled at the kernel level?
(Why? Because the VM someone supplied has IPv6 turned off. It took months for them to provision a VM that they would let me access.)