Nginx在linux上部署靜態資源
概念介紹
Nginx可以作為靜態web服務器來部署靜態資源。這里所說的靜態資源是指在服務端真實存在,并且能夠直接展示的一些文件,比如常見的html頁面、css文件、js文件、圖片、視頻等資源。
相對于Tomcat,Nginx處理靜態資源的能力更加高效,所以在生產環境下,一般都會將靜態資源部署到Nginx中.
server {listen 80; #監聽端口 server_name localhost; #服務器名稱location / { #匹配客戶端請求urlroot html; #指定靜態資源根目錄 其中html是文件夾的名字index index.html; #指定默認首頁}
}
案例演示(我是用docker安裝的Nginx)
編寫一個DemoNginx.html文件,將這個文件部署到nginx中,然后通過nginx訪問html靜態資源。
docker inspect mynginx # 看看掛載的目錄在那里
編寫的html文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>DemoNginx</title>
</head>
<body>
<h1> nginx部署靜態資源</h1>
</body>
</html>
1、 nginx默認顯示的就是這個index.html 網頁文件
我們把自己寫好的文件上傳到這個目錄 (如果你的名字也叫index.html 直接替換完成就可以,如果不是還需要進行后面的步驟)
這個推薦個小工具(可以用命令快速上傳本機文件) rz 是一個在 Linux/Unix 系統中用于 接收文件 的命令,常用于終端工具(如
Xshell、SecureCRT、FinalShell、Mobaxterm 等)配合 zmodem
協議從本地上傳文件到服務器。你在通過終端連接到 Linux 服務器時,執行 rz,它會彈出一個文件選擇窗口(前提是你的終端工具支持
zmodem 協議),你選擇本地文件后,就會被上傳到當前目錄。
安裝教程
sudo yum install lrzsz -y # 安裝
rz # 彈出對話框讓你選擇文件, 默認會上傳到當目錄
- 更新配置文件
這段配置的意思是:當訪問Nginx服務器的根路徑 / 時,Nginx會查找并返回 /usr/share/nginx/html 目錄下的
DemoNginx.html 文件。如果該文件不存在,將返回一個 404 錯誤。
3、瀏覽器通過 ip訪問(80端口可以不寫)
部署一組靜態資源(在默認配置的情況下演示,不動配置文件)
1、我的文件有首頁index.html ,我想把nginx的index刪掉, 這樣就不需要配置 nginx.conf 文件了
這樣就直接OK了(配置文件都不用改)
Nginx反向代理入門(本機)
引入:
正向代理–代理的是用戶–服務器不知道用戶是誰
正向代理服務器是一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端。(科學上網就是這個原理)
反向代理----代理的是服務器端,用戶不知道是哪臺服務器提供的服務。
反向代理服務器位于用戶與目標服務器之間,但是對于用戶而言,反向代理服務器就相當于目標服務器,即用戶直接訪問反向代理服務器就可以獲得目標服務器的資源,反向代理服務器負責將請求轉發給目標服務器。用戶不需要知道目標服務器的地址,也無須在用戶端作任何設定,對于用戶來說,訪問反向代理服務器是完全無感知的。
入門使用nginx配置反向代理(為了方便在本機演示 MAC系統)
1、 修改配置文件 nginx.conf
server {listen 88;server_name localhost;location / {proxy_pass http://localhost:10100;} }
listen 88; 表示這個 server 區塊監聽 本機的 88 端口。所以你訪問http://localhost:88 的時候,就會進入這個服務。 server_name localhost;表示這個服務匹配的域名是 localhost。 在本地開發環境中一般是默認這樣寫的(正式部署時可以改成你自己的域名)
2、檢查配置文件,并重新加載
nginx -t # 檢查配置文件是否正確 nginx -s reload # 重新加載配置文件
3 、進行訪問測試
負載均衡
概念介紹
早期的網站流量和業務功能都比較簡單,單臺服務器就可以滿足基本需求,但是隨著互聯網的發展,業務流量越來越大并且業務邏輯也越來越復雜,單臺服務器的性能及單點故障問題就凸顯出來了,因此需要多臺服務器組成應用集群,進行性能的水平擴展以及避免單點故障出現。
**應用集群:**將同一應用部署到多臺機器上,組成應用集群,接收負載均衡器分發的請求,進行業務處理并返回響應數據
**負載均衡器:**將用戶請求根據對應的負載均衡算法分發到應用集群中的一臺服務器進行處理
此處的負載均衡器,我們將會使用Nginx來實現,而Nginx的負載均衡是基于反向代理的,只不過此時所代理的服務器不是一臺,而是多臺。
案例演示
1、啟動3個服務相同但是端口不同的服務
*🔗不會啟動相同的服務,端口不同見教程
里面提供一個接口
2、在nginx中配置負載均衡
打開nginx的配置文件nginx.conf并增加如下配置:
upstream targetsever{server localhost:10100;server localhost:10101;server localhost:10102;}server {listen 88;server_name localhost;location / {proxy_pass http://targetsever;}}
3、檢查配置文件,并重新加載
nginx.exe -t # 檢查配置文件是否正確
nginx.exe -s reload # 重新加載配置文件 s是signal的縮寫
4、測試時,我們直接訪問nginx的88端口此時nginx會根據負載均衡策略,將請求轉發到后面的服務器。
我在瀏覽器中訪問了六次nginx的88端口, 可以發現默認的策略是輪詢, 2次一輪
負載均衡算法
在nginx中提供了很多的負載均衡算法,常見的負載均衡算法如下所示:
名稱 | 說明 | 特點 |
---|---|---|
round robin | 輪詢方式 | 默認的負載均衡算法,按照請求的順序依次分配給后端服務器。 |
random | 隨機 | 隨機選擇一個后端服務器來處理請求 |
url_hash | 依據url分配方式 | 根據客戶端請求url的hash值,來分發請求, 同一個url請求, 會發轉發到同一個服務器上 |
ip_hash | 依據ip分配方式 | 根據客戶端請求的IP地址計算hash值, 根據hash值來分發請求, 同一個IP發起的請求, 會發轉發到同一個服務器上 |
weight | 權重方式 | 根據權重分發請求,權重大的分配到請求的概率大 |
least_conn | 依據最少連接方式 | 哪個服務器當前處理的連接少, 請求優先轉發到這臺服務器 |
場景對比
random算法
upstream targetserver {random;server ip:端口;server ip:端口;
}
url_hash算法
upstream targetserver {hash $request_uri;server ip:端口;server ip:端口;
}
ip_hash算法
upstream targetserver {ip_hash;server ip:端口;server ip:端口;
}
weight算法
upstream targetserver {server ip:端口 weight=5;server ip:端口 weight=1;
}
least_conn算法
upstream targetserver {least_conn;server ip:端口;server ip:端口;
}