当我尝试访问 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 服务器环境:
- brew 的 httpd24
- 原始的 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
排除,应该可以解决问题。