###### tags: `1111` `lsa` `ncnu`
# Week 08 (2022/11/03)
[TOC]
- Book mode: https://hackmd.io/@ncnu-opensource/book
---
- `/var/www`: 瀏覽器預設畫面

新增html 將nginx路徑存在裡面
## Virtual Host
- 主要分為 name-based 以及 IP-based
- 在一個server上託管多個網站,網站與網站間共享一個server的記憶體、CPU、設定檔等
- 不浪費 server 資源,最大化利用價值
- demo
```=
telnet ammon.bluet.org 80
GET / HTTP / 1.0
```
```=
<head><title>BlueT.org Studio</title></head>
```
更改Host
### Name-based Virtual Host
- 在同一server上架有多個不同的網站,不同網站間依據名稱判定
- 名稱就是是使用者輸入的FQDN
- 一個網站也可以 match 到不止一組的 domain name
### IP-based
- 在一台主機上,開設多個IP位址的虛擬主機,可以針對只聽特定的網卡
- 
:::info
**Port-based Virtual Host**
利用 port 來區別不同的網站,因為不會在常見的 port 上,可以用在內部或私人使用
:::
### Lab1 實作
1. 進入 `cd /var/www`
- 建立資料夾 vhost
- `sudo mkdir vhost`
- 進入 `/var/www/vhost`,然後建立資料夾 `nginx1`
- `sudo mkdir nginx1`
- 在裡面新增一個 html
- `sudo vim index.html`
2. 再去`sudo vim /etc/hosts`新增一個 host 的紀錄

3. 在sites-available 複製`default`,並命名為 `nginx-vhost`
- `sudo cp -a default nginx-vhost`
> `-a`: 複製檔案權限
4. 改nginx.vhost裡的**port**、**root**、**server_name**

> port 的第一行設定是 IPv4 ;第二行是 IPv6
5. 把 /etc/nginx/sites-available/nginx-vhost ==softlink== 到 /etc/nginx/site-enabled
- `sudo ln -s /etc/nginx/sites-available/nginx-vhost /etc/nginx/sites-enabled/`
6. 確認 softlink 有沒有成功
- `ls -l /etc/nginx/sites-enabled`

> softlink 到 enabled 裡的檔案是服務啟動時會用到的檔案
7. 確認是不是能正常運行,不會崩潰
- `sudo nginx -t`
8. 確認完狀態`sudo service nginx status`是 active 的話,重新讀取設定檔
- `sudo service nginx reload`
- `sudo service nginx reload` = `sudo service nginx stop` + `sudo service nginx start`
- 如果 reload 之後沒有改變 可以下 `sudo service nginx restart` 重新開機
9. 開啟瀏覽器,確認是否連線成功
- 如果 domain name 是數字開頭會導到搜尋,前面要加 `http://` 才能成功導向 127.0.0.1
- `http://<domain_name>:<port>`
## Reverse Proxy & Load Balance
:::info
Forward Proxy

- 代理 : client 會透過 proxy 向 server 發出request
因為以前頻寬很貴~,個人電腦都連到 proxy ,proxy 再統一發出request
- 同時,proxy 還可以有 **快取** 的功能:
:::
### Reverse proxy 反向代理
- 將 client提出的 request 發給不同的 server 處理

- 可以快取
- 有使用 Reverse proxy
- proxy $\to$ server
- 沒有使用 Reverse proxy
- 直接到 server
### Lab2 實作
1. 先停止服務
- `sudo service nginx stop`
2. 確認 nginx 服務狀態
- `sudo nginx -t`
3. 進到 `/etc/nginx/sites-available/` 裡的設定檔 nginx-vhost 新增一個 proxy_pass

4. 重啟服務
- `sudo service nginx start`
5. 開啟瀏覽器,確認是否連線成功
- 網址與 Lab1 實作相同
## Load Balance 負載平衡
- Reverse Proxy 的一個功能
- 負載平衡: 將流量合理分配,以提升各 server 的使用率及可用性
- 避免流量集中給同一個server而造成超載/過載/爆掉而使服務無法正常運行
- 避免 server 開著卻沒有用而造成浪費
### Lab3 實作
1. 在 `/etc/nginx/sites-available` 目錄下新增ㄧ個檔案
- `sudo vim nginx_loadbalance`
- 內容:
```=
upstream lsa.lab {
server lsa.kija.io;
server tw.search.yahoo.com.;
}
server {
listen 8070;
server_name nginx1.loadBalance.com;
location / {
proxy_pass http://lsa.lab;
}
}
```
> 註記:
> proxy_pass `http:// lsa.lab`的 `lsa.lab`要與上方 upstream 後面接的網址 `lsa.lab` 相同
2. softlink
- `sudo ln -s /etc/nginx/sites-available/nginx_loadbalance /etc/nginx/sites-enabled/`
3. 確認設定檔狀
> `sudo nginx -t`
4. 重啟服務
5. `sudo vim /etc/hosts` 新增host紀錄
> `nginx1.loadBalance.com:8070`
6. 開啟瀏覽器測試
>一直按重新整理,如果可以輪流跳轉至 `lsa.kija.io`、`tw.search.yahoo.com`
>兩個頁面就代表成功囉!
:::info
upstream
- 利用 Round Robin 的方式去分散流量
- 定義用的 IP
:::