bao*_*7uo 8 ipv6 httpd.conf arch-linux link-local apache-2.4
我希望 Apache 侦听特定接口上的本地链路 ipv6 地址。我的 httpd.conf 中有以下行:
Listen [fe80::a00:16ff:fe89:420f]:80
Run Code Online (Sandbox Code Playgroud)
它基于此处的 Apache 文档:https : //httpd.apache.org/docs/2.4/bind.html “IPv6 地址必须括在方括号中”
我的操作系统/Apache版本详情如下:
$ httpd -v
Server version: Apache/2.4.18 (Unix)
Server built: Dec 14 2015 08:05:54
$ uname -rv
4.3.3-3-ARCH #1 SMP PREEMPT Wed Jan 20 08:12:23 CET 2016
Run Code Online (Sandbox Code Playgroud)
使用显示的结果journalctl -e是:
(22)Invalid argument: AH00072: make_sock: could not bind to address [fe80.....
IPv6 正在工作,因为我有 sshd 和 dnsmasq 监听。我曾尝试向地址附加两个不同的范围 ID 后缀。您可以使用的接口ID3或名字net1作为既是scopeidping6和sshd。
$ ip addr | grep -Po "^\d: \S+"
1: lo:
2: net0:
3: net1:
$ for scopeid in 3 net1; do ping6 -c 1 fe80::a00:16ff:fe89:420f%$scopeid; done | grep loss
1 packets transmitted, 1 received, 0% packet loss, time 0ms
1 packets transmitted, 1 received, 0% packet loss, time 0ms
Run Code Online (Sandbox Code Playgroud)
sshd_config 适用于: ListenAddress fe80::a00:16ff:fe89:420f%3
或者: ListenAddress fe80::a00:16ff:fe89:420f%net1
因此,考虑到所有这些,我在 httpd.conf 中尝试了以下操作
听 [fe80::a00:16ff:fe89:420f%3]:80
和 Listen [fe80::a00:16ff:fe89:420f%net1]:80
添加任一 scopeid 都会使 Apache 在其启动过程中较早失败。journalctl -e解析httpd.conf时显示语法错误如下:
AH00526:/etc/httpd/conf/httpd.conf 的第 52 行出现语法错误:
不支持范围 ID
如果我这样做,Apache 会监听 localhost ipv6 Listen [::1]:80
我希望Listen 80让 Apache 绑定到 ipv4 和 ipv6,但事实并非如此。它只绑定到 ipv6 地址 - netstat 显示:
tcp6 0 0 :::80 :::* LISTEN
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Apache 确实接受对 net1 上的链接本地地址的请求。我必须指定0.0.0.0:80一个特定的 ipv4 地址才能监听 ipv4。
那么,如何让 Apache 绑定到一个特定的本地链接地址(不是全部 - 我想避免监听其他接口),或者 Apache 无法监听本地链接 ipv6 地址?
花了一些时间在这上面似乎 Apache 文档可能会产生误导,尽管我可能错过了一些东西。它说 IPv6 地址必须用方括号括起来。这对于非链路本地地址是正确的。但是我现在发现可以使用链接本地地址,并且必须包含范围 ID,但没有方括号。见下文:
阿帕奇文档:
$ wget -q -O- https://httpd.apache.org/docs/2.4/bind.html | grep -Pao "(?<=p.)IPv6[ a-z]+"
IPv6 addresses must be enclosed in square brackets
Run Code Online (Sandbox Code Playgroud)
我的配置:
$ grep -R ^Listen /etc/httpd/conf/
/etc/httpd/conf/httpd.conf:Listen fe80::a00:16ff:fe89:420f%3:80
/etc/httpd/conf/extra/httpd-ssl.conf:Listen fe80::a00:16ff:fe89:420f%net1:443
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用了接口 id 作为端口 80 的范围 id,以及端口 443 的范围 id 的接口名称。这只是为了表明接口 id 或名称都可以成功用作范围标识。
结果:
$ sudo netstat -pant | grep -i httpd
tcp6 0 0 fe80::a00:16ff:fe89::80 :::* LISTEN 709/httpd
tcp6 0 0 fe80::a00:16ff:fe89:443 :::* LISTEN 709/httpd
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3291 次 |
| 最近记录: |