Nginx 安裝並配置反向代理、負載均衡
Nginx 安裝並配置反向代理、負載均衡
Nginx 是一個高效能的 HTTP 和反向代理 web 伺服器,同時也提供了 IMAP/POP3/SMTP 服務 。
1、檢視可用版本
訪問 Nginx 映象庫地址: https://hub.docker.com/_/nginx?tab=tags。
此外,我們還可以用 sudo docker search nginx 命令來檢視可用版本。
2、拉取最新的版本
命令如下:
$ sudo docker pull nginx:latest
檢視安裝是否成功:
$ sudo docker images
3、執行
安裝完成後,我們可以使用以下命令來執行 nginx 容器:
$ sudo docker run --name nginx-test -p 8080:80 -d nginx
- --name nginx-test:容器名稱。
- -p 8080:80: 埠進行對映,將本地 8080 埠對映到容器內部的 80 埠。
- -d nginx: 設定容器在在後臺一直執行。
執行以下命令檢視 nginx 容器是否在執行:
# 列出所有在執行的容器資訊
$ sudo docker ps
通過瀏覽器訪問8080埠的 nginx 服務:
最後想停止 nginx服務,那麼可以停止容器或殺掉容器,執行命令如下:
# 停止容器 $ sudo docker stop nginx-test 或 # 殺掉容器 $ sudo docker kill nginx-test
4、修改 Nginx 的配置檔案
首先切換成 root 使用者登入, 在本機建立nginx的一些檔案儲存目錄
$ mkdir -p ./nginx/www ./nginx/logs ./nginx/conf
- www: nginx儲存網站網頁的目錄
- logs: nginx日誌目錄
- conf: nginx配置檔案目錄
檢視nginx-test 容器 id
$ docker ps -a
接著將 nginx-test 容器配置檔案 copy 到本地
# 進入 nginx容器,可檢視配置檔案 $ docker exec -it 469d86949fd1 /bin/bash $ docker cp 469d86949fd1:/etc/nginx/nginx.conf /root/nginx/conf
建立新 nginx 容器 nginx-web,並將 www,logs,conf 目錄對映到本地
$ docker run -d -p 80:80 --name nginx-web -v /root/nginx/www:/usr/share/nginx/html -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/logs:/var/log/nginx nginx
啟動 nginx-web:
$ docker start nginx-web
在 /root/nginx/www 目錄下建立 index.html 內容為:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>docker</title>
<body>
<h1>666666</h1>
</body>
</head>
</html>
重新訪問主機:
5、設定反向代理
進入到/root/conf/nginx.conf 末尾新增以下配置:
server{
listen 80;
charset utf-8;
server_name 192.168.44.130;
location / {
proxy_pass http://192.168.44.130:8080;
proxy_redirect default;
}
}
這樣 192.168.44.130:8080 便代理了 http://192.168.44.130:8080, 而 http://192.168.44.130:8080 是預設訪問 tomcat 的地址,如下:
這樣就可以用本機80埠訪問本機8080埠了。
瀏覽器訪問80埠:
成功代理8080埠,代理設定成功。
6、負載均衡
客戶端傳送的請求先經過 Nginx ,然後通過 Nginx 將請求根據相應的規則分發到相應的伺服器。
主要配置指令為上一講的 pass_proxy 指令以及 upstream 指令。負載均衡主要通過專門的硬體裝置或者軟體演算法實現。通過硬體裝置實現的負載均衡效果好、效率高、效能穩定,但是成本較高。而通過軟體實現的負載均衡主要依賴於均衡演算法的選擇和程式的健壯性。均衡演算法又主要分為兩大類:
- 靜態負載均衡演算法:主要包括輪詢演算法、基於比率的加權輪詢演算法或者基於優先順序的加權輪詢演算法。
- 動態負載均衡演算法:主要包括基於任務量的最少連線優化演算法、基於效能的最快響應優先演算法、預測演算法及動態效能分配演算法等。
- 靜態負載均衡演算法在一般網路環境下也能表現的比較好,動態負載均衡演算法更加適用於複雜的網路環境。
6.1、普通輪詢演算法
這裡以 Nginx的預設演算法即輪詢演算法為例,演示下 Nginx 的負載均衡。
例如有兩臺 tomcat 伺服器,埠號分別為8081和8082,Nginx 第一次將請求分發給 8081伺服器,第二次則將請求分發給8082伺服器,往返迴圈。
為了區分訪問的 tomcat 伺服器,修改修改 tomcat 首頁,首頁路徑為:webapps/ROOT/index.jsp
記住兩個 Tomcat 的檔案需要先將主機目錄掛載到容器,修改才能生效。接著 Docker 執行 8081和8082的兩個 tomcat,並在
nginx.conf 配置檔案新增以下配置:
upstream tomcat-server {
server 192.168.44.130:8081;
server 192.168.44.130:8082;
}
server {
listen 80;
server_name 192.168.44.130;
location / {
proxy_pass http://OrdinaryPolling;
proxy_pass default;
}
}
上面的 ip 地址記得更改為自己的 ip。
接著啟動 nginx,
瀏覽器第一次訪問:
瀏覽器第二次訪問:
說明 nginx 已經成功將請求分發給兩個 tomcat 了,負載均衡配置成功。其他演算法這裡就不進行演示了。
參考資料:
https://www.runoob.com/docker/docker-install-nginx.html
https://blog.csdn.net/weixin_40461281/article/details/92586378