心血來潮花了9塊9(學生價)買了個阿里雲。由於後端只會一點 Node,因此上來第一件事就是按照官方教程把部署 Node 項目這個教程擼了一遍。javascript
const http = require('http'); const hostname = 'ECS公網IP地址'; // 這裏把文字換成本身的公網IP地址 const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
一段簡單最簡單的 Node http服務器,成功運行後能夠在頁面輸出 Hello World。html
報錯了,由於以前寫node只須要監聽端口,不必把IP地址也給寫進去,因此我刪了hostname,改爲下面這樣。java
const http = require('http'); const hostname = 'ECS公網IP地址'; // 這裏把文字換成本身的公網IP地址 const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n'); }); server.listen(port, () => { console.log(`Server running at http://${hostname}:${port}/`); });
運行成功,可是在外網用瀏覽器輸入IP地址以後沒法訪問。node
curl ip.cn
nginx
查詢當前外網IP,沒有問題,與阿里雲提供的一致。後端
ping www.baidu.com
瀏覽器
服務器能夠訪問外網安全
curl http://127.0.0.1:3000
服務器
正確輸出 "Hello World",說明代碼的編寫沒有問題。網絡
代碼沒問題,服務器網絡沒問題,ip地址沒問題。我估計應該是防火牆把端口禁掉了。
身爲小菜鳥,第一時間想到的就是把服務器的防火牆關掉。個人服務器是 CentOS7.0 ,與6.0不同,CentOS7.0默認使用 firewall
做爲防火牆。
systemctl stop firewalld.service
#中止firewall
systemctl disable firewalld.service
#禁止開機啓動firewall
firewall-cmd --state
#查看防火牆狀態,已經處於關閉狀態
開Node服務器,瀏覽器訪問仍是失敗。
好像沒招了,問小夥伴,他們說多是沒有備案的緣由。可是沒備案的小夥伴說他用得好好的,並且我就買了一個月的服務器,再等半個月備案我也不須要用了。正打算放棄問客服,小夥伴說你裝個Nginx試試,只要正確運行Nginx並且服務器沒問題直接訪問IP地址就能出現Nginx首頁了。
CentOS有兩種方法安裝Nginx,具體的自行谷歌吧。
安裝完成,運行成功。
瀏覽器訪問公網IP,沒法訪問。
從吃完中午餐13:00一直折騰到下午6:30左右,一動不動坐凳子上5個多小時了,不行了,休息吃完飯去。
既然Nginx正確運行,那隻剩兩個問題了,一個是沒有備案,不過這個問題的可能性很小很小。還有一點就是雖然我CentOS上把防火牆關了,但云服務器上阿里雲應該會有一些安全措施,致使一部分端口被禁,或者壓根就沒有把端口打開。
吃完飯,散完步,我就在雲服務器控制檯裏一個一個的找,發現安全組裏點擊配置規則後有一個安全組規則,裏面經過添加安全組規則能夠開放須要用到的端口。默認只打開了兩個端口。
這是一個簡單的問題,不過須要一步步排除掉可能的緣由。
若是身邊有個後端或者運維的小夥伴在的話,應該能夠很快意識到這個問題。獨狼是走不遠的,至少是走不快的。
其實在購買時就能夠選取要開放的端口,第一次嘛,沒有經驗,都是直接默認選項。怪不得小夥伴說他服務器的配置都沒有動過,應該是購買的時候就已經設置好的。
趁年輕,多踩坑。