為什麼我的域名每次 ping 都能正常工作,但在瀏覽器中卻不行?
我的域名“codeplane.dev”(其 IP 地址使用 Google 的 dydns API 定期更新)可以被 ping 並在 ping 時顯示正確的 IP 地址,但是每當我嘗試在 Firefox 中訪問該域時,請求都會超時. 這種行為只有在我使用域名時才會發生,每當我將 ping 命令顯示的 IP 地址輸入到 Firefox 中時,網站都可以正常顯示。我應該怎麼做,以確保每當我在瀏覽器中輸入我的域時,我的網頁就會顯示出來?
這是我的 apache 網站配置:codeplane.dev.conf
<VirtualHost *:80> ServerName codeplane.dev ServerAlias www.codeplane.dev DocumentRoot /var/www/codeplane.dev/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <VirtualHost *:443> ServerName codeplane.dev ServerAlias www.codeplane.dev DocumentRoot /var/www/codeplane.dev/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
對 ICMP 數據包和 Web 訪問的 Ping 應答用於偵聽 TCP/80 和/或 TCP/443。
如果您可以 ping 您的主機,則意味著您的防火牆可能允許 ICMP 數據包。
如果您無法從瀏覽器訪問您的網站或 API,這可能是由不同的原因造成的:
- 首先,仔細檢查您的防火牆規則並確認埠 TCP 80 和/或 443 是允許的
您也可以從命令行嘗試:
curl http://yoursite.example curl -I http://yoursite.example
- 查看您的伺服器日誌並檢查您是否可以看到您的請求到達您的伺服器。
如果是這樣,可能是因為您的應用程序沒有正確響應,這意味著您必須在應用程序層對其進行調試
如果不是,則可能是您的防火牆阻止了 HTTP/HTTPS 數據包,或者您的網路伺服器未啟動。所以,嘗試啟動它
編輯 要讓您的 apache 伺服器回答特定域,您需要添加一個 VirtualHost 配置。去做這個:
使用以下內容創建文件 /etc/apache2/sites-available/yourdomain.conf:
<VirtualHost *:80> ServerName yourdomain.example ServerAlias www.yourdomain.example DocumentRoot /var/www/yourdomain/public/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
根據您的站點調整其配置(域和目錄),並添加一個符號連結到啟用 sites0:
ln -s /etc/apache2/sites-available/yourdomain.conf /etc/apache2/sites-enabled/yourdomain.conf
重啟apache2。
我還建議您閱讀此操作指南: 如何在 Ubuntu 18.04 上設置 Apache 虛擬主機
您的網站在使用其 IP 地址呼叫時可以正確應答,但在使用其名稱呼叫時則不能正確應答。
這意味著您的 Web 伺服器配置不正確:Web 伺服器根據(除其他外)HTTP 請求中使用的主機名來選擇要服務的內容;這就是您可以在同一系統中託管不同網站的方式:相同的 IP 地址,不同的名稱。
如果 Web 伺服器回复未命名的請求(那些使用其 IP 地址而沒有任何特定主機名的請求)而不是命名的請求,則應檢查其配置並確保它確實知道它應該響應該名稱。
由於您實際上可以通過指向其 IP 地址來*查看您的網站,這排除了防火牆或網路問題;*這似乎是一個專門的網路伺服器問題。