尝试安装 apache2

你好,

如标题所述,我已运行 sudo apt install apache2

服务器无法启动,错误信息如下:

(98) 地址已在使用中:AH00072: make_sock: 无法绑定到地址 [::]:80
(98) 地址已在使用中:AH00072: make_sock: 无法绑定到地址 0.0.0.0:80
无可用监听套接字,正在关闭
AH00015: 无法打开日志
操作“start”失败。
Apache 错误日志可能包含更多信息。
pam_unix(sudo:session): 用户 root 的会话已关闭
控制进程已退出,code=exited status=1
apache2.service: 因结果 'exit-code' 失败。
启动 Apache HTTP 服务器失败。

如何解决?谢谢大家。

该端口上已有其他程序在运行。您需要找到并停止它。

运行 netstat -an | grep :80 可能会显示具体是什么程序。

tcp6?这有点奇怪。

所以我应该把 apache2.conf 中的端口改成其他值吗?这会不会导致将来在这个 Web 服务器上运行的其他网站出现问题?

抱歉,我漏了一个标志,使用 netstat -anp 来显示程序名称。

为什么?如果你安装了 Discourse,它已经占用了端口 80 和 443。

请参阅 如何在已有 Apache 站点的服务器上设置 Discourse

我试试这个,谢谢!

另外 @schleifer,它显示的是 30005/docker-proxy

既是也不是。让我们退一步看看这个问题。

之前,听起来你正在使用 Apache 运行多个网站。Apache 监听端口 80 和 443,然后将请求作为“虚拟主机”进行“代理”(重定向),因此你可以在同一台服务器上运行多个网站,它们都监听相同的端口(80 和 443)。这就是“LAMP 入门 101”……也就是虚拟主机的运作方式。

现在,假设你以官方开箱即用(OOTB)的方式安装 Discourse。OOTB 版本的 Discourse 会尝试绑定到相同的端口,但由于 Apache 已经在使用(绑定)这些端口,因此会失败。你有以下选择:

  1. 让 Discourse 运行在 Unix 域套接字上,并配置 Apache 将 Discourse 应用作为虚拟主机进行反向代理。

注意:我测试过这种方法,它是可行的;但这并未得到 Discourse 的官方(甚至非官方)支持。

  1. 从 Apache 迁移到 nginx,让所有 Web 服务器都通过 nginx 运行,并将 Discourse 应用作为虚拟主机进行反向代理,同时为 Discourse-docker 生产应用使用 Unix 域套接字。

注意:这也未得到 Discourse 的官方支持;大多数运行 Apache 网站的人会发现,将他们所有的 Apache2 mod_rewrite 和编码的 geo-ip mod 内容移植到 nginx 有点“棘手”;但这当然是可行的,特别是如果你的应用是为 nginx 和 Apache2 两者构建的(这样会更容易一些,但依然未获得官方支持)。

  1. 将 Discourse Docker 容器暴露在除 80 和 443 之外的其他端口上。

注意:这也不(真正)推荐(但据我回忆,这是官方支持的)。然而,大多数人不想通过输入端口号(如 https://my-great-discourse-app.org:3334)来访问 Web 应用,因此大多数人在生产环境中不会这样做。开发环境则是另一回事。

作为一个拥有大量 LAMP 经验且现在越来越多使用 Discourse 的人,在“不了解你所有具体情况”的前提下,我的建议是将它们运行在独立的服务器上(这得到了 Discourse 的官方支持);但如果你资金非常紧张,必须将所有服务运行在同一台服务器上(或者只是喜欢拥有一台大而复杂的服务器),那么你就需要学习如何配置 Apache2,使其通过 Unix 域套接字对 Discourse 应用进行反向代理。

我测试过这种方法,确实可以配置 Apache2 通过 Unix 域套接字对 Discourse 进行反向代理;但该方案并未获得官方(任何程度的)支持。

注意:关于使用 HAProxy 配置 Apache2 的链接,是我无法轻松使其生效的方案,因此我放弃了它(没必要只使用 HAProxy,还有“更老的方法”可以做到)。不过,你也许最好直接遵循这篇 Discourse 教程:

希望这能在某种程度上对你有所帮助,@nekodroid

在非标准端口上发布完全不受支持。我曾看到一些主题,网站所有者没有绑定到 socket,而是更改了端口并使用反向代理映射回 80/443,但如果最终结果需要 :port,则无法提供支持。