在國外沒啥事做, 考前也不願意復習, 看到aws能免費試用一年, 於是就試着搞了搞, 就准備搭建個個人網站玩玩.
aws的注冊與創建實例
首先個人感覺這個東西使用起來還是很方便的, 一開始注冊完驗證完銀行卡手機等等一系列的東西之后, 會有一個等待時間. 之后要搭建網站, 我實際上只是使用了了其中的ES2(elastic computing cloud), 這東西實際上就是一個遠程的服務器. 這里要特別注意如下幾點 :
- 服務器地址的選擇, 右上角可以選擇地址, 我開始選的是美國西部, 結果卡的一比, 換了倫敦網速暴漲, 簡直無敵.
- 安全組的設置, 創建實例過程中, 不同的地址的實例是分離的而不是共享的. 這里感覺配置參數沒什么需要注意的, 除了這個安全組. 安全組中, 如果你用tomcat, 默認開啟的監聽端口是8080, 但是一般來說安全組中只設置了80(http), 22(ssh)這兩個端口, 那么此時如果你就這樣, 那么到時候你tomcat服務器開起來之后, 你會發現你嘗試訪問8080端口, 會出現一個巨長的等待時間然后告訴你connection time out. 這里比較煩就在於, 我當時壓根不知道是tomcat沒有設置好還是雲服務器這邊沒有設置好, 所以這里特別要注意.
- 申請一個elastic ip, 在左下方能看到, 申請之后和你的實例綁定就行了, 實際上就是一個公用的ip地址而已.
弄完這些之后, 之后開啟服務器, 即使沒有綁定域名, 你也可以用這個ip地址, 或者是它提供的public DNS進行訪問.
tomcat的安裝
- 先用curl從tomcat的官網把那個安裝包下來, 解壓到任意目錄就行了, 理論上安裝就這么簡單.
2.此時進入tomcat的bin目錄, ./startup即可, 然后你可以用我上面說的, 你申請的ip地址或者是public DNS嘗試訪問, 如果能看到tomcat說明成功了. 如果你上面安全組中沒有加入8080, 那么這時候你發現頁面一直在加載但就是加載不出來. 這里和那種輸錯端口號, 比如你這時候直接不加端口號8080, 也就是使用默認短號號進行訪問又有所不同, 默認端口號進行訪問的話, 會直接返回給你connection refused. (注意是直接返回, 速度很快) - 但是一般來說默認的http端口是80, 所以你也可以到tomcat的conf目錄下把server.xml中把協議為http的connector的端口號從8080改為80.
- 本來講道理這時候./startup即可, 但是其實不然, 必須要用sudo ./startup, 這又是一個坑, 因為默認狀態下低於1024的端口號必須要管理員權限才能開啟, 這里的坑在於, 即使你直接./startup, 也不會有任何提示, 搞得還以為自己設置成功了. 這時候你只需要使用
sudo lsof -i (list of file)
這里也必須加sudo, 否則低於1024的是隱藏的, 來查看網絡端口的占用情況, 如果你發現80(一般會直接寫成http)已經在監聽狀態, 這時候說明是成功了. 如果你不加sudo啟動tomcat, 是不會有這個端口在監聽的. 另外,沒有開啟成功還有一個特征, 就是你用./shutdown關閉的時候會出現exception, 但不保證一定是這樣, 反正我這種情況下失敗了就是這樣.
tomcat的配置
- 主要是 conf/server.xml中 :
這里講幾個重要的參數 :
- appBase : 不寫的話默認是webapps, 值得注意的是這個並不是你項目的目錄, 而是你項目目錄的目錄, 里面的每一個文件夾算是一個javaWeb應用. 如果你用絕對路徑的話, 則為絕對路徑, 如果用相對路徑的話, 則是以tomcat的根目錄為起點的相對路徑. 所以默認情況下這個地方寫的是webapps, 實際指定的是$CATALINA_HOME/webapps, 這也就能解釋為什么我們一開始不設置這個文件直接開啟服務器卻也就能訪問到頁面.
- path 和 docBase : 就是根據path來匹配對應的目錄, 實際就是設置一個虛擬目錄. 比如我圖中的第二個path是/proj2, 那么我只需要輸入localhost/proj2實際上就匹配了目錄
/home/ec2-user/FredNzhlWebProj/test
. 如果path=""或者"/", 那么直接匹配的是localhost, 這時候如果你上面的appBase會被直接無視. 我做了大量實驗發現, docBase似乎並不能是一個相對路徑而必須是一個絕對路徑(盡管網上很多人說它可以是相對路徑, 而且是相對appBase的相對路徑). 而且docBase和appBase的路徑可以沒有任何關系. - 另外感覺appBase更像是一個更高級的docBase, 在這個目錄下的每個文件夾都是一個context, 也就是說都會被自動部署, 而docBase只是一個單獨的應用, 會在appBase之后再進行部署, 所以如果兩者path有重合, appBase下同名path直接被忽略.
所以總結來講, 最簡單的應該是這樣(其中appBase也可以不要, 反正不要就默認webapps, 所以這種情況下那個目錄無論如何都會部署) :
或者是這種(index.html必須放在根目錄的ROOT文件夾中) :
- 很多網站提到了可以在conf/Catalina/domain_name 中添加xml文件里面放context, 比如對於我 :
文件名是xixi, 那么可以直接使用localhost/xixi進行訪問的是, 與在server中不同之處在於, 在這里設置, context中的path無效, 這個path的效果由文件名代替了. 所以其實path 那一項到這里不寫也可以. 這樣部署也獲得了一個好處, 就是如果要添加一個context, 只需要在這里多添加一個文件即可, 無需重啟tomcat, 所以很方便. 據說tomcat是先掃描這個路徑如果沒找到合適的context才去server.xml中尋找context的. 另外如果要使用這種方式部署根目錄項目, 文件名是ROOT.xml即可.
關於部署就這么多...