Nginx(反向代理+多端口访问+负载均衡+动静分离+Nginx常用命令+集群主备)

在这里插入图片描述
在这里插入图片描述
如果Linux系统中没有安装wget,需要先行安装
在这里插入图片描述
安装后的目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

====================================================================

静态服务器

在这里插入图片描述
在这里插入图片描述
通过浏览器进行访问
在这里插入图片描述
在这里插入图片描述

案例二:
1、 在/usr/local/var/www下分别创建images和img目录,分别在每个目录下放一张test.jpg;
2、配置文件中

http {
 server {
  listen       80;
  server_name  localhost;
  
  
  set $doc_root /usr/local/var/www; # 设置自定义变量
  
  # 默认location
  location / {
      root   /usr/local/var/www/html;
      index  index.html index.htm;
  }
  
  location ^~ /images/ {           # ^~ 前缀匹配,如果匹配成功则不再
            root $doc_root;
       }
        
       location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {      #  ~* 表示执行一个正则匹配,不区分大小写
           root $doc_root/img;
       }
 }
}

在这里插入图片描述

location优先级

当一个路径匹配多个location时究竟哪个location能匹配到时有优先级顺序的,而优先级的顺序于location值的表达式类型有关,和在配置文件中的先后顺序无关。相同类型的表达式,字符串长的会优先匹配。
在这里插入图片描述

location = / {
 # 精确匹配/,主机名后面不能带任何字符串 /
 [ configuration A ]
}
location / {
 # 匹配所有以 / 开头的请求。
 # 但是如果有更长的同类型的表达式,则选择更长的表达式。
 # 如果有正则表达式可以匹配,则优先匹配正则表达式。
 [ configuration B ]
}
location /documents/ {
 # 匹配所有以 /documents/ 开头的请求,匹配符合以后,还要继续往下搜索。
 # 但是如果有更长的同类型的表达式,则选择更长的表达式。
 # 如果有正则表达式可以匹配,则优先匹配正则表达式。
 [ configuration C ]
}
location ^~ /images/ {
 # 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找,停止搜索。
 # 所以,即便有符合的正则表达式location,也不会被使用
 [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
 # 匹配所有以 gif jpg jpeg结尾的请求。
 # 但是 以 /images/开头的请求,将使用 Configuration D,D具有更高的优先级
 [ configuration E ]
}

location /images/ {
 # 字符匹配到 /images/,还会继续往下搜索
 [ configuration F ]
}
location = /test.htm {
    root   /usr/local/var/www/htm;
    index  index.htm;
}
# 注意:location的优先级与location配置的位置无关

多端口访问

在这里插入图片描述

①、nginx.conf进行配置

server{
	listen 9001;
	server_name localhost;

	location ~ /hosp/{
		proxy_pass http://localhost:8201
	}

	location ~ /cmn/{
		proxy_pass http://localhost:8202
	}
}

执行nginx.exe启动window版本的nginx

②、前端config目录下打的dev.env.js文件中
在这里插入图片描述
分别进行访问
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

负载均衡

负载均衡
增加服务器的数量,将请求分发到各个服务器上面。
客户端(15个请求)—>反向代理服务器—>服务器(3台)
在这里插入图片描述

Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略
在这里插入图片描述
在这里插入图片描述

upstream web_servers {  
   server localhost:8081;  
   server localhost:8082;  
}

server {
    listen       80;
    server_name  localhost;
   access_log  logs/host.access.log  main;
    location / {
        proxy_pass http://web_servers;
        必须指定Header Host
        proxy_set_header Host $host:$server_port;
    }
 }

在这里插入图片描述
默认是轮询方式,可以更改为权重方式
服务器性能差点就少接收点请求,服务器性能好点就多处理点请求
在这里插入图片描述

请求只有一次被分配到8081上,其他3次分配到8082上。backup是指热备,只有当8081和8082都宕机的情况下才走8083

upstream test {
    server localhost:8081 weight=1;
    server localhost:8082 weight=3;
    server localhost:8083 weight=4 backup;
}

ip_hash

上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了.

比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream test {
    ip_hash;
    server localhost:8080;
    server localhost:8081;
}

fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。这个配置是为了更快的给用户响应

upstream backend {
    fair;
    server localhost:8080;
    server localhost:8081;
}

url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

upstream backend {
    hash $request_uri;
    hash_method crc32;
    server localhost:8080;
    server localhost:8081;
}

反向代理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

正向代理:
客户端(需要配置代理服务器)—>局域网—>Internet
客户若访问局域网外部的Internet,需要通过局域网的代理服务器进行

在这里插入图片描述

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。
反向代理通过proxy_pass指令来实现

客户端--->反向代理服务器---->目标服务器
客户端不需要任何配置,只需要将请求发送给反向代理服务器
对外暴露的是代理服务器,而隐藏真实的目标服务器

在这里插入图片描述

当我们访问localhost的时候,就相当于访问 localhost:8081了

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://localhost:8081;
        proxy_set_header Host $host:$server_port;
        设置用户ip地址
   proxy_set_header X-Forwarded-For $remote_addr;
   当请求服务器出错去寻找其他服务器
   proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; 
    }
    
}   
  • 为了加快网站速度,将动态页面和静态页面分开放到不同的服务器
    在这里插入图片描述
upstream web_servers {  
       server localhost:8081;  
       server localhost:8082;  
}

server {
    listen       80;
    server_name  localhost;

    set $doc_root /usr/local/var/www;

    location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
       root $doc_root/img;
    }

    location / {
        proxy_pass http://web_servers;
        必须指定Header Host
        proxy_set_header Host $host:$server_port;
    }

    error_page 500 502 503 504  /50x.html;  
    location = /50x.html {  
        root $doc_root;
    }
    
 }

==============================================

nginx常用的命令:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

必须进入nginx目录中使用命令 /usr/local/nginx/sbin

在这里插入图片描述
nginx配置文件:
在这里插入图片描述
主要有三部分构成:全局块+event块+http块
全局块:配置运行nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等
event块:nginx服务器与用户网络的连接
http块:配置最频繁的部分,代理、缓存、日志等第三方模块绑定

docker容器中的配置文件中位置:etc/nginx/
在这里插入图片描述

==================

配置nginx反向代理
浏览器www.123.com —> 跳转linux系统的tomcat主页
对于windows浏览器需要通过本地的host文件找到 配置域名映射的ip,若没有则通过网络上的DNS进行匹配
在这里插入图片描述

在这里插入图片描述

docker run --name my_tomcat -it -d -p 8080:8080 tomcat   启动tomcat
docker run -p 80:80 -d nginx		启动nginx
docker exec -it 469bfd0dc27a /bin/bash   进入容器内部

第一步:C:\Windows\System32\drivers\etc 找到host文件
如下配置后,可以直接通过域名www.123.com访问到指定的页面
在这里插入图片描述
在这里插入图片描述
第二步:在nginx进行反向代理配置
进入容器内部修改配置文件如下(系统下必须安装:apt install vim):docker exec -it c1ea5ab43c78 /bin/bash
修改etc/nginx目录下的nginx.conf
若出现 command not found
则使用以下命令:

apt-get update
apt-get install -y vim

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
nginx -t 查看是否修改成功
在这里插入图片描述

然后重新运行容器:
docker stop c1ea5ab43c78
docker restart c1ea5ab43c78

docker rm -f 1e560fca3906 删除容器


根据客户端的不同请求路径,通过nginx进行判断,从而跳转到不同的服务器
在这里插入图片描述

  1. 准备两个tomcat服务器,端口分别为8080,8081
    通过tomcat根目录下的conf中server.xml修改端口
    在这里插入图片描述

  2. 在tomcat中的webapps目录下创建一个文件夹edu,并放入a.html
    在另一个webapps以同样的方式创建vod,并放入a.html
    通过浏览器进行访问http://ip:端口号/edu/a.html或者http://ip:端口号/vod/a.html

  3. 在nginx配置文件中,进行反向代理
    在这里插入图片描述

  4. 开放防火墙端口号,并重新启动nginx
    在这里插入图片描述

关于nginx配置文件中location中的注意事项:
在这里插入图片描述

====================================

配置负载均衡
在这里插入图片描述
在nginx的配置文件中实现负载均衡的配置
效果是:每次请求都会跳转到不同的服务器
在这里插入图片描述

对于负载均衡的分配方式,有以下集中策略:

  1. 轮询,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,自动剔除
  2. weight,权重默认1,权重越高被分配的客户端越多
    在这里插入图片描述
  3. ip_hash 方式
    每个请求按访问的ip的hash结果分配,每个访客固定访问一个后端服务器,可以解决session的问题。第一次访问的服务器就决定了后续访问的依然是该服务器
    在这里插入图片描述
  4. fair(第三方)
    按照请求的服务响应时间来分配,响应时间短的优先分配
    在这里插入图片描述
    =======================

动静分离
把动态去请求和静态请求分开,而不是单纯的把静态页面和动态页面物理分离
可以理解为:使用Nginx处理静态页面,Tomcat处理动态页面
在这里插入图片描述

大致分为两种来实现动静分离:

  1. 纯粹把静态文件独立成单独的域名放在静态服务器上

  2. 动态和静态文件混在一起,通过nginx来分开

过程:
在data目录下,分别创建两个目录image(01.jpg)、 www(a.html)
在这里插入图片描述
通过nginx配置访问
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终浏览器访问方式:
配置文件中的autoindex on; 列出文件夹中的内容
在这里插入图片描述
在这里插入图片描述

=======================

高可用
如果nginx宕机,但请求过程仍然可用
对外提供一个虚拟的ip:192.168.17.50 进行绑定
在这里插入图片描述
需要两台linux环境nginx服务器,并安装好keepalived
安装后在etc中keepalived中的配置文件中进行配置

在这里插入图片描述在这里插入图片描述

keepalived.conf文件中进行高可用配置
指定主、备机,并指定脚本文件(检测nginx是否活着)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

