前言
大約從前幾個月開始,我的 google chrome 就時常有莫名其妙 connection refused 的情況發生,有時候有些網頁就是開不起來,但用其他裝置開卻正常。雖然覺得怪怪的,但想說可能是伺服器設定的問題,而且也沒有造成什麼困擾,就這樣繼續用下去了。
設定 custom domain
後來,當我順手買了 .dev
網域後,奇怪的事情的發生了。當我設定好 CNAME,也確定 SSL 生效,但是不管我怎麼在 chrome 重新整理,就是一直顯示 CONNECTION_REFUSED
。一般來說這個問題有幾個,第一個是 server 端沒有開 port、另外一個是防火牆設定,我瞧瞧這兩個設定,發現都沒有問題。為了保險起見,我用了 dig xxx.dev +nostats +nocomments +nocmd
來查看 CNAME 是否設定正確。完全沒問題。
接下來查看看 SSL 的問題,我用了 SSL checker 來檢查 SSL 是否有正確設定,也有。
好,或許是等待設定生效需要一陣子,我就等了 10 分鐘再看看,還是不行,chrome 還是慘白的 CONENCTION_REFUSED
。接下來我用手機看看,發現可以成功進入網頁。
這時候我開始懷疑或許是電腦中的某些設定出錯了,於是開始檢查相關的設定,首先先用 curl blog.kalan.dev
瞧瞧。結果出現了錯誤:
curl: (7) Failed to connect to blog.kalan.dev port 80: Connection refused
嗯,chrome 的結果與 curl 的結果相同,所以更加確信是電腦本身的設定有誤了,接下來我用了 wget 來看看發生了什麼事。
wget https://blog.kalan.dev
--2019-03-18 23:11:46-- https://blog.kalan.dev/
正在查找主機 blog.kalan.dev (blog.kalan.dev)... 127.0.0.1, 0.0.0.1
正在連接 blog.kalan.dev (blog.kalan.dev)|127.0.0.1|:443... 失敗: Connection refused。
正在連接 blog.kalan.dev (blog.kalan.dev)|0.0.0.1|:443... 失敗: No route to host。
等等,查找主機竟然找到 127.0.0.1?意思是說我把這個 domain 加進去 hosts 裡了嗎?在我的印象中完全沒有這件事,但又抱著一絲期待來瞧瞧 /etc/hosts
跟 /private/etc/hosts
這兩個檔案。
結果還是一樣,我沒有設定 domain 在本機 hosts 當中,但至少知道原因是什麼了,因為某個設定導致 blog.kalan.dev
被設定在 127.0.0.1
當中。到這裡我已經完全不清楚有什麼可能原因了。但當我在亂試的時候,發現一件奇怪的事,我發現任何 xxx.dev
都有同樣的狀況,而其他 domain 卻沒有這樣的問題。
這時候我突然想起了一件事,大約在 4 年前,我為了學習 Ruby On Rails,所以順道下載了 powder。簡單來說就是他能夠讓你在 access 網站的時候,順便幫你啟 server,這件事超方便的!所以當時我就開心地安裝了。
但是,仔細看一下官方文件,發現 session3_1 寫著:
The
POW_DOMAINS
environment variable specifies a comma-separated list of top-level domains for which Pow will serve DNS queries and HTTP requests. The default value for this list are the twotest,dev
domains, meaning Pow will configure your system to resolve*.test
and*.dev
to 127.0.0.1 and serve apps in~/.pow
under the.test
and.dev
domains.
哦哦哦哦哦,原來就是你把我的 IP 吃掉了,因為指向 127.0.0.1,然後電腦本身沒有開 443 port,所以才會出現 CONNECTION_REFUSED
。
所以我那些沒有看到的網頁,或許都是用 .dev
域名也說不定。
幾件事情可以記錄一下:
- 發現
CONNECTION_REFUSED
的時候,直接用wget
看看主機連線是否正確 - 或者用
curl --ipv4 -v “your.site.com”
檢查主機連線