架設你的網站伺服器 架設流程與問題排除

me
林彥成
2021-07-07 | 2 min.
文章目錄
  1. 1. 伺服器記憶體不足
  2. 2. 伺服器網路連線設定
  3. 3. 伺服器後端服務管理
  4. 4. 伺服器檔案權限設定
    1. 4.1. Permission denied while connecting to upstream
  5. 5. Linux 網頁中文顯示亂碼

通常推薦用 Linux 架設網頁伺服器,作業系統則推薦使用 CentOS 或是 Ubuntu。架站最快方式是安裝 Nginx 並配置前後端相關服務。Nginx 的用途主要提供反向代理,方便我們進行服務界接和相關路徑設定,也提供部屬靜態網頁的簡易設定,更多相關的設定歡迎參考我之前寫過的 常用的 Nginx Config 與相關指令教學

在架設完不管是地端或是雲端的伺服器後,通常會遇到五個問題

  1. 記憶體不足
  2. 網路連線設定
  3. 後端服務管理
  4. 檔案權限設定
  5. 網頁中文顯示亂碼

伺服器記憶體不足

如果開了記憶體較小的機器,有時候會遇到記憶體較滿卡頓的情況,可以幫主機加上用硬碟空間的交換記憶體 swap,因為像前幾年小編使用 EC2 預設是沒有的。

  • tophtop 看一下是不是一直在交換
  • watch -n 1 free -m 只看記憶體
  1. 設定交換記憶體大小: sudo fallocate -l 2G /swapfile
  2. 設定檔案權限: sudo chmod 600 /swapfile
  3. 設定為交換記憶體: sudo mkswap /swapfile
  4. 啟用交換記憶體: sudo swapon /swapfile
  5. 修改系統設定: sudo nano /etc/fstab
1
2
3
# 在最後一行加入修改系統設定,讓下次重開機時也會生效
/swapfile none swap sw 0 0

伺服器網路連線設定

  1. 防火牆設定: 會碰到這個一般是都弄好了,但怎麼都看不到網頁,若停用防火牆後以使用,代表防火牆需要設定

    • sudo ufw disable 停用
    • sudo ufw allow from 192.168.0.0/16 允許通過
  2. 連接埠 (Port) 的設定: 可能程式沒寫好錯誤處理,又剛好選到的 port 跟其他服務一樣。

    • 看一下目前這個 port 是不是有被使用: netstat -tulpn | grep LISTEN
    • 透過指令查看特殊 Port 的服務是否正常 telnet www.google.com 80
    • 模擬斷線: iptables -A OUTPUT -p TCP –dport {PORT} -j REJECT
  3. tcp timeout 設定: 預設值不一定適合,為了效能可以依照需求設定。

1
2
sudo sysctl -w net.ipv4.tcp_keepalive_time=110
sysctl -p
  1. somaxconn 數值設定: 也是調整效能用。
1
2
sysctl -w net.core.somaxconn=512
sysctl -p

伺服器後端服務管理

這裡以 Node.js 為例,建置時 NODE_ENV 設定為 production,網路上的大大測試看起來有差,為了提升效能也建議使用像是 express-redis-cache 這類的套件,如果是較為靜態的資料,就可以透過將資源短暫快取在記憶體中,減少對資料庫的負擔。

在遠端連接 Linux 伺服器中通常不會有桌面,通常會需要註冊成系統服務或是使用 FOREVER, PM2 這類的工具,會是透過管理工具進行管理,Node.js 中常見的工具為 PM2。也因為 Node.js 是單線程,效能優化上最簡單就是透過 cluster mode (類似 nginx 配合多核心的設定可以無痛升級效能)

常用的指令如下:

1
2
3
4
pm2 save
pm2 monit
pm2 ls
pm2 serve

伺服器檔案權限設定

檔案權限有時候會發現寫不進去或無法執行,全開的話就 chmod -R 777 ./*,不需要執行的話就 755,執行 (+X),這裡可以看到三個數字,就是搭配在 linux 上使用指令 ls -l 看到三組的 rwx,其中 r=4 (讀),w=2 (寫),x=1 (執行)

UserGroupOther
764
rwxrwr
777
rwxrwxrwx

Permission denied while connecting to upstream

如果 Nginx 設置了 proxy_pass 卻沒有作用的時候,這時候可以透過 tail -f /var/log/nginx/*.log 指令來查看相關錯誤,如果發現 Permission denied while connecting to upstream,可能就是 SELinux 權限的問題,這時候如果只是需要先測試的話,可以

  1. 設定連接權限: setsebool httpd_can_network_connect on -P
  2. 查看是否設定成功: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

喜歡這篇文章,請幫忙拍拍手喔 🤣

share