1. 程式人生 > >阿里雲伺服器的80埠被封了麼?

阿里雲伺服器的80埠被封了麼?

前段時間申請了一個阿里雲的帳號,搗鼓了幾天,把jenkins伺服器從公司機房搬到上面,算是用上雲服務了:)但是,碰到一個問題,80埠不能用,使用jenkins預設埠8080,可以訪問,改為80埠就不能使用了。這個問題以前有遇到過,公司接入的商務光纖是有提供固定IP的,但是此IP的80埠被電信封掉了;還有個專案申請電信機房託管伺服器也是一樣,必須備案後才能開通80埠。現在阿里雲上的80埠又不能用,看來也要備案了。。。。奇怪的是,阿里雲沒有任何關於80埠要如何開通的文件或者幫助,搜尋百度谷歌,也找不到。因為其他工作排得很緊,就暫時拿8000埠湊合用了。

但是,沒有80埠,不但用起來彆扭,而且看上去也很業餘。。。我下定決心得把這個問題搞定,我又看了一遍備案的幫助,還是不明覺厲,我決定找客服。為慎重起見,要再檢查一遍,年前在伺服器上裝了個nodejs,正好可以拿來試試。寫個Hello World,監聽80埠

var http = require('http');
http.createServer(function(req,res) {
res.writeHead(200, {'Content-Type':'text/html'});
res.write('<h1>Node.js</h1>');
res.end('<p>Hello World</p>');
}).listen(80);
console.log("HTTP server is listening at port 80.");

儲存為server.js

執行 node server.js

然後在瀏覽器開啟這個頁面,當然,料想也是打不開的。

不過,等等...居然打開了...

看來阿里雲並沒有封80埠啊。

我趕緊關掉node,把jenkins切到80埠,還是不能訪問,這是怎麼回事?

開啟log一看,有這麼幾行:

...

Caused by: java.io.IOException: Failed to listen on port 80
at winstone.HttpListener.getServerSocket(HttpListener.java:122)
at winstone.HttpListener.start(HttpListener.java:75)
at winstone.Launcher.spawnListener(Launcher.java:220)
... 8 more
Caused by: java.net.BindException: Permission denied

原來是許可權不足導致的。當時想當然,居然沒有檢查log,該打該打~

jenkins服務是以jenkins帳號啟動的,不是root帳號,沒有許可權訪問1024以下的埠,有兩種辦法解決這個問題,一是用root帳號啟動jenkins,不推薦;二是增加路由規則,將80埠的請求轉發到8000埠,執行命令為:

iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8000

網絡卡為eth1,因為阿里雲伺服器有兩張網絡卡,eth0繫結的是內網地址。

錯怪阿里了,其實阿里雲沒有封埠。