###### tags: `lsa` # 113 LSA 期中考題_上機 :::info ## 規則 ![](https://i.imgur.com/hJueRO7.png) - 如有問題請舉手發問。 - 請勿編輯本頁面。 - 請勿以私訊或聊天室等任何方式彼此溝通。 - 當然也請不要直接實體溝通啦... 那算作弊哦 - **通訊軟體請關閉** - 可以上網自由地找資料、補充這學期相對應的共筆頁面。 - 可使用 ChatGPT ,但不可直接照抄,請吸收內容之後,在腦中整理過、在機器上驗證過後,以自己重新整理過的方式回答。如助教判定沒有吸收過就回答,該題 0 分。(其實很容易分辨,也有工具能檢測) - 上機需要 DEMO,DEMO 時若助教發現答案錯誤,學生可以有一次修正機會。 - 筆試部分,Google 表單繳交前,請舉手找助教,在助教面前繳交。 - 請用**學校信箱**回答問卷 :::danger **沒在助教面前繳交者,視同沒交** ::: - 提早完成可以提早離開。 - 如果時間到還沒完成,老師與助教會視情況決定是否開放延長作答時間。 - 如果考試中監考者(老師及助教)視個別情形有額外給提示,那是額外的,不是義務也不是權益。如果有同學真的只是打錯字或只差臨門一腳,是否提示的決定權在監考者身上。 ::: :::warning 本次考試作答環境以 Ubuntu 22.04 為主 ::: **We Are Watching You.** ## 乙、上機 ### 一、 Web Server (32%) #### proxy (10%) - ![image](https://hackmd.io/_uploads/rJTIfe87kg.png) 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%) - ![image](https://hackmd.io/_uploads/HySVOMzmkg.png) 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%)