Nginx的动态代理,负载均衡,动静分离的简单使用
nginx
一 Nginx介紹
1.1 為什么要學習Nginx
問題1: 客戶端到底要將請求發送那臺服務器
問題2:所有客戶端的請求都發送給了服務器1
問題3:客戶端發送的請求可能是申請靜態資源的,也有可能是訪問動態資源的
1.2 Nginx介紹
特點:
1.穩定性極強,7*24小時不間斷運行
2.Nginx提供了非常的配置實例
3.占用內存小,并發能力強
二 Nginx安裝
2.1 安裝
version: '3.1' services: nginx:restart: alwaysimage: nginx:1.19.2container_name: study_nginxports:- 80:802.2 Nginx配置文件
nginx.conf
user nginx; worker_processes 1;error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;# 以上統稱全局塊 # worker_processes 它的數值越大,Nginx的并發能力越強 # error_log 代表Nginx的日志文件存放位置events {worker_connections 1024; }# events塊 # worker_connections 默認1024 數字越大,Nginx的并發能力越強http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf; }# http塊 # 上面的include 代表引入一個外部文件 ->mime.types中存放了大量的媒體類型 # 下面的include /etc/nginx/conf.d/*.conf; 引入了conf.d目錄下的以.conf的配置文件Server塊
server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;} # location 塊 # root 將接收到的請求根據/usr/share/nginx/html去查找靜態資源 # index 默認去上述的路徑中找到index.html或者index.htmerror_page 500 502 503 504 /50x.html;location = /50x.html {root html;}} # server塊 # listen 代表Nginx的監聽端口號 # localhost 代表Nginx接收請求的ip #三 Nginx的反向代理
3.1 什么是正向代理:
1.正向代理服務時由客戶端設立的
2客戶端了解代理服務器和目標服務器都是誰
3.幫助實現突破訪問權限,提高訪問的速度,對目標服務器隱藏客戶端的ip地址
3.2 什么是反向代理
1.反向代理服務器是配置在服務端的
2.客戶端是不知道到底訪問的那一臺服務器
3.達到負載均衡,并且可以真正的隱藏ip地址
3.3 基于Nginx實現反向代理
1.準備一個目標服務器
啟動一個tomcat服務器8080端口,在ROOT目錄下放一個index.html頁面
2.編寫nginx配置文件通過nginx訪問tomcat容器,實現反向代理
修改conf.d目錄下的default.conf文件
server{listen 80;server_name localhost;#基于反向代理訪問到nacoslocation = /index {proxy_pass http://47.112.174.148:8848/nacos;}# 基于反向代理訪問百度location ^~ /test/ {proxy_pass http://47.112.174.148:8081;}#基于反向代理訪問到tomcat服務器location / {proxy_pass http://47.112.174.148:8080;} }然后訪問nginx的80端口,如果頁面展示的是tomcat的index.html頁面,說明nginx反向代理成功
3.3.1 關于nginx的location路徑映射
優先級關系:
(location = ) > (location /xxx/yyy/zzz) > (location ^~) > (location ~ , ~*) > (location/起始路徑) > (location /)
# 1. = 匹配 location = / {# 精準匹配,主機名后面不能攜帶任何字符串 }# 2. 通用匹配 location /xxx {# 匹配所有以/xxx開頭的路徑 }# 3. 正則匹配 location ~ /xxx {# 匹配所有以/xxx開頭的路徑,與2的效果一樣 但是比2中優先級高些 }# 4. 匹配開頭路徑 location ^~/images/ {# 匹配所有以/images開頭的路徑 }# 5 匹配文件路徑 ~*\.(gif|jpg|png){# 匹配以gif或者jpg或者png為結尾的路徑 }四 Nginx的負載均衡
Nginx為我們提供了三種負載均衡的策略
輪詢:
將客戶端發起的請求,平均分配給每個服務器,輪著處理請求
權重:
會將客戶端的請求,根據服務器的權重值不同,分配不同的請求數量給權重不同的服務器
ip_hash
基于發起請求的客戶端IP地址不同,他會始終將請求發送到指定的服務器上.
4.1 輪詢
修改conf.d目錄下的default.conf文件
# 在server塊外面聲明upsteam fs-server是我自己取得名字 自定義名稱不要加下劃線_ # server 指定服務地址,端口 upsteam fs-server {server 47.112.174.148:8080;server 47.112.174.148:8081;..... }server{listen 80;server_name localhost;#基于反向代理到我們上面upsteam指定的服務名字,默認使用輪詢location / {proxy_pass http://upsteam的名字/;} }4.2 權重
修改conf.d目錄下的default.conf文件
# 在server塊外面聲明upsteam fs-server是我自己取得名字 自定義名稱不要加下劃線_ # server 指定服務地址,端口 # weight=值越大權重約定,被訪問的幾率大些 upsteam fs-server {server ip:port weight=10;server ip:port weight=2;..... }server{listen 80;server_name localhost;#基于反向代理到我們上面upsteam指定的服務名字,默認使用輪詢location / {proxy_pass http://upsteam的名字/;} }4.3 ip_hash
修改conf.d目錄下的default.conf文件
# 在server塊外面聲明upsteam fs-server是我自己取得名字 自定義名稱不要加下劃線_ # server 指定服務地址,端口 # ip_hash 表示負載均衡使用ip_hash 當某個ip訪問nginx的時候,后續始終將請求發送到指定的服務器上. upsteam fs-server {ip_hash;server ip:port;server ip:port;..... }server{listen 80;server_name localhost;#基于反向代理到我們上面upsteam指定的服務名字,默認使用輪詢location / {proxy_pass http://upsteam的名字/;} }五 Nginx的動靜分離
Nginx的并發能力公式:
Nginx的配置文件中worker_processes和events塊的worker_connections相乘除以4或者2,最終的結果就是nginx的并發能力
worker_processes*worker_connections/4|2=Nginx最終的并發能力
動態資源需要/4,靜態資源/2
Nginx通過動靜分離,來提升Nginx的并發能力,更快的給用戶響應
5.1 動態資源代理
# 配置如下 location / {proxy_pass ip; }5.2 靜態資源代理
# 配置如下 location / {root 靜態資源路徑;index 默認訪問路徑下的資源;autoindex on: # 代表展示靜態資源全部的內容,以列表的形式展開. }測試案例,先修添加一個index.html和1.jpg靜態資源
六 Nginx集群
單點故障,導致整個程序的崩潰,提升高可用
總結
以上是生活随笔為你收集整理的Nginx的动态代理,负载均衡,动静分离的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式事务解决方案之 Alibaba S
- 下一篇: Nginx —— 检查配置文件ngi