# Week 11 (2024/11/21) Web Server [toc] - Book mode https://hackmd.io/@ncnu-opensource/book :::success 課堂中有問題可以放這,看到會回答 ::: ## Samba * 下載 : `sudo apt install samba` * 設定檔案 : `sudo vim /etc/samba/smb.conf` - 在虛擬機上,使用檔案總管選擇Other Locations輸入: - `smb://<SAMBA 伺服器的IP地址> /shared` smb://10.107.29.57/shared 帳號 lsa 密碼 同上 - 在Windows上,使用檔案總管輸入: - `\\<SAMBA 伺服器的 IP 地址>\shared` - 看IP: `ip a` # Web Server 先安裝lighttpd `sudo apt install lighttpd` - 查看現在的port - netstat - `sudo netstat -ntpul` :::warning 有沒有 sudo 的差別? ::: `-a`:顯示出目前所有的網路連線狀態 `-t`:顯示tcp連線 `-u`:顯示udp連線 `-p`:顯示此連線的PID `-l`:顯示LISTEN的內容 `-n`:host跟port都以數字顯示 >看有-n跟沒有-n的差異 :::info 操作Web Server的指令 ::: ## 開啟Web Server - `sudo service <service名稱> <操作方式>` service 名稱: `lighttpd`、`apache2`、`nginx` 操作方式: `start`:開啟服務 `stop`:停止服務 `restart`:重新啟用 ## lighttpd :::info - index-file.names就是紀錄有哪些預設的頁面可以顯示 小Lab - `sudo service lighttpd stop` - `sudo vim /etc/lighttpd/conf-available/99-unconfigured.conf` - 在index-file.names最前面加一個test.html - 到document-root的路徑(/var/www/html)底下新增test.html - `sudo vim /var/www/html/test.html` - > 打你想打的文字 之後把lighttpd重新開啟 - `sudo service lighttpd restart` ::: :::info 啟動Module設定檔的方法 - 方法一:使用lighty-enabled & lighty-disables 來啟用和停用modules 啟用:`sudo lighttpd-enable-mod <module 名稱>` 停用:`sudo lighttpd-disable-mod <module 名稱>` - 只需要名稱,不需要編號或是.conf - 方法二:手動-使用Softlink方式啟用設定檔 - `sudo ln -s <要被動的modules檔案> <-enabled位置>` - 要記得restart ::: ::: info 啟用Mod Userdir Lab - 在後面加上username可以到各自的家目錄 - 輸入 `vim /etc/lighttpd/conf-available/10-userdir.conf` 查看Userdir的設定檔 - `sudo lighttpd-enable-mod userdir` 使用者設定 - 建立資料夾:`mkdir ~/public_html` - 給權限 - `chmod 755 /home/<username>` <font color="#f00">這個很重要</font> - `chmod 755 ~/public_html` - 建立檔案:`vim ~/public_html/index.html` 去看看: `127.0.0.1:80/~<username>` ::: :::warning #### 把servcie port更改為8080 1.修改 Lighttpd 設定檔 `sudo vim /etc/lighttpd/lighttpd.conf` 2.找到 server.port,改為8080: `server.port = 8080` 3.建立index.html並顯示你要的東東 `sudo vim /var/www/html/index.html` >填你要的東西 4.重啟lighttpd `sudo service lighttpd restart` 5.看有沒有run在8080 port `sudo netstat -ntupl` 6.在瀏覽器輸入: `http://<伺服器的IP地址>:8080` ::: ## Apache 安裝: `sudo apt install apache2` ### Apache2實作 1. 安裝: `sudo apt install apache2` 2. 查看狀態: `sudo service apache2 status` 3. 看一下run 在哪個port: `sudo netstat -ntupl` 4. 在瀏覽器url輸入 http://127.0.0.1:80 - 看一下Apache2設定檔資料夾裡面有啥 :::warning 進入 Apache2 的配置目錄 - `cd /etc/apache2/` 使用 Vim 編輯器打開 Apache 的主要配置檔案 - `sudo vim apache2.conf` >一般不用改這個檔案來改 port,這是確認設定的步驟 - `ls` 列出 sites-available 資料夾中的檔案(存放虛擬主機設定檔) - `ls sites-available/` >這裡的檔案(例如 000-default.conf)定義了每個網站的對應資料夾、域名、或 port 設定。 修改 ports.conf - `sudo vim ports.conf` 嘗試更改port至8081,從預設的 80 改為 8081 - 找到80: >Listen 80 - 修改為8081: >Listen 8081 重開 - `sudo service apache2 restart` - `ls` 如果要把index.html改成其他東東 一樣先 `cd /var/www/html` 接著改 `sudo vim index.html` 實做  ::: ## Nginx 1. 安裝: `sudo apt install nginx` 2. 查看狀態: `sudo service nginx status` 3. 看一下run在哪個port: `sudo netstat -ntupl` 4. 在瀏覽器url輸入:  - nginx.conf: 主設定檔 - `cd /etc/nginx/` - `sudo vim nginx.conf` - - `ls ./sites-available/default` - `sudo service nginx restart` :::info Location 設定 lab 修改檔案 - `sudo service nginx stop ` - `sudo vim /etc/nginx/sites-available/default`新增一個location - >location /hi { try_files $uri $uri/ =401; } - 至 `/var/www/html`底下新增一個`hi`資料夾,並在裡面新增一個`index.html`  - >在index.html裡面打上 `<h1>HI! Is me!</h1>` 重啟服務 `sudo service nginx restart` 開網頁看 - 127.0.0.1:80 -> 預設網頁 - 127.0.0.1:80/hi ->剛剛創好的location網頁 在hi後面亂打  在根目錄底下亂打  ::: warning `sudo vim /etc/nginx/sites-available/default` 把Server底下的listen 80 改成 listen 8022並存檔 `:wq` `sudo service nginx restart` 重新啟動服務 - url 打`127.0.0.1:8022`  ::: ## Virutual Host 允許一台server提供多個網站或網頁應用程式,且每個網站可以有自己的domain name ### 基於ip的虛擬主機(IP-based Virtual Host) - 將不同domain依照請求給指定資料夾幾下的網址 - example1.com 和 example2.com 都運行在同一台伺服器 - example1.com -> www/aaa.com - example2.com -> www/bbb.com ### 基於port的虛擬主機(Port-based Virtual Host) - 將不同port依照請求給指定資料夾幾下的網址 - 127.0.0.1:8011 -> 分配給 www/aaa.com - 127.0.0.1:8012 -> 分配給 www/bbb.com :::info 1. 記得先`sudo service nginx stop` 記得先備份`sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default_backup` 最後一行註解拿掉並改成8022port `server那邊`  2. 新增example.com的資料夾 - `sudo mkdir /var/www/example.com` - `sudo vim /var/www/example.com/index.html` 3. 開啟nginx - `sudo service nginx start` 4. 到預設default server `telnet localhost 8022` 5. 輸入請求網頁方式 - 記得按兩下enter ### 回傳預設的網頁(Nginx的default網頁) ``` GET / HTTP/1.1 Host: asdf(亂打) ``` ### 到 example.com(顯示/var/www/example.com底下的index.html頁面) ``` GET / HTTP/1.1 Host: example.com ``` ::: ## Proxy 目的: - 可以隱藏client身分,保護client - 可以突破對網路的一些限制,連到一些原本被限制的網站 - 可以load balence、強化安全性(隱藏內部server)、SSL加密 阿巴阿巴太長了打不下去 ::: info ### Reverse Proxy LAB 暫停nginx - `sudo service nginx stop` Nginx 虛擬主機配置 - `sudo vim /etc/nginx/sites-available/nginx-proxy` ``` server { listen 80; server_name nginxproxy; location /proxygoogle/ { proxy_pass https://google.com/; } location /proxyapache2/ { proxy_pass http://127.0.0.1:8081/; } location / { proxy_pass http://127.0.0.1:8080/; #lighttpd } } ``` 手動啟用 - `sudo ln -s /etc/nginx/sites-available/nginx-proxy /etc/nginx/sites-enabled/` 新增主機紀錄 ``` sudo vim /etc/hosts ``` 新增 `127.0.0.1 nginxproxy` 在文件裡 `nginxproxy`是你自定義的主機名稱 重啟 Nginx - `sudo service nginx restart` 訪問目標 URL(代理Apache) - `http://nginxproxy/proxyapache2/` 訪問目標 URL(代理Google) - `http://nginxproxy/proxygoogle/` 直接訪問 nginxproxy 的根目錄 - `http://nginxproxy/`  ::: ### nginx 模擬 load balance Lab 將服務分流到localhost:8080(lighttpd) 跟 yahoo.com (到 `http://lbnginx:8070` 一直重新整理頁面的話會看到 yahoo 跟 lighttpd 輪流切換) - `sudo service nginx stop ` - 至 `/etc/nginx/sites-available/`設定相關檔案 - `sudo vim /etc/nginx/sites-available/nginx-lb` 在裡面輸入 ```# 定義負載均衡的後端服務池 upstream backend_servers { server 127.0.0.1:8080; # Lighttpd server yahoo.com:80; # Yahoo } # Nginx 作為負載均衡器,監聽 8070 端口 server { listen 8070; # 定義 Nginx 的監聽端口 server_name lbnginx; # 定義伺服器名稱 # 根據負載均衡策略將請求轉發到後端 location / { proxy_pass http://backend_servers; # 將請求代理到 backend_servers 定義的服務池 proxy_set_header Host $host; # 保留原始請求的 Host 標頭 proxy_set_header X-Real-IP $remote_addr; # 傳遞客戶端的實際 IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` soft link 到 `nginx/sites-enabled/` sudo ln -s /etc/nginx/sites-available/nginx-lb /etc/nginx/sites-enabled/ 之後再到 /etc/hosts 裡面新增一個 host `sudo vim /etc/hosts` `127.0.0.1 lbnginx` - 確認設定檔沒有問題 - `sudo nginx -t` - 沒問題就 restart - `sudo service nginx restart`
×
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