1
cwbsw 2020-02-13 15:28:25 +08:00
systemd.socket
BindIPv6Only |
2
dndx 2020-02-13 16:05:05 +08:00
https://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses
Linux 上需要 socket 开 `IPV6_V6ONLY` flag。不同软件不一样,对于 Nginx 可以 `listen [::]:8000 ipv6only=on;` 开启这个 flag。 |
3
programV2 OP @dndx
@cwbsw 谢谢两位指点. 就是说如果没有设置 BindIPv6Only 这个 tag 默认就是同时监听 ipv6 和 ipv4 端口吗? 另外还有一个疑问就是我用的容器,镜像中虽然映射了 80:80 和 443:443 端口, 但是我 nginx.conf 配置文件中只设置 listen 443; 为什么 80 端口还能访问( http 和 tcping 都 ok)?? docker-compose.yml 设置如下, version: "3" services: nginx: image: nginx:$NGINX_TAG container_name: "${PROJECT_NAME}_nginx" ports: - 80:80 -443:443 |
4
dndx 2020-02-13 16:40:55 +08:00 1
不是同时监听,是内核默认会自动把 v4 过来的地址转换成特殊的 v6 地址。本意是为了方便开发双栈软件,这样软件只要支持 v6 一次就 v4 v6 通吃了。
|
5
programV2 OP @dndx 谢谢 V 友, 有两个疑问:1.刚进 nginx 容器内执行 netstat -tnlp, 发现 v4 的 80 和 443 都在监听, 我 nginx.conf 配置文件中只设置 listen 443;为什么还会监听 80 的端口呢??
2.内核默认会把 v4 过来的地址转换成特殊的 v6 地址, 但是我 nginx 容器内只监听 v4 的地址,那是不是说系统还得把这个特殊的 v6 地址再次转换成 v4 地址才能与容器内的 nginx 服务通信? |
6
dndx 2020-02-13 17:00:30 +08:00 via iPhone
listen 443 本来就是两个都监听的。你试试 listen [::]:443 ipv6only=on; 就只监听 v6 了。
|
7
programV2 OP @dndx 谢谢!但是我进 nginx 容器内执行 netstat -tnlp, 只有 tcp 的记录,没看到 tcp6 的记录, 这是为什么?
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.11:42303 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1/nginx: master pro tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN |
8
dndx 2020-02-13 17:15:28 +08:00
被 Docker 覆盖了?检查一下 `nginx.conf` 看看具体是怎么写的。如果正确可以 reload 一下确认使用的是对的配置。
|
9
programV2 OP @dndx 检查过了, 并且 docker 所有容器已经重启过了, 还有我进 nginx 容器内执行 netstat -tnlp, 发现 v4 的 80 和 443 都在监听, 但是我 nginx.conf 配置文件中只设置 listen 443;为什么还会监听 80 的端口呢??
nginx.conf` server { listen 443; ssl on; ssl_certificate /dir |
10
dndx 2020-02-13 19:12:40 +08:00
说了很多次了,要写成 `listen [::]:443`,`[::]:` 部分不能省。
|
11
programV2 OP @programV2 抱歉,是不是我的表达有问题? 你就的`listen [::]:443`不是监听 V6 的 443 端口吗? 但我的问题是 nginx.conf 配置文件中只设置 listen 443;为什么还会监听 80 的端口呢???
|
12
programV2 OP @dndx 抱歉,请问你说的" listen [::]:443 "是监听 V6 的 443 端口吗?" listen 443 本来就是两个都监听的"意思是 v4 和 v6 的 443 都监听 ?
但我的问题是 nginx.conf 配置文件中只设置了 listen 443;为什么还会监听 80 的端口呢??? |
13
iUnix 2020-02-16 09:51:09 +08:00 via Android
ps -ef | grep nginx
|