最近,由於項目需要,自己申請了一台亞馬遜用於部署網站測試,在使用期間,發現網上沒有一篇非常完整的文章講解從服務器申請到域名解析,SSL證書申請的整個流程。所以自己總結一下,以供大家學習!
一、亞馬遜EC2申請
為什么選擇申請亞馬遜的服務器?只是因為項目需要而已,我本意是想申請阿里雲的的服務器的(畢竟是阿里的員工),並且亞馬遜提供一年的免費EC2服務器。
打開地址:https://aws.amazon.com/cn/ec2/?hp=tile&so-exp=below
點擊“免費試用Amazon EC2”
之后會跳轉到登錄頁面,自己注冊一個賬號即可,注冊需要使用信用卡號。注冊之后進入EC2 Dashboard,
點擊“啟動實例”按鈕
勾選“僅免費套餐”
然后選擇合適你自己的服務器,我選擇的是Ubuntu Server 18.04 LTS (HVM), SSD Volume Type ,
進入選擇實例類型界面
全部使用默認的選擇,直接點擊“審核和啟動”按鈕
進入到核查實例啟動的頁面:
按照上圖步驟操作后,
點擊“啟動實例”按鈕
點擊“查看實例”,進入實例面板,這里可以查看服務器的靜態IP,這個IP就是外網可訪問地址
現在如果嘗試ping這個ip會發現超時
如果要想可以正常ping IP,需要打開ICMP的入站規則
選擇網絡與安全-安全組,選中你的實例(launch-wizard-xxx),選中入站,點擊“編輯按鈕”
然后添加如下一條:
再次在自己的電腦終端中ping IP:
到目前為止,AWS EC2的一條免費的測試服務器就申請好啦。
還有一點切記,如果你不想付費,在免費到期前,一定要終止服務器,不然,會扣你信用卡中的美金的!
二、終端連接AWS EC2+SecueCRT連接
將上面申請到的ssh密鑰copy到文件夾.ssh下,在終端輸入命令
ssh -i“webserver.pem”ubuntu@ec2-xxx-xxx-xxx-xxx.ap-south-1.compute.amazonaws.com
webserver.pem: ssh密鑰
ubuntu: ec2服務器用戶名
ubuntu@ec2-xxx-xxx-xxx-xxx.ap-south-1.compute.amazonaws.com:ec2服務器共有DNS(IPv4)
登錄成功后如下圖:
有些同學覺得直接使用終端不是很方便,有些功能,比如rz這種上傳文件命令也用不了,那么推薦使用SecureCRT,鏈接方式如下:
Hostname:對應EC2 公有DNS(IPv4)
Port:22
Username:ubuntu
PublicKey:選擇EC2配置中生成的ssh密鑰
當這些都完成后,你發現可能登錄不成功,這個就是22的端口沒有開,
在 網絡與安全-安全組,入站規則中添加如下規則:
之后,就可以在SecureCRT中登錄服務器啦。
三、nginx+node環境搭建
在服務器申請成功后,就要開始搭建node環境了。
1. 開始前的准備
獲取root權限,這樣可以避免一些文件的創建,寫入的權限問題
先獲取系統更新, 並且安裝curl工具
sudo apt-get update
sudo apt-get install curl
2. 安裝node.js
我們一般不建議使用apt-get node來安裝node.js,因為直接安裝會安裝最新版的,也許會和開發環境的不一致,照成一些兼容問題。
這里推薦一個管理不同版本node.js的工具:nvm,官網: https://github.com/creationix/nvm ;
使用curl安裝nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
安裝完nvm后,就可以通過nvm來指定安裝node.js版本了
# 列出可以安裝的node版本號 nvm ls-remote # 安裝指定版本的node (當前最新版本為v10.11.0, LTS版是v8.12.0) nvm install v8.10.0
然后通過node -v可以查看當前版本號
現在node服務就安裝好啦,我們用最簡單的代碼來測試node是否可用, 創建一個test.js文件
mkdir demo cd demo touch test.js sudo vi test.js
將一下代碼復制到test.js文件中:
const http = require('http'); const hostname = '127.0.0.1'; 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}/`); });
保存文件並退出:
# 保存文件並退出 :wq
啟動node服務器:
當前服務器訪問地址
但是我們在瀏覽器通過AWS EC2服務器的共有IP並不能訪問成功,當我們在入站規則中開放3000端口后,就可以訪問成功
3. 安裝nginx
但是我們通常訪問網站是直接域名訪問,也就是外部只請求80端口。那么這里,我們就需要通過反向代理來實現多端口的分發工作。
安裝nginx,並查看版本號
sudo apt-get install nginx
nginx -v
進入nginx配置目錄(/etc/nginx),查看文件
通過公有IP訪問,頁面返回如下信息:
這說明,我們的nginx服務安裝成功,並且已經成功啟動,現在來給http://127.0.0.1:3000做一個代理
在/etc/nginx中添加nginx配置
cd conf.d
touch test.conf
sudo vi test.conf
復制一下代碼到test.conf中,保存退出文件,
server { listen 80; server_name xxx.xxx.xxx.xxx; #當前使用ip訪問,所有直接配置共有IP location / { proxy_pass https://127.0.0.1:3000; # 被代理的服務器的域名 } }
在目錄 /etc/nginx中執行以下命令
# 檢測配置是否正確 nginx -t # 重啟服務器 nginx -s reload
執行結果如下:
瀏覽器通過公網IP訪問,頁面正常返回
四、阿里雲域名申請
上面可以通過IP訪問網站已經成功,但是IP不是一個實用易記的地址,現在就需要通過申請域名來綁定當前服務器IP,
在阿里雲上申請一個域名: https://wanwang.aliyun.com/domain
搜索注冊一個你想要的域名,付款后,進入域名列表,選中你剛買的域名,點擊“解析”
在解析設置中,點擊添加記錄,在記錄值中填寫AWS EC2的共有IP,點擊“確定”。
現在我們在瀏覽器中輸入域名,我們就會看到“welcome to nginx”的頁面,這個說明域名已經解析成功。
之后修改nginx配置,將域名綁定到端口為3000的站點上即可
server { listen 80; server_name www.yourdomain.com; # 這里改成你的域名 location / { proxy_pass https://127.0.0.1:3000; } }
現在通過瀏覽器訪問,你就可以看到熟悉的hello world頁面啦。
五、FreeSSL證書申請和nginx配置
1.申請FreeSSL證書
到現在我們當然還是不能滿足,為了網站的訪問安全,並且現在各種搜索引擎對https協議都開始采用優先排名,因此申請SSL是必要的。
現在有一些機構提供一些免費的SSL證書供大家使用,推薦FreeSSL.org:https://freessl.org/
如果只是用於測試,免費證書完全可以滿足我們的要求,輸入你的域名,選擇一個品牌,點擊“創建免費的SSL證書”
之后選擇證書類型,驗證類型,點擊“點擊創建”
之后會生成DNS驗證記錄:
進入阿里雲的域名管理,在解析設置中點擊“添加記錄”
在彈窗中添加freessl中的dns驗證信息,點擊“確認”按鈕。
之后,回到FreeSSL.org的驗證界面,點擊“點擊驗證”按鈕
驗證成功后,會生成CA證書,證書文件,證書密鑰
注意,這里點擊“證書下載”,下載的文件必須保存好,不要丟失了
再次進入阿里雲的域名列表,點擊需要配置的域名,進入域名的基本信息頁面,點擊“免費開啟SSL證書”
在申請證書的頁面,點擊右上角的“上傳原有證書”按鈕,打開彈窗,填寫對應的 證書文件,證書密鑰,點擊上傳
之后,點擊“返回證書控制台”
點擊“我的證書”
你會看到剛添加的指紋
2. AWS EC2中添加https入站規則
先在入站規則中添加類型為https,端口為443,來源為任意位置的規則
3. 配置ssl證書到nginx
將前面下載的ssl證書上傳到AWS EC2中, 我放的地址為:/etc/nginx/ssl/yourdomain.com/
修改nginx配置
server { listen 80; server_name www.yourdomain.com; return 301 https://$host$request_uri; } server { listen 80; server_name yourdomain.com; return 301 https://$host$request_uri; } server { listen 443; server_name www.yourdomain.com; ssl on; location / { proxy_pass http://127.0.0.1:3000; } error_log /home/ubuntu/logs/nginx/www.yourdomain.com/error.log error; access_log /home/ubuntu/logs/nginx/www.yourdomain.com/access.log; ssl_certificate /etc/nginx/ssl/yourdomain.com/full_chain.pem; ssl_certificate_key /etc/nginx/ssl/yourdomain.com/private.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL; ssl_prefer_server_ciphers on; }
保存退出配置文件,重啟nginx服務器,這時再通過域名訪問,就會看到安全的狀態
點擊安全,可以查看證書:
ok, 到此,一個基本的node網站部署就完成了。
參考資料:
https://blog.csdn.net/jjihuang/article/details/80777306
https://www.cnblogs.com/fengff/p/8892590.html