本地主机端口 8080 没有响应,但使用 127.0.0.1:8080 可以工作

本地主机端口 8080 没有响应,但使用 127.0.0.1:8080 可以工作

当我尝试访问 locahost:8080 时,我得到了

The localhost page isn’t working

localhost didn’t send any data.
ERR_EMPTY_RESPONSE

但如果我尝试:

127.0.0.1:8080,我得到了我想要的响应

我相信这与我刚刚用自制 httpd24(httpd.2.4)更新的 httpd(apache)有关?

我按照此站点的说明进行更新: https://getgrav.org/blog/macos-sierra-apache-multiple-php-versions

答案1

安装后httpd24使用 brew 您将拥有两个完全不同的 Apache Web 服务器环境:

  1. brew 的 httpd24
  2. 原始的 macOS/OS X httpd

两者都有不同的配置文件和 apachectl(及其他)二进制文件。第一个安装到 /usr/local/Cellar/httpd24,其二进制文件链接到 /usr/local/bin。macOS 的 httpd 相关二进制文件位于 /usr/sbin。

根据您的 PATH 变量(输入echo $PATH以获取它)sudo apachectl [cmd]控制第一个或第二个 Apache 环境。

安装 brew 后,默认 PATH 应该是/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin支持 brew 的 httpd24。不过,您可以使用完整路径 (/usr/sbin/apachectl) 来控制 macOS 的 Apache。

如果你有其他路径,它不支持 /usr/local/bin 而不是 /usr/sbin,则相反。要获取首选路径apachectl 您也可以直接输入which apachectl

检查一下,/usr/local/bin/apachectl -S结果应该为:

VirtualHost configuration:
ServerRoot: "/usr/local/opt/httpd24"
Main DocumentRoot: "/usr/local/var/www/htdocs"
Main ErrorLog: "/usr/local/var/log/apache2/error_log"
Mutex default: dir="/usr/local/var/run/apache2/" mechanism=default 
Mutex mpm-accept: using_defaults
PidFile: "/usr/local/var/run/apache2/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="daemon" id=1 not_used
Group: name="daemon" id=1 not_used

/usr/sbin/apachectl -S

VirtualHost configuration:
ServerRoot: "/usr"
Main DocumentRoot: "/Library/WebServer/Documents"
Main ErrorLog: "/private/var/log/apache2/error_log"
Mutex default: dir="/private/var/run/" mechanism=default 
Mutex mpm-accept: using_defaults
Mutex proxy-balancer-shm: using_defaults
Mutex proxy: using_defaults
PidFile: "/private/var/run/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="_www" id=70 not_used
Group: name="_www" id=70 not_used

互相使用的文件/文件夹。

它们还使用不同的标准配置文件:

/usr/local/bin/apachectl -t -D DUMP_INCLUDES
Included configuration files:
  (*) /usr/local/etc/apache2/2.4/httpd.conf

但是,该命令对于原始(macOS)apachectl 无法正常工作,并且仅产生:语法 OK。


如果您运行两个 httpds(在此处配置不同的端口:80:macOS;8080 httpd24 - 在相应的配置文件中检查)ps -aef | grep httpd | grep -v grep将显示以下内容:

  0    76     1   0  4:54pm ??         0:00.13 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
  1   219    76   0  4:54pm ??         0:00.00 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
  1   220    76   0  4:54pm ??         0:00.00 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
  1   221    76   0  4:54pm ??         0:00.00 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
  1   222    76   0  4:54pm ??         0:00.00 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
  1   223    76   0  4:54pm ??         0:00.00 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
  1  4239    76   0  5:06pm ??         0:00.00 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
  0  8251     1   0  5:45pm ??         0:00.08 /usr/sbin/httpd -D FOREGROUND
 70  8261  8251   0  5:46pm ??         0:00.00 /usr/sbin/httpd -D FOREGROUND

前七个 pid 属于 httpd24,后两个属于 macOS 的 httpd - 检查列出的二进制路径!和nmap localhost

Starting Nmap 7.31 ( https://nmap.org ) at 2016-12-22 18:00 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00039s latency).
Other addresses for localhost (not scanned): ::1 fe80::1
Not shown: 499 closed ports, 498 filtered ports
PORT     STATE SERVICE
80/tcp   open  http
8080/tcp open  http-proxy

在你的私人聊天消息你可以清楚地看到 httpd24不是正在运行,但是 macOS 的 httpd

要禁用 macOS 的 httpd,只需运行sudo /usr/sbin/apachectl stop并另外运行sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist(只是为了确保)。

然后brew service start ...通过停止服务并安装真正的 plist 守护程序(如链接的操作方法中所建议的那样)来转储方法。

sudo cp -v /usr/local/Cellar/httpd24/2.4.23_2/homebrew.mxcl.httpd24.plist /Library/LaunchDaemons
sudo chown -v root:wheel /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
sudo chmod -v 644 /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist

重启。如果仍然出现使用 localhost:8080 连接到本地开发者站点的错误,请fe80::1%lo0 localhost在 /etc/hosts 中注释掉。在我的环境中,它可以正常工作这条线虽然。


经过进一步调查,发现错误配置的 Web 代理(ESET 的 Internet Security/Antivirus 的一部分)是罪魁祸首。通过添加适当的localhost排除,应该可以解决问题。

相关内容