# Week 05 DNS、Web Server # DNS ## 全名:Domain name system * 網路上的通訊錄,幫忙找IP位址 DNS 的層級結構從右邊往左邊逐層檢查 nsloolup-DNS查詢指令,可以找出網域的IP位址和DNS的記錄類型(像是MX、TXT等) * 將人類可讀的網域名稱(例如 www.google.com)轉換為機器可讀的IP位址(因為IP 是一串數字,不好記憶,因此需要有 Domain name) * 世界上有 13 台 root DNS IP ,如果有必要重新查找IP,會由這 13 個root去開始查找 ### DNS紀錄 * A記錄 : Domain name指定到某個IPv4 * AAAA紀錄: Domain name指定到某個IPv6 * MX紀錄:Domain name指定到某個郵件伺服器 * DNSSEC-DNC使用UDP,沒有三向交握,任何人都可以偽造IP。所以要核對上級機關的簽章(信任鏈),可以一路追到最上層Root,確定這份資料是真的。 * DNS啟動容易關閉麻煩 > @bs10081 加油,要勤快一點寫共筆 :+1: # Web Server * 電腦網路世界中能接收請求並回應資料的實體,都可以稱為伺服器。 :::info 例子:打開瀏覽器輸入 https://www.instagram.com/ ig 的主機就是 server 我們的電腦就是 client ::: * Web Server * 提供網頁服務的伺服器 * 預設port 80 * 接收/處理http request,回傳response * HTPPS是HTTP加上 TLS 加密後的安全版本 * 使用 TCP 傳輸 #### 小 lab - 使用 telnet 工具連線 moli 的 server ``` telnet moli.lsa.tw 80 ``` - 此時會與 moli 的 server 建立 tcp 連線 - 接著輸入: ``` GET / HTTP/1.0 HOST: moli.lsa.tw ``` - 按兩次 `ENTER` - HTTP 1.1 的版本不會馬上中斷連線 ``` GET / HTTP/1.1 HOST: moli.lsa.tw ``` * port 用於區分同一個 IP 地址下的不同服務。 * 例如 FTP(檔案傳輸協定) 用 20/21、SSH(安全遠端登入) 用 22、Telnet 用 23、DNS(網域名稱系統) 用 53、HTTP 用 80、HTTPS 用 443。 * port 號以 16 個 bits 做表示 * 範圍:0 ~ 65535 * 0: 保留 port (通常不啟用) * 1 ~ 1023: root 才能使用 * 1024 ~ 49151: 公司或組織可向 IANA 申請註冊 * 49152 ~ 65535:未向 IANA 註冊,可由本地或應用程式動態使用 #### 小 lab - 查看系統預設 port 個別對應哪些服務 ``` cat /etc/services ``` ### 網頁伺服器 * apache * 特性:一個請求、一個process * 歷史悠久,模組豐富 * 記憶體使用較多時處理能力有限 * 多用於維護舊系統 * Lighttpd(讀做lighty) * 特性:輕量化架構 * 靜態檔案處理效率高、強於 Apache * 多用於資源受限的環境 * Nginx * 事件驅動架構:事件循環處理多個連線 * 非同步非阻塞:能同時處理大量請求 * 模組化設計 * 適用於 高流量網站/反向代理與負載均衡/靜態檔案server/api gateway ### Nginx 主要功能 * 網頁伺服器:回應瀏覽器的網頁請求。 * 反向代理:代替後端伺服器接收請求,分配給多台伺服器。 * 負載均衡:將流量平衡分配到多台伺服器,減少壓力。 * HTTP 快取:暫存靜態資源,加快回應速度。 #### 小 lab ``` # 更新套件 sudo apt update # 安裝 nginx sudo apt install nginx # check 服務狀態 sudo systemctl status nginx ``` * `sudo service <服務名稱> <操作>` * `sudo systemctl <操作> <服務名稱>` (推薦使用) ``` # 開啟 nginx 服務 sudo systemctl start nginx # 停止 nginx 服務 sudo systemctl stop nginx # 不停止 nginx 服務,重載設定檔 sudo systemctl reload nginx # 會中斷現有的 nginx 服務,並重新啟動 sudo systemctl restart nginx # 檢查服務是否失敗 sudo systemctl is-failed nginx # 如果可以就 reload,否則 restart sudo systemctl reload-or-restart nginx # 啟用服務(開機自動啟動) sudo systemctl enable nginx # 停用服務(開機不自動啟動) sudo systemctl disable nginx ``` - 我們要看的 - `nginx.conf`:主設定檔 - `worker_processes auto` 自動根據 CPU 核心數調整 process 數量 - `sites-available`:所有可用的 web server 設定檔,不會生效 - `listen 80 default_server;` 監聽請求(IPv4) - `listen [::]:80 default_server;` 監聽請求(IPv6) - `root /var/www/html;` 設定網站根目錄 - `index index.html;` 設定預設首頁檔案名稱 - `server_name _;` 根據 domain name 選擇正確 server 區塊 (`_`: 預設伺服器) - `location <路徑> { ... }` 對特定路徑的操作 - (正規表達式) . -> 代表"全部"; \. -> 代表"." - `sites-enable`:用軟連結 ### 虛擬主機 Virtual Host 1. 基於域名的虛擬主機 Name-Based * 用不同 domain name 區分網站 * 優: 節省 IP 位址,最常用 2. 基於 IP 的虛擬主機 IP-Based * 用不同 IP address 區分網站 * 優: 完全獨立的 IP 3. 基於 Port 的虛擬主機 Port-Based * 用不同 port 區分網站 * 優: 節省成本,適合內部測試開發
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up