无法让 nextcloud 在端口 82 上侦听

Posted

技术标签:

【中文标题】无法让 nextcloud 在端口 82 上侦听【英文标题】:Cannot get nextcloud listening on port 82 【发布时间】:2020-05-01 23:04:06 【问题描述】:

我已经使用 snap 安装了 nextcloud 并将其配置为使用 sudo snap set nextcloud ports.http=82 侦听端口 82,防火墙也在该端口上打开但它没有响应。

正在调查,它似乎正在侦听端口 82,但仅在 ipv6 上(pid 5231):

ubuntuadmin@ubuntu-1804-srv:~$ sudo netstat -tulpn
[sudo] password for ubuntuadmin:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:9236          0.0.0.0:*               LISTEN      2476/gitaly
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      844/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1275/sshd
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      2464/grafana-server
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      1711/master
tcp        0      0 0.0.0.0:5050            0.0.0.0:*               LISTEN      2351/nginx: master
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      2351/nginx: master
tcp        0      0 0.0.0.0:8060            0.0.0.0:*               LISTEN      2351/nginx: master
tcp        0      0 127.0.0.1:9121          0.0.0.0:*               LISTEN      2400/redis_exporter
tcp        0      0 127.0.0.1:9090          0.0.0.0:*               LISTEN      2412/prometheus
tcp        0      0 127.0.0.1:9187          0.0.0.0:*               LISTEN      2438/postgres_expor
tcp        0      0 127.0.0.1:9093          0.0.0.0:*               LISTEN      2420/alertmanager
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN      2488/registry
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1512/mysqld
tcp        0      0 127.0.0.1:9100          0.0.0.0:*               LISTEN      2419/node_exporter
tcp        0      0 127.0.0.1:9229          0.0.0.0:*               LISTEN      2239/gitlab-workhor
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      3156/unicorn master
tcp        0      0 127.0.0.1:9168          0.0.0.0:*               LISTEN      2418/puma 4.3.1.git
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2351/nginx: master
tcp        0      0 127.0.0.1:8082          0.0.0.0:*               LISTEN      2368/sidekiq 5.2.7
tcp6       0      0 :::22                   :::*                    LISTEN      1275/sshd
tcp6       0      0 :::25                   :::*                    LISTEN      1711/master
tcp6       0      0 :::9094                 :::*                    LISTEN      2420/alertmanager
tcp6       0      0 ::1:9168                :::*                    LISTEN      2418/puma 4.3.1.git
tcp6       0      0 :::82                   :::*                    LISTEN      5231/httpd
udp        0      0 127.0.0.53:53           0.0.0.0:*                           844/systemd-resolve
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           4558/mdns-publisher
udp6       0      0 :::9094                 :::*                                2420/alertmanager
udp6       0      0 :::5353                 :::*                                4558/mdns-publisher

(nginx 用于 Gitlab)

为什么? 我需要更改或添加什么来告诉他在tcp: 上收听?

问候,

【问题讨论】:

【参考方案1】:

从snap source 看来,apache 似乎设置为侦听IPv4-mapped IPv6 套接字:

如果您希望 Apache 使用最少的套接字处理 IPv4 和 IPv6 连接,这需要使用 IPv4 映射的 IPv6 地址,请指定 --enable-v4-mapped 配置选项并使用如下通用 Listen 指令:

听 80

使用 --enable-v4-mapped,Apache 创建的默认配置文件中的 Listen 指令将使用这种形式。 --enable-v4-mapped 是除 FreeBSD、NetBSD 和 OpenBSD 之外的所有平台的默认设置,因此这可能是您的 Apache 的构建方式。

如果您希望 Apache 仅处理 IPv4 连接,无论您的平台和 APR 支持什么,请在所有 Listen 指令上指定 IPv4 地址,如下例所示:

听 0.0.0.0:80 听 192.170.2.1:80

This Github 问题似乎也支持我的理论。

在这个问题得到解决之前,我看到了几个可以解决的选项:

    使用socat 设置从ipv4 到ipv6 的转发(参见this SE answer) 使用解决方法provided on github(主要涉及设置 nginx 和反向代理 apache) 调整文件并从源代码重建快照?

【讨论】:

也许这是我的问题的解决方案,但由于我真的不是网络服务器配置方面的专家,所以我真的不知道如何在这种情况下调整它。正如我所说,我已经有一个在 80 端口上运行 Gitlab 的 nginx 服务器。 那么socat 呢?看起来很简单,应该可以完成这项工作。 socat TCP4-LISTEN:82,fork,su=nobody TCP6:[::1]:82 应该可以解决您的问题。只要确保以 root 身份运行它,因为 82 是一个特权端口 事实上,经过 2 周后,我刚刚尝试通过定义的端口 82 访问 nextcloud,它可以正常工作。我什么都没做,nextcloud 总是在 ipv6 上监听,但我认为一个小妖精出现在我的服务器上并解决了问题......抱歉,我真的无法解释发生了什么。

以上是关于无法让 nextcloud 在端口 82 上侦听的主要内容,如果未能解决你的问题,请参考以下文章

配置为侦听端口 8080 的 Tomcat 连接器无法启动 - 端口 8080 上没有运行

Prometeus 无法在“0.0.0.0”端口 9094 上启动 TCP 侦听器:

无法在Mac OS X上找到正在侦听端口8001的进程

在 Windows 上侦听端口 1880 失败

尽管主机说它正在侦听端口,但无法使用 drda 连接到另一台机器上的 informix

如何解决 C# IIS 托管的 WCF NET TCP 服务超时问题