


基本的 Armbian 系統和 WordPress 架設完畢後,下一步要架設 nginx 處理對外的 https 連線。
因為我們的目標是零元架設,所以採用免費的 ssl 簽證,效期只有三個月,需要額外使用 cronjob trigger script 來自動更換簽證。
此外,防火牆也是很重要的設定,我們使用 ufw 來設定連入規則,避免 ssh 被不肖人士暴力嘗試。那就讓我們開始吧!
安裝 nginx
使用此指令安裝
sudo apt install nginx直接在瀏覽器輸入 banana pi 的 ip,如果安裝成功,會出現預設的 nginx 畫面。



在 /etc/nginx/site-enabled 下移除掉檔案 default ,另外建立以下的 nginx config 來測試連線到 wordpress container。
upstream bananapi_server {
server 127.0.0.1:9100;
}
server {
listen 80;
# 修改這裡
server_name <your domain name>
client_max_body_size 4G;
# add this line to make nginx pass undersocres headers
underscores_in_headers on;
server_tokens off;
access_log off;
error_log off;
# gzip setting
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
# expires header
expires 7d;
# redirect wp
# 修改這裡
location /wp-content/ {
alias <your wp-content folder path>;
}
# 修改這裡
location /wp-includes/ {
alias <your wp-includes folder path>;;
}
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_redirect off;
proxy_pass http://bananapi_server;
}
}
重起 nginx 看看能不能用 80 port 連入 wordpress
sudo service nginx restart確認沒問題後,就可以到 godaddy 把網域的 A record 指向 banana pi。
網域輸入到瀏覽器,發現被自動轉址,仔細觀察會是第一次啟用 wordpress 的網址(比如說 192.168.1.100:9100)。因為 wordpress 自動把第一次連入的網域儲存起來並設定為預設,如果連入的網域不一樣,就會自動轉址。所以我們先用 192.168.1.100:9100 連入,到 dashboard > setting > general 中修改 WordPress Address 和 Site Address 為 http://<your_domain_name>。此時就可以正常使用剛綁定好的網域連入。



設定自動 renew ssl script
使用以下指令安裝
sudo apt-get install -y python3-openssl python3-crypto python3-setuptools
sudo pip3 install acme-nginx安裝完畢,執行並建立第一份 ssl 簽證
sudo acme-nginx \
-d <your_domain> \
-d <your_sub_domain> \
--private-key <private_key_file_output_path> \
--domain-private-key <domain_private_key_file_output_path> \
--output <crt_file_output_path>稍等一下就會在給定的路徑看到三個檔案,再修改剛剛的 nginx conifig,讓它可以啟動 https。
...
server {
# listen 80; 不聽 80 了
listen 443 ssl;
listen [::]:443 ssl;
# 給定 ssl key file path
ssl_certificate <your_crt_file_path>;
ssl_certificate_key <your_key_file_path>;
# 加這一行強轉 https
if ($ssl_protocol = "") {
rewrite ^/(.*) https://$server_name$request_uri redirect;
}
...
# 另外增加聽 80 並讓它 301 轉 443
server {
listen 80;
server_name <your_domain_name>;
return 301 https://<your_domain_name>$request_uri;
}
下指令讓 nginx reload configure
sudo service nginx reload再用瀏覽器試試看,設定正確就會自動轉 https 了!記得再到 wordpress 的設定頁面,把 WordPress Address 和 Site Address 的開頭改為 https。



最後我們建立一個 bash script,並設定 cronjob 定期呼叫。
nano renew-ssl.sh#!/bin/bash
# 其實和第一次輸入的指令一模一樣
sudo acme-nginx \
-d <your_domain> \
-d <your_sub_domain> \
--private-key <private_key_file_output_path> \
--domain-private-key <domain_private_key_file_output_path> \
--output <crt_file_output_path>
增加執行權限
chmod +x renew-ssl.sh然後執行看看
./renew-ssl.sh它會自動再產生一次新的 ssl 簽證並覆蓋舊的,以及 reload nginx 載入最新的簽證檔!
我們將它加入 cronjob
crontab -e在最後補上這一行
// 0 0 1 * * <renew-ssl.sh 的絕對路徑>
0 0 1 * * /home/user/renew-ssl.sh記得帳號要能免密碼 sudo,不然 cronjob 會無法正常執行!這樣就完成自動化更換 ssl 簽證!
安裝 ufw 防火牆
sudo apt install ufw一一自行加入所需要的規則。這邊從基本的 80, 443, 22 下去做示範
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow from xxx.xxx.xxx.xxx/32 to any port 22 # 讓外網特定 ip 可以連 ssh
sudo ufw allow from 192.168.xxx.xxx/24 to any port 22 # 讓內網可以連 ssh
sudo ufw default deny incoming # 預設阻擋所有連入 (前面設定的規則會優先)
sudo ufw default allow outgoing # 預設開放所有連出最後啟動 ufw 即可!
sudo ufw enable總算搞定基礎設施!不過實測發現因為 banana pi m1 的 SoC 實在太弱,網站反應速度非常慢,開一篇文章竟然要等三秒多!實在無法忍受!下一篇我們就來討論如何優化加速它!
延伸閱讀:
0元用 Raspberry pi 架設自己的 WordPress 網站 #1 Armbian Docker
0元用 Raspberry pi 架設自己的 WordPress 網站 #3 速度優化
封面圖片備註:一定要建立好防火牆,避免伺服器被駭客入侵,變成殭屍