======================

高可用配置信息keepalived.conf
全局配置
检测脚本配置
虚拟ip配置

全局配置中,配置访问到的主机名(先通过vi /etc/host 进行设定)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

检测脚本配置(脚本中的条件成立,执行间隔操作,权重)
在这里插入图片描述

虚拟ip的配置
在这里插入图片描述
在这里插入图片描述
脚本
在这里插入图片描述

=================

Nginx原理
在这里插入图片描述
nginx启动后有两个进程:master、worker
在这里插入图片描述
worker如何进行工作?
一个master,多个worker的好处:
可以使用nginx -s reload热部署
每个worker独立进程
worker数量和CPU核数相等最合适
在这里插入图片描述
worker的连接数
发送请求,占用了worker几个连接数(2个或4个)
客户端—>nginx—>静态资源(2个)
客户端—>nginx—>tomcat(4个)
nginx有一个master,四个worker,每个worker支持最大的连接数据是1024,支持最大的并发数是多少
1024X4/2
公式如下:
在这里插入图片描述

Nginx代理MySQL连接,并限制访问IP

生产环境基本上都部署在云服务器上,例如应用服务器、MySQL服务器等。如果MySQL服务器直接暴露在公网,就会存在很大的风险,为了保证数据安全,MySQL服务器的端口是不对外开放的。
线上业务遇到bug了,开发的小伙伴需要远程连接MySQL来查看数据,那应该怎么办呢?
我们可以通过Nginx代理(“跳板机”)来进行连接。

环境准备:

需要一台服务器并安装Nginx,且与MySQL服务器处于一个内网之中,内网之间可以访问。
需要用到ngx_stream_core_module模块,该模块不是默认构建的,我们需要在configure时添加–with-stream来进行构建
根据其提供的指令,进行配置。

①、stream

该指令定义了stream服务器。与http块平级,定义在main块中
作用域:main
语法:stream {…}

 stream {
     server {
         ......
     }
 }

②、server

该指令定义一个虚拟主机,与http块中的server类似。我们可以在stream块中定义多个server块。
作用域:stream
语法:server {…}

stream {
     server {
         ......
     }
     server {
         ......
     }
 }

③、listen

该指令定义虚拟主机server要监听的socket的地址和端口。
作用域:server
语法:listen address:port;

listen 127.0.0.1:3306;
 listen *:3306;
 # 效果与listen *:3306一样
 listen 3306;
 listen localhost:3306;

④、配置示例

MySQL服务器,端口3306(单机环境)

stream  {
     server {
         listen 3306;
         proxy_pass 192.168.110.101:3306;
     }
 }

MySQL服务器,端口3306(集群环境)

stream  {
     upstream mysql_socket {
         server 192.168.110.101:3306;
     }
     server {
             listen 3306;
             proxy_pass mysql_socket;
     }
 }

此时,我们就可以通过例如Navicat等客户端进行连接。

限制访问IP

实现了对连接的代理,所有人都可以通过访问Nginx来连接MySQL服务器,解决了外网无法连接的问题。

为了更进一步的缩小访问范围,保证数据安全,我们可以限制只有公司网络的IP地址可以通过Nginx进行连接。

Nginx提供了ngx_stream_access_module模块,其指令非常简单,仅包含allow和deny指令。

①、allow

该指令设置指定的IP允许访问。可以和deny指令配合使用
作用域:stream, server
语法:allow address | CIDR | unix: | all;

 # 允许192.168.110.1访问
 allow 192.168.110.1;
 
 # 允许192.168.110.1到192.168.255.254
 allow 192.168.110.0/16;
 
 # 允许192.168.110.1到192.168.110.254
 allow 192.168.110.0/24;
 
 # 允许所有的IP访问
 allow all;

②、deny

该指令设置指定的IP禁止访问。可以和allow指令配合使用。
作用域:stream, server
语法:deny address | CIDR | unix: | all;

# 禁止192.168.110.1访问
 deny 192.168.110.1;
 
 # 禁止192.168.110.1到192.168.255.254
 deny 192.168.110.0/16;
 
 # 禁止192.168.110.1到192.168.110.254
 deny 192.168.110.0/24;
 
 # 禁止所有的IP访问
 deny all;

禁止所有的IP访问,192.168.110.100除外。
Tips:如果指定了allow,需要配合deny使用,否则就是允许所有的IP地址访问。

allow 192.168.110.100;
 deny all;

案例

只允许192.168.110.100通过Nginx连接MySQL服务器。

stream  {
     allow 192.168.110.100;
     deny all;
     server {
         listen 3306;
         proxy_pass 192.168.110.101:3306;
     }
 }

==============================================

视化配置 Nginx 的神器

支持什么功能的配置:反向代理、HTTPS、HTTP/2、IPv6, 缓存、WordPress、CDN、Node.js 支持、 Python (Django) 服务器等
想在线进行配置,只需要打开网站:https://nginxconfig.io/,按照自己的需求进行操作就行了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择你的场景,填写好参数,系统就会自动生成配置文件。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值