localhost 埠 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
使用 brew安裝httpd24後,您將擁有兩個完全不同的 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
重啟。
fe80::1%lo0 localhost
如果您在使用 localhost:8080 連接到本地開發人員站點時仍然遇到錯誤,請在 /etc/hosts 中註釋掉。但在我的環境中,它適用於這條線。經過進一步調查後發現,錯誤配置的 Web 代理(ESET Internet Security/Antivirus 的一部分)是罪魁禍首。通過添加適當的
localhost
排除,應該可以解決問題。