###### tags: `lsa`
# 113 LSA 期中考題_上機
:::info
## 規則

- 如有問題請舉手發問。
- 請勿編輯本頁面。
- 請勿以私訊或聊天室等任何方式彼此溝通。
- 當然也請不要直接實體溝通啦... 那算作弊哦
- **通訊軟體請關閉**
- 可以上網自由地找資料、補充這學期相對應的共筆頁面。
- 可使用 ChatGPT ,但不可直接照抄,請吸收內容之後,在腦中整理過、在機器上驗證過後,以自己重新整理過的方式回答。如助教判定沒有吸收過就回答,該題 0 分。(其實很容易分辨,也有工具能檢測)
- 上機需要 DEMO,DEMO 時若助教發現答案錯誤,學生可以有一次修正機會。
- 筆試部分,Google 表單繳交前,請舉手找助教,在助教面前繳交。
- 請用**學校信箱**回答問卷
:::danger
**沒在助教面前繳交者,視同沒交**
:::
- 提早完成可以提早離開。
- 如果時間到還沒完成,老師與助教會視情況決定是否開放延長作答時間。
- 如果考試中監考者(老師及助教)視個別情形有額外給提示,那是額外的,不是義務也不是權益。如果有同學真的只是打錯字或只差臨門一腳,是否提示的決定權在監考者身上。
:::
:::warning
本次考試作答環境以 Ubuntu 22.04 為主
:::
**We Are Watching You.**
## 乙、上機
### 一、 Web Server (32%)
#### proxy (10%)
- 
1. Apache2 (3%) 網頁內容(1%)
- 在 8080 port 建立一個 web 服務,並回傳 `/var/www/apache2/student.html`,其內容為以下:
```html=
<html>
<head>
<h1>
學生姓名:{你的名字}
學生學號:{你的學號}
</h1>
</head>
</html>
```
2. Lighttpd (3%) 網頁內容(2%)
- 在 8081 port 建立一個 web 服務,並回傳 `/var/www/lighttpd/bt.html`,其內容為以下:
```html=
<html>
<head>
<h1>
BlueT 中文姓名:{請填入}
BlueT 英文姓名:{請填入}
</h1>
</head>
</html>
```
3. Nginx : 使用 nginx 設定以下 domain name 使他們連到對應的網頁 (4%)網頁內容(2%)
1. (1%) 存取 s<學號>.apache2.lsa:80,需 proxy 到 8080 port,並回傳學生資訊
2. (1%) 存取 s<學號>.lighttpd.lsa:80,需 proxy 到 8081 port,並回傳 BlueT 的資訊
3. (2%) 存取 s<學號>.nginx.lsa:80,需回傳 `/var/www/nginx/course.html`,其內容為以下
```html=
<html>
<head>
<h1>
這堂課的中文名字:{請填入}
這堂課的英文名字:{請填入}
</h1>
</head>
</html>
```
#### load balance (3%)
- 
1. 存取 s<學號>.lb.lsa:80,需以 round robin 的方式 proxy 到 8080 和 8081 port,並回傳對應的頁面
#### try_files (5%)
- 在預設的情境下,當我們存取到一個 nginx 無法找到對應檔案的路徑,nginx 會回傳一個 404 not found 的頁面,如下:
```
$ curl localhost/not_existed
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.18.0 (Ubuntu)</center>
</body>
</html>
```
- 請建立一個 `error.html` 內容為以下:
```html=
<html>
<head>
<h1>Something, everything is wrong</h1>
</head>
</html>
```
- 並將回傳的內容從上述的 404 not found 改為此 `error.html`
#### header 情境題 (6%)
1. (3%) 在預設的情況下,使用者可以如何藉由 response 封包的"某一欄位"得知目前存取的網頁是藉由哪一種 web server (e.g. nginx, apache2)回傳的 ?
2. (加分題 (3%))承上題,在 nginx 當中如何將 response 封包的該個"某一欄位"的內容更改為 `lsa`,而不是 web server 的資訊 ?
#### 設定檔檢查 (3%)
- 在生產環境,我們不希望因為有部分設定檔的問題影響到運作中的 web server,所以在啟用 新增/更改 的設定檔前會檢查並確保設定檔的基本語法沒有問題。請問在 nginx 要如何達成 ?
### 二、SSH (20%)
#### SSH (5%)
1. 產生一對金鑰
2. 把正確的金鑰放到以下伺服器,並用金鑰連進去
3. 找助教 demo 時,給助教看連進去的過程
:::info
IP: 44.211.137.141
username: lsa
password: wow!LSA!
:::
:::warning
**加分題 - 輕薄的假象**(4%)
在此伺服器中 lsa 的家目錄有個 test 資料夾,裡面有個 `blueT.mp3`,但是此檔案怪怪的,該如何確認它究竟是什麼東西。
如果前面的題目做不出來,可以從這邊下載:<a href="http://44.211.137.141:8083/download/blueT.mp3" download="blueT.mp3" target="_blank">blueT.mp3 </a>
> 請用另存新檔的方式下載
:::
#### SSH Tunnel (15%)
:::info
若需要在命令列(command line)上查看某網頁內容,可使用 **curl** 這個工具,方法:
`sudo apt update`
`sudo apt install curl`
`curl 你要的任何網站網址(要有 http:// 或 https:// )`
:::
- 把 SSH server 上的 port 8080 變成自己 localhost:12345。(當瀏覽器連到 http://localhost:12345 時,實際上顯示的是那台 SSH server 回傳的內容。) (5%)
- 把跟 SSH server 同個內網裡的 172.31.87.217:8080 變成自己 localhost:12346 (5%)
- 把自己 localhost:8080 變成 SSH server 上的 port <學號後 5 碼> (5%)