AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 751170
Accepted
bao7uo
bao7uo
Asked: 2016-01-23 14:53:15 +0800 CST2016-01-23 14:53:15 +0800 CST 2016-01-23 14:53:15 +0800 CST

Apache (Linux) httpd 监听链接本地 IPv6 地址

  • 772

我希望 Apache 监听特定接口上的链接本地 ipv6 地址。我的 httpd.conf 中有以下行:

Listen [fe80::a00:16ff:fe89:420f]:80

这基于此处的 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

使用显示的结果journalctl -e是:

(22)无效参数:AH00072:make_sock:无法绑定到地址[fe80.....

IPv6 正在工作,因为我有 sshd 和 dnsmasq 监听。我尝试将两个不同的范围 ID 后缀附加到地址。您可以在和中使用接口 ID3或名称net1作为范围ID 。ping6sshd

$ 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

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

在这种情况下,Apache 确实接受 net1 上链接本地地址上的请求。我必须指定0.0.0.0:80或特定的 ipv4 地址才能在 ipv4 上侦听。

那么,如何让 Apache 绑定到一个特定的链接本地地址(不是全部 - 我想避免监听其他接口),还是 Apache 无法监听链接本地 ipv6 地址?

apache-2.4
  • 1 1 个回答
  • 3588 Views

1 个回答

  • Voted
  1. Best Answer
    bao7uo
    2016-01-24T09:17:28+08:002016-01-24T09:17:28+08:00

    在这方面花了一些时间后,似乎 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
    

    我的配置:

    $ 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
    

    如您所见,我使用了接口 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
    
    • 6

相关问题

  • SELinux 阻止 Apache 写入文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve