Mac-Osx

localhost 埠 8080 沒有響應,但使用 127.0.0.1:8080 確實有效

  • December 26, 2016

當我嘗試訪問 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 伺服器環境:

  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

重啟。fe80::1%lo0 localhost如果您在使用 localhost:8080 連接到本地開發人員站點時仍然遇到錯誤,請在 /etc/hosts 中註釋掉。但在我的環境中,它適用這條線。


經過進一步調查後發現,錯誤配置的 Web 代理(ESET Internet Security/Antivirus 的一部分)是罪魁禍首。通過添加適當的localhost排除,應該可以解決問題。

引用自:https://serverfault.com/questions/819984