---
# System prepended metadata

title: 伺服器

---

# 伺服器

## 要安裝的東西
### 給Windows使用者
如果你的電腦不到Windows10的話可能無法安裝，等等請求助
二選一即可(推薦wsl)

* wsl(Windows Subsystem for Linux) 註:北一已經裝好了
    1. 去`設定>系統>選用功能`點開**更多Windows功能**
    2. 勾選`Windows子系統Linux版`和`虛擬機器平台`![image](https://hackmd.io/_uploads/B12bHIlcT.png)
    4. 按下`確定`，然後等他安裝完成
    5. 重新開機
    6. 同時按下`Windows`和`r`，你會看到左下角(預設)有一個小視窗![winR](https://hackmd.io/_uploads/BkAgI8lq6.png)
    7. 輸入`powershell`(或`cmd`)並按下`Enter`，如果你覺得藍藍得很醜可以去Microsoft Store上下載`Terminal Preview`
    9. 輸入`wsl -l -o`查看可以下載的清單，你應該要看到和下圖一樣的東西![wsl-l-o](https://hackmd.io/_uploads/BJDKL8ecp.png)
    10. 輸入`wsl --install -d Ubuntu`(代表我們要下載 Ubuntu 這個Linux發行版)![wsl--installUbuntu](https://hackmd.io/_uploads/r1FRIUxcp.png)
    11. 他會先問你 Enter new UNIX username: ，你就輸入你的用戶名稱即可，可以有英文和數字，~~不要像某個人一樣一直用root~~![startwsl](https://hackmd.io/_uploads/r1XXvIx5T.png)
    12. 他會請你輸入你的密碼，輸入過程中不會顯示，~~不然你的密碼就被看光光了~~
    13. 如果你兩次不一樣他會問你要不要重試，就輸入`y`就好
    14. 去vscode安裝一個叫做 WSL 的延伸模組
    
* 虛擬機(有興趣的自己研究研究)，這個系統需求較高，~~反正就是下載VMWare或Virtual Box然後找個映像檔(.iso)裝進去就好了~~

* ~~&#8203; 洗掉灌 Linux &#8203;~~

### 給Mac使用者
先安裝homebrew，請打開terminal然後貼上這段`/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`，之後要裝什麼東西都是`brew install <pkg>`，把`<pkg>`改成你要裝的東西

### 給Linux使用者
很好，什麼都不用

## 什麼是伺服器
伺服器是一種電腦，負責網頁、線上應用程式等等的資料處理及儲存，通常伺服器從遠端進行管理。

## 伺服器託管平台
Host平台會幫你管理伺服器，然後通常是我們去跟他租伺服器，通常價格依據規格而定，尤其AI要用到的GPU特別貴，多虧於這些平台，只要刷張卡就有伺服器可以用了好ㄟ，平台蠻多的，舉幾個可能大家會有聽過的
* google cloud platform
* aws(amazon)
* azure(microsoft)

這些平台通常還會整合資料儲存、api、網域管理等等重多功能。

## 伺服器作業系統
伺服器常見的系統有以下幾個
* windows server
* Linux
* FreeBSD

其中linux和FreeBSD都是**開源**類Unix作業系統，都非常安全可靠，雖然Windows Server在穩定性低於linux和FreeBSD，但~~他已經進步不少了別這樣嘛~~

## 終端機
終端機是一種電腦的周邊設備，用來讓使用者輸入資料，及顯示其計算結果的機器。簡單來說，它是人類使用者與計算機互動的裝置。終端機有些是全電子的，也有些是機電的。在現代電腦中，終端機通常是指命令列介面或終端模擬器。

在Windows電腦中，預設有cmd和powershell兩種，兩種的指令方式不同，在使用上非常麻煩，而在Linux、Mac等等Unix家族作業系統，指令較為相似，所以今天才會請用Windows電腦的同學先安裝wsl。

在終端機中，你會看到，一個游標，而你游標所在的那行，最左邊有一段文字，代表你是哪個用戶，和現在所在的目錄(資料夾)，然後你可以在此輸入指令，如下圖。![terminal](https://cdn.discordapp.com/attachments/1114571898307752101/1200311312199192616/IMG_1460.png?ex=65c5b805&is=65b34305&hm=f030291beed30703fea15e9638fa673808f3a4df47704bee95d7b16ce18c67a5&)


### 路徑
路徑，指出一個目錄或檔案的位置，有絕對路徑和相對路徑兩種，絕對路徑在 Linux 上是以`/`或`~`開頭，相對路徑是從當前目錄開始，指向一個檔案路目錄。

路徑中有些符號如下:

* `/`用於分個路徑上的目錄名稱
* `.`代表當前所在目錄
* `..`代表上一個目錄
* `/`開頭代表根目錄，是包含所有電腦中的檔案。
* `~`代表家目錄，~~就是你家~~，你的名稱是`ckeisc807`的話，你的家目錄就是`/home/ckeisc807`

範例如下:
當前所在目錄為`~/code/apcs`，內容如下
```
.
├── 20231022
│   ├── a.cpp
│   └── b.cpp
└── 20240107
    ├── 1.cpp
    ├── 2.cpp
    ├── 3.cpp
    ├── 4.cpp
    └── a.out
```

`4.cpp`這個檔案所在的絕對路徑是`~/code/apcs/20240107/4.cpp`，相對路徑是`20240107/4.cpp`

如果移動到`20231022`中，`4.cpp`這個檔案的相對路徑變為`../20240107/4.cpp`。

## 操作指令
以下指令都是以在Ubuntu的為主。會以`<dir>`代表為資料夾路徑，`<file>`代表檔案路徑，`<text>`代表字串(可用`'`或`"`在前後標註，如果檔案或資料夾路徑中有空白等特殊字元也須使用)，部分指令可以加入參數，如果`ls`這個指令有一個參數`-a`，則用法為`ls -a`，此外可以用`Tab鍵`自動幫你打好檔名、資料夾名。

如果想查看一個指令的完整介紹，試試`<指令> --help`或`<指令> -h`

### 基本指令表
* `help`，顯示內建指令
* `pwd`，顯示當前路徑
* `clear`，清除終端機內容
* `ls <dir>`，顯示當前資料夾中的檔案及目錄，`<dir>`預設為當前目錄`.`，`ls`可加入其他參數
    * `-a`，顯示當前目錄中的所有檔案(包含檔名為`.`開頭的影藏檔案)
    * `-lh`，顯示更多資訊
    * `-R`，顯示當前整個目錄中的所有當案(包含資料夾中的)
* `cd <dir>`，移動至目錄，`dir`預設為`~`家目錄，`cd`可加入其他參數
    * `-`，回到上一次到的目錄
* `mkdir <dir>`，建立資料夾，`mkdir`可加入其他參數
    * `-p`，可一次創建新資料夾中的新資料夾
* `touch <file>`，創建檔案
* `cat <file>`，輸出整個檔案內容
* `head <file>`，輸出較少的檔案內容，看名稱就會知道是檔案的頭
* `echo <text>`，輸出字串
* `rm <file>`，刪除檔案，有很多種參數可以加
    * `rm -r <dir>`，刪除資料夾及其當中的檔案
    * `-i`，刪除前需確認
    * `-f`，一律不需確認，小提示: 可以用`-fr`
* `rmdir <dir>`，刪除空資料夾，~~我不知道這個存在的意義是什麼~~
* `export <text0>=<text1>`，設定環境變數，將環境變數`<text0>`設為`<text1>`，**注意**關閉終端機後就會消失
* `alias <text0>=<text1>`，創建命令別名，`<text0>`代表別名，`<text1>`代表別名的內容，例如執行`alias hello="echo hello world!"`後，只要輸入 hello 就會執行`echo "hello world!"`，**注意**`alias`在關閉終端機後就會消失
* `exit`，離開關閉終端機
* `find <dir> -name <file>`或`find <dir> -name <dir>`，搜尋檔案或資料夾，`<dir>`預設為當前目錄
* `source`，執行某個檔案的內容(以指令的方式)，通常用於在編輯完成`.bashrc`後，用`source ~/.bashrc`來將 .bashrc 的內容執行
* `less`，可以一次輸出較少東西，常用方式是`cat <file> | less`，在`<file>`這個檔案很大的情況下好用
* `grep`，用於擷取文字中包含特定文字，常見用法如下，
    * `ls | grep <text>`，會找出目前目錄中名稱包含`<text>`的檔案和資料夾
* `sudo <command>`，這樣就可以用root權限執行某個指令`<command>`
* `su <user_name>`，使用者改為`<user_name>`
* `shutdown now`，將電腦關機
* `reboot`，將電腦重新啟動
* `chmod`，變更權限，最常用的就是`chmod +x <file>`這樣會允許`<file>`這個執行檔或批次檔執行，而等等也會用到的`chmod 400 <file>`是將權限設為只有文件所有者才可以讀取
* `chown`，變更用戶，下圖是變更用戶，然後把 a.out 這個檔案的的權限改為只用所有者可以讀取![image](https://hackmd.io/_uploads/HJKfjVf56.png)


### 運算符
常用的運算符可以幫助你很多很多
* `;`讓你在同一行打多個指令，這用來分割
* `&&`讓你在同一行打多個指令，這用來分割，如果前面的**無法**正常運行，後面的指令就不會運行
* `||`讓你在同一行打多個指令，這用來分割，如果前面的**可以**正常運行，後面的指令就不會運行
* `>`讓你把輸出寫進某個檔案，例如`echo "hello 2024 ckefgisc winter camp" > hello.txt`，就是將echo輸出的內容寫進hello.txt的檔案裡
* `<`讓你把某個檔案作為輸入，例如`./ans.out < 1.in > 1.out`，會將1.in作為輸入1.out作為輸出，當然`<`可以單獨使用
* `$`，用來表示變數數值，例如`echo $HOME`就是輸出`HOME`這個環境變數的數值
* `|`將第一個指令的輸入作為另一個指令的輸出，例如`cat a.txt | clip.exe`會將a.txt的內容複製到剪貼簿，不過`clip.exe`只有WSL能用

### 批次檔
讓你先寫好一個檔案，會自動幫你輸入指令，就不用每次都要打一大堆了好ㄟ

* 解譯器
每個批次檔都可以選擇解譯器，不同的解譯器甚至可以用來跑不同語言的批次檔，預設的就跟我們在終端機打的指令是一樣的，稱為`bash`，所以為了避免系統出錯，我們習慣在第一行加上註解`bash`的路徑，用於設定解譯器，例如`#!/bin/bash`或`#!/usr/bin/bash`，除了原本的`bash`以外也可以用`python`、`node`，例如`#!/usr/bin/python3`、`#!/usr/bin/node`
* 開機批次`.bashrc`
這個批次檔會在你每次開啟終端機時自動執行，放置於家目錄中。

### apt (套件安裝)
apt 是 Ubuntu 、 Debian 等等 Debian-base 的 Linux distro 中的套件管理系統，可用來安裝、刪除、更新套件。

每次安裝前記得先更新`sudo apt update && sudo apt upgrade`，如果太久沒更新可能導致無法正常安裝等等問題，可能需要一段時間請耐心稍後，如果過程中遇到類似畫面如下，選`<OK>`即可![image](https://hackmd.io/_uploads/S18fS2l5T.png)

用`sudo apt install <package>`來安裝套件，他會自動上網檢索是可供安裝的版本及是否安裝過這個套件，如果可以安裝，他會問`Do you want to continue? [Y/n]`，輸入`y`代表繼續，就會自動化完成安裝，如果你覺得 Do you want to ~~build a snowman~~ 很煩的話可以加上`-y`的參數，他會自動同意，例如`sudo apt install <package> -y`

除了`apt`以外，還有`apt-get`
`apt`是`apt-get`的更新版本，它結合了多個套件管理工具的功能，以方便使用者使用。`apt`命令列工具透過直覺式指令、產生的行為與安全功能為最終使用者提供更高等級的使用者介面。相較之下，`apt-get`命令是一個低階介面，可與Linux核心處理程序進行更密切的通訊。

### 常用套件
以下套件不一定有安裝過，如果出現`command not found`等等報錯，請用apt進行安裝

* `nano`，內建的(不需另外安裝)文字編輯器，用`nano <file>`打開檔案，如果該檔案未存在，會建立新的。
* `vim`，會用的都說讚的編輯器，可以用來編輯檔案，用法上手難度較高，使用方式請見補充，其他和 nano 相似。
* `neofetch`，如下圖，甚至可以自訂顯示的內容。
* `python3`，就是 python ，用`python3 <file.py>`來跑 python 程式
* `g++`，C++的編譯器，用`g++ -o <file.out> <file.cpp>`，`<file.out>`是指編譯完成的執行檔名，`<file.cpp>`是你的程式碼檔案
* `nodejs`就是 nodejs ，用`nodejs <file.js>`來運行`<file.js>`
* `wget`，檔案下載工具，下載速度超快，可以用一些參數
    * `-r`，可以下載資料夾和他裡面的檔案
    * `-l`，他的深度限制
* `curl`，可以做的事比 wget 多，除了下載(GET)以外，還可以上傳(POST)，通常你在下載、安裝的文件中會看到他，~~反正遇到就複製貼上就對了~~
    * `curl <url>`，模擬 GET 請求，下載網頁`<url>`中的內容
    * `curl -X POST -d "<param1>=<value1>&<param2>=<value2>" <url>`。模擬 POST 請求，會告訴網頁`<url>`你的`<param1>`是`<value1>`，`<param2>`是`<value2>`
    * `curl -H "Content-Type: application/json" -X POST -d '{"<param1>":"<value1>","<param2>":"<value2>"}' <url>`
    * `curl -v <url>`，會顯示詳細的請求和回應資訊
* `tmux`，一個超好用的Linux視窗管理工具，而且可以在關閉終端機後繼續執行程式，推
    * `tmux`，這樣會開啟一個`tmux`視窗，看起來就跟我們的終端機一模一樣![image](https://hackmd.io/_uploads/BkxIIPx9T.png)
    * `tmux`的快捷鍵
        * `<Ctrl> b`然後按`d`，代表退出，但不關閉
        * `<Ctrl> b`然後按`x`，代表關閉
        * `<Ctrl> b`然後按`%`，水平割視窗![image](https://hackmd.io/_uploads/Sku3dwec6.png)
        * `<Ctrl> b`然後按`"`，垂直分割視窗![image](https://hackmd.io/_uploads/B1_yFPg5T.png)
        * `<Ctrl> b`然後按`o`，依序切換視窗
        * `<Ctrl> b`然後按`方向鍵`，切換在特定方向的視窗
        * `<Ctrl> b`然後按`<space>`，切換視窗排列方式
    * `tmux ls`，顯示開啟中的session![image](https://hackmd.io/_uploads/S1RTn_gqa.png)
    * `tmux attach -t <number>`，如果我`<number>`用0，那就是進入`0: 1 windows (created Fri Jan 26 08:27:35 2024)`這個
    * `tmux kill-session -t <number>`，關閉某個session
* `tree`，他會以結構化顯示目錄及其當中的檔案，用過的都懂
#### ssh 連線工具
ssh 是以中遠端連線工具，是最常見的伺服器遠端連線工具。

##### 連線方式如下(`ssh <username>@<host_ip>`)
1. 輸入`ssh <username>@<host_ip>`
2. 第一次會問要不要使用密碼，回答`yes`即可
3. 輸入密碼，**請注意**輸入密碼的過程中不會顯示你輸入的東西是正常的，~~不然密碼就被看光光了~~

##### 伺服器登入密碼設定方式如下(這個不推，請使用密鑰)
1. `sudo vim /etc/ssh/sshd_config`，用於編輯這個檔案
2. 找到`PasswordAuthentication no`，將`no`改成`yes`
3. 存檔
4. 輸入`sudo service ssh restart`重新啟動ssh
5. 可以進行ssh連線

##### 伺服器密鑰登入方式
1. 找我 (807) 或 cjtsai 拿預設的密鑰、和伺服器 ip `<server_ip>`
2. 在你的電腦上，將密鑰寫進`~/.ssh/id_rsa_ubuntu`的檔案中
3. `chmod 400 ~/.ssh/id_rsa_ubuntu`限制密鑰存取權限確保安全
4. `ssh-keygen`，建立你等一下要給你個人帳號用的密鑰，這個密鑰預設是用RSA2048加密，至於原理是什麼，後天再說吧!
5. `cat .ssh/id_rsa.pub`，輸出公鑰，請你將他複製起來
6. `ssh -i ~/.ssh/id_rsa_ubuntu ubuntu@<server_ip>`連入伺服器的ubuntu用戶中
7. `sudo adduser <name>`，創建用戶，`<name>`就取個方便辨認的英文名子吧
8. 他會問你新用戶的密碼要是什麼，就創建個密碼即可(**請記好你的密碼**)，如下圖![image](https://hackmd.io/_uploads/HyKL9seqa.png)
9. `sudo usermod -aG sudo <name>`，給與新用戶能夠`sudo`的權限
10. `su <name>`，進入`<name>`這個目錄中
11. 回到家目錄`cd`
12. `mkdir .ssh`，建立`.ssh`的資料夾
13. `sudo vim ~/.ssh/authorized_keys`，開啟這個檔案並貼上剛剛複製的公鑰，這步是要允許你用這個密鑰登入
14. 回到你的電腦上，如下圖![image](https://hackmd.io/_uploads/SkLeLKZc6.png)
15. `vim ~/.ssh/config`，編輯 ssh 設定，這樣可以讓你不用每次都打密鑰路徑、ip、用戶名稱等等，非常方便，請寫入下列這段文字
```
Host <nick_name>
Hostname <server_ip>
Port 22
User <user_name>
identityfile ~/.ssh/id_rsa
```
16. 可以用`ssh <nick_name>`連入伺服器了，以後都可以用`<nick_name>`代替`<username>@<host_ip>`好ㄟ(包含下面的`scp`歐)

scp 是 ssh 中的檔案傳輸工具，他可以將本地檔案上傳或下載伺服器中的檔案

##### 檔案上傳方式如下
`scp <file> <nickname>:<dir>`，這是將你本地的檔案`<file>`上傳到`<nickname>`伺服器的`<dir>`目錄中，他一樣會請你輸入密碼。

##### 檔案下載方式
`scp <nickname>:<file> <dir>`，這是`<nickname>`伺服器的檔案`<file>`，下載到本地資料夾，如果要下載到當前目錄`<dir>`請使用`.`

##### 利用vscode Remote SSH連入(可能會比較容易當，因為記憶體不夠)
1. 打開vscode，下載延伸模組`Remote -SSH`
2. 按`<Ctrl> <Shift> p`，你會有一個搜尋框，找到`Remote-SSH: Connect to Host...`這項，使用他![image](https://hackmd.io/_uploads/Bk56ihxcT.png)
3. 選擇`+ 新增 SSH 主機...`這項![image](https://hackmd.io/_uploads/HkvB2ngqT.png)
4. 輸入`ssh <user_name>@<server_ip> -A`
5. 選擇第一個，你會進到一個config的檔案中![image](https://hackmd.io/_uploads/SyBPanecp.png)
6. 先去找到你剛剛密鑰放的地方，記得他的路徑`<dir>`，檔名`<file>`![image](https://hackmd.io/_uploads/Byno0ng5T.png)
7. 在下一行加入`IndentityFile <dir>\<file>`，如下圖![image](https://hackmd.io/_uploads/Sy9NJagcp.png)
8. 你再用一次`Remote-SSH Connect to Host...`時，你就會看到你的`<server_ip>`，就可以連進去了


#### `git`專案管理工具
`git`是專案管理工具，功能是幫你建立專案、複製(clone)開源專案、建立分支(branch)、合併分支等等多種功能。

##### 基本設定
如果等一下需一用到除了`clone`以外的東西，請先去註冊[github](https://github.com)帳號，然後使用`git config --global user.name "<github_name>"`，`<github_name>`是你申請github用的名稱，以我為例就是`ckeisc807`![image](https://hackmd.io/_uploads/H1NsXFgqp.png)
接下來再用`git config --global user.email "<email>"`，`<email>`需要是你用來註冊Github的那個。

我們要在伺服器上生成一個伺服器的一組密鑰，所以我們輸入`ssh-keygen`生成都默認就好，一樣要`chmod 400 ~/.ssh/id_rsa`，然後`cat ~/.ssh/id_rsa.pub`，將公鑰輸出，複製這個公鑰，去設定找到`SSH and GPG keys`，然後點`New SSH key`，如下圖![setting](https://hackmd.io/_uploads/rynjORx5T.png)
然後給他一個`TiTle`表示說你這個Key的作用，`Key`的輸入框請貼上剛剛複製的公鑰

##### 下載開源專案(`git clone <url>`)
1. 去[Github](https://github.com)找到一個你要下載的repository
2. 點開藍色的`Code`![blue code](https://hackmd.io/_uploads/SyEYStlq6.png)
3. 選擇`SSH`的選項，然後按下複製![ssh](https://hackmd.io/_uploads/HJ5SXCg96.png)
4. 然後輸入`git clone <url>`，`<url>`是你剛才複製的連結，如果`<Ctrl> v`無法順利貼上，請試試右鍵，這個`<url>`應該是`git@github.com:<author>/<repo_name>.git`就是對的，`<author>`是該專案的作者，`<repo_name>`是專案的名稱
5. 已經下載下來了，應該會在當前目錄有一個名稱是`<repo_name>`的資料夾，裡面就是你下載的東西

##### 建立專案
1. 在Github上建立新的repository
2. 給他一個`<Repository name>`，`Add a README file`溝起來，然後就按`Create repository`
3. 下載這個專案到你的電腦裡

##### 更新上遠端
1. `git add .`，將此資料夾檔案加入git中
2. `git commit -m "<commit_message>"`，提交變更
3. `git push`，將變更上傳到Github遠端

##### 更新本地
`git pull`，把 Github 遠端的東西拉下來

##### 更換分支
`git checkout <branch>`，切換到`<branch>`這個分支

##### 查看變更內容
`git status`，可以看到和遠端的檔案差異為何

#### `nginx`反向代理工具
記得要先安裝`sudo apt install nginx`

##### 架設
1. 剛開始先在用`git clone <repo>`下載你想用的靜態網頁專案
2. `sudo cp -r <reponame> /var/www/`，將檔案複製到`/var/www`這個資料夾下
        3. `cd /etc/nginx/conf.d`進入這個目錄中，我們在一個新檔案`<repo.conf>`中寫入這長串，記得加上`sudo`和把`<reponame>`和`<domain>`換掉，我們會給你一個網域`<domain>`，之後就會是你的網址
```
server{
    listen 80;
    listen [::]:80;
    root /var/www/<reponame>;
    server_name <domain>;
    index index.html;
    location / {
         try_files $uri $uri/ =404;
    }
}
```
4. `sudo nginx -t`，測試你寫的 nginx 是不是好的，如果結尾是 test is successful 代表沒問題
5. `sudo systemctl restart nginx`，重啟 nginx
6. 你現在就可以連到你的網站了，可是你的網站可能會跟你說不安全，因為我們現在使用的是未
7. 加密的 HTTP ，應該要使用加密過的 HTTPS 才比較安全
8. 接下來要安裝 certbot，他會自動加密及申請憑證，但他需要用 snap 安裝
9. `sudo snap install core; sudo snap refresh core`，更新 snap
10. `sudo snap install --classic certbot`，安裝 certbot 
11. `sudo ln -s /snap/bin/certbot /usr/bin/certbot`，link 一下，等一下就可以不用打 certbot 的 path 了
12. `cd /etc/nginx/sites-available/`，進到這個資料夾
13. `sudo cp default <domain>`，而複製出來的檔案就是等等要架設的網站設定
14. `sudo vim <domain>`打開剛剛複製出來的設定檔，找到有一行是`root /var/www/html;`這行表示網頁檔案放在`/var/www/html`的資料夾裡，可是我們剛剛放在`/var/www/<reponame>`這裡，所以要把這行改成`root /var/www/<reponame>`
15. 還在同個檔案中，將`server_name _;`改為`server_name <domain>;`，代表你的網頁會在這個網域中
16. **記得存檔**
17. `sudo ufw status`，你會看到他是關的(inactivate)，所以我們要打開他
18. `sudo ufw enable`，開啟 ufw
19. `sudo ufw allow ssh`，允許 ssh 使用 ufw
20. `sudo ufw allow "Nginx Full"`，允許 Nginx
21. `sudo ufw status`，你會看到他打開了![image](https://hackmd.io/_uploads/H1U2t4G56.png)
22. `sudo certbot --nginx -d <domain>`， certbot 會自動幫你處理ssl的事情，你的網頁才可以加密
23. 由於加密只有 60 天的有效期限，所以要自動更新密鑰
24. `sudo systemctl status snap.certbot.renew.service`查看這東西是否運行中，正常情況應該是否
25. `sudo certbot renew --dry-run`，執行自動更新
26. 跟剛剛一樣使用這兩個指令`sudo nginx -t`、`sudo systemctl restart nginx`
27. 重開網站，你會發現他已經從 HTTP 變為 HTTPS 了，安全多了讚拉

## 補充
### 名詞解釋
* **WSL**: Windows Subsystem for Linux ，根據 microhard 的說法如下"Windows 子系統 Linux 版 （WSL） 是 Windows 的一項功能，可讓您在 Windows 電腦上執行 Linux 環境，而不需要個別的虛擬機或雙開機。 WSL 的設計目的是為想要同時使用 Windows 和 Linux 的開發人員提供順暢且具生產力的體驗"，但並沒有~~但聽說也有 WSA ㄟ~~
* **開源**: 開源的概念是公開和分享知識和資源，以便其他人可以使用、修改和分發它們。開源的目的是促進創新、協作和共享，以實現更好的結果。但絕對不是~~開源節流~~
* **網域**: 一串用`.`分割的文字的電腦名子，用於在資料傳輸時標識電腦的電子方位。
