通常推薦用 Linux 架設網頁伺服器,作業系統則推薦使用 CentOS 或是 Ubuntu。架站最快方式是安裝 Nginx 並配置前後端相關服務。Nginx 的用途主要提供反向代理,方便我們進行服務界接和相關路徑設定,也提供部屬靜態網頁的簡易設定,更多相關的設定歡迎參考我之前寫過的 常用的 Nginx Config 與相關指令教學。
在架設完不管是地端或是雲端的伺服器後,通常會遇到五個問題
- 記憶體不足
- 網路連線設定
- 後端服務管理
- 檔案權限設定
- 網頁中文顯示亂碼
伺服器記憶體不足
如果開了記憶體較小的機器,有時候會遇到記憶體較滿卡頓的情況,可以幫主機加上用硬碟空間的交換記憶體 swap,因為像前幾年小編使用 EC2 預設是沒有的。
top
或htop
看一下是不是一直在交換watch -n 1 free -m
只看記憶體
- 設定交換記憶體大小:
sudo fallocate -l 2G /swapfile
- 設定檔案權限:
sudo chmod 600 /swapfile
- 設定為交換記憶體:
sudo mkswap /swapfile
- 啟用交換記憶體:
sudo swapon /swapfile
- 修改系統設定:
sudo nano /etc/fstab
1 | # 在最後一行加入修改系統設定,讓下次重開機時也會生效 |
伺服器網路連線設定
防火牆設定: 會碰到這個一般是都弄好了,但怎麼都看不到網頁,若停用防火牆後以使用,代表防火牆需要設定。
sudo ufw disable
停用sudo ufw allow from 192.168.0.0/16
允許通過
連接埠 (Port) 的設定: 可能程式沒寫好錯誤處理,又剛好選到的 port 跟其他服務一樣。
- 看一下目前這個 port 是不是有被使用:
netstat -tulpn | grep LISTEN
- 透過指令查看特殊 Port 的服務是否正常
telnet www.google.com 80
- 模擬斷線: iptables -A OUTPUT -p TCP –dport {PORT} -j REJECT
- 看一下目前這個 port 是不是有被使用:
tcp timeout 設定: 預設值不一定適合,為了效能可以依照需求設定。
1 | sudo sysctl -w net.ipv4.tcp_keepalive_time=110 |
- somaxconn 數值設定: 也是調整效能用。
1 | sysctl -w net.core.somaxconn=512 |
伺服器後端服務管理
這裡以 Node.js 為例,建置時 NODE_ENV 設定為 production,網路上的大大測試看起來有差,為了提升效能也建議使用像是 express-redis-cache 這類的套件,如果是較為靜態的資料,就可以透過將資源短暫快取在記憶體中,減少對資料庫的負擔。
在遠端連接 Linux 伺服器中通常不會有桌面,通常會需要註冊成系統服務或是使用 FOREVER, PM2 這類的工具,會是透過管理工具進行管理,Node.js 中常見的工具為 PM2。也因為 Node.js 是單線程,效能優化上最簡單就是透過 cluster mode (類似 nginx 配合多核心的設定可以無痛升級效能)。
常用的指令如下:
1 | pm2 save |
伺服器檔案權限設定
檔案權限有時候會發現寫不進去或無法執行,全開的話就 chmod -R 777 ./*,不需要執行的話就 755,執行 (+X),這裡可以看到三個數字,就是搭配在 linux 上使用指令 ls -l 看到三組的 rwx,其中 r=4 (讀),w=2 (寫),x=1 (執行)
User | Group | Other |
---|---|---|
7 | 6 | 4 |
rwx | rw | r |
7 | 7 | 7 |
rwx | rwx | rwx |
Permission denied while connecting to upstream
如果 Nginx 設置了 proxy_pass
卻沒有作用的時候,這時候可以透過 tail -f /var/log/nginx/*.log
指令來查看相關錯誤,如果發現 Permission denied while connecting to upstream
,可能就是 SELinux 權限的問題,這時候如果只是需要先測試的話,可以
- 設定連接權限:
setsebool httpd_can_network_connect on -P
- 查看是否設定成功:
getsebool -a | grep httpd
Linux 網頁中文顯示亂碼
這時候通常是因為沒有安裝字型,Cent OS 的話可以嘗試以下指令
- locale: 看一下是不是 zh_TW
安裝字型,網路上有很多建議指令,各自都有成功或失敗,但都安裝一次到位最好
- yum -y install fonts-chinese
- yum install m17n-db-common-cjk
- yum install m17n-db-chinesesv
- yum groupinstall chinese-support
喜歡這篇文章,請幫忙拍拍手喔 🤣