在 BigSur 上更新我的 MacOs 后,我在使用 httpd(又名 Apache2)时仍然遇到一些问题。
我尝试使用 brew httpd 服务重新安装 apache2(就像很多教程中所说的那样),但它仍然无法正常工作。我总结了所采取的步骤,并添加了一些调试命令。
重新安装我完成了:
sudo apachectl stop
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
brew install httpd
之后我重新启动并启动命令:
brew services start httpd
==> Successfully started `httpd` (label: homebrew.mxcl.httpd)
但是如果我运行以下命令:
brew services list
Name Status User Plist
dnsmasq started root /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
fuseki stopped
httpd error matteo.ceradini /Users/matteo.ceradini/Library/LaunchAgents/homebrew.mxcl.httpd.plist
mongodb-community started matteo.ceradini /Users/matteo.ceradini/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist
unbound stopped
如您所见,httpd 处于错误状态(实际上转到 localhost:8080 时出现错误),我不明白为什么。
有什么建议可以解决这个问题吗?
谢谢。
答案 0 :(得分:5)
有些东西似乎不起作用,但我仍然找不到原因。
我停止了所有服务(sudo brew 和不带 sudo 的 brew),然后运行命令:
sudo lsof -i :80
sudo lsof -i :8080
sudo lsof -i tcp:80
sudo lsof -i tcp:8080
结果总是一无所获。但是如果我跑:
sudo brew services start httpd
==> Successfully started `httpd` (label: homebrew.mxcl.httpd)
httpd 不会启动(即使在终端命令中它说是):
sudo brew services list
httpd error root /Library/LaunchDaemons/homebrew.mxcl.httpd.plist
如果我检查 apachetl 错误,我总是会发现端口 80 已被占用,即使该端口上没有进程:
apachectl -e error
(48)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
我迫切需要为这个错误找到解决方案。好像有些httpd损坏了,就算我卸载重装了
更新:
我真的不知道我是怎么做到的,但现在它起作用了。我停止了所有 brew httpd 服务,并使用以下命令重新启动 apache:
sudo apachectl -k start
这对我有用
答案 1 :(得分:0)
第一个答案: 听起来服务启动正常然后稍后(或立即)死亡,并报告错误。使用命令 'apachectl -e error' 应该提供详细信息,但您想检查日志('vi /usr/local/var/log/httpd/error_log',然后 shift-G [转到结束])。< /p>
第二个(解释)答案:
”
如果您使用 (sudo) brew services
... 来启动 httpd,您必须使用正确的 (sudo) brew services list
命令来检查状态:
如果您以 root 身份启动,则使用 root privs 列出它:
sudo brew services start httpd
> sudo brew services list
或使用用户权限:
brew services start httpd
> brew services list
。
"
答案 2 :(得分:0)
FIRST ANSWER:听起来服务启动正常然后稍后(或立即)死亡,并报告错误。使用命令 'apachectl -e error' 应该提供详细信息,但您想检查日志('vi /usr/local/var/log/httpd/error_log',然后 shift-G [转到结束])。< /p>
第一个命令给出了这个结果:
sudo apachectl -e error
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using MBP-Matteo.local. Set the 'ServerName' directive globally to suppress this message
(48)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:8080
no listening sockets available, shutting down
AH00015: Unable to open logs
并且文件'/usr/local/var/log/httpd/error_log'是空的
<块引用>第二个(解释)答案:“如果您使用 (sudo) brew services ... 要启动 httpd,您必须使用正确的 (sudo) brew services list 命令来检查状态:
如果我同时使用 sudo 或不使用 brew 命令执行 brew 命令,结果不会改变(鉴于之前我在没有 sudo 的情况下使用)
有什么建议吗?
答案 3 :(得分:0)
从 sudo apachectl -e error
的结果来看,它不能使用端口 8080,因为另一个应用程序正在使用它。
第一个警告 - 可以忽略 - 或在 httpd.conf 中设置 FQDN。通常这是在“/usr/local/etc/httpd”文件夹中。使用 sudo vi /usr/local/etc/httpd/httpd.conf
进行编辑。 (我喜欢 vi - 使用你觉得舒服的任何东西 - sudo open -e /usr/local/etc/httpd/httpd.conf
很常见)。
默认配置包含 #ServerName www.example.com:8080
行,删除“#”并将“www.example.com:8080”替换为“MBP-Matteo.local” - 或其他内容。
键入 sudo lsof -i tcp:8080
以列出使用端口 8080 的所有应用程序,主要是仅 LISTEN 重要的应用程序。
下一个错误:您必须停止使用端口 8080 的其他应用程序(并防止在启动时启动) - 或者 - 将 Apache 设置为使用不同的端口。 (注意:如果您选择低于 1024 的端口,则必须使用 'sudo' 来启动服务。)通常 80 端口专用于 Apache。要使用的端口可以通过编辑配置文件来设置,如上,然后找到'Listen 8080'行,并将8080替换为所需的端口。
更改后,尝试使用 [sudo] 'brew services start httpd' 重新启动。然后检查 [sudo] 'brew services list'。希望一切正常。