尚硅谷nginx基础

news/2024/3/29 23:29:00/文章来源:https://blog.csdn.net/m0_45432976/article/details/127540789

nginx

  • 1. nginx安装
    • 1.1版本区别
    • 1.2安装步骤
    • 1.3 启动nginx
    • 1.4关于防火墙
    • 1.5 安装成系统服务
    • 1.6 配置nginx环境变量
  • 2. nginx基本使用
    • 2.1 基本运行原理
    • 2.2 nginx配置文件
      • 2.2.1 最小配置
        • 2.2.1.1 基本配置说明
    • 2.3 虚拟主机
      • 2.3.1域名、dns、ip地址的关系
      • 2.3.2IP地址和DNS地址的区别
      • 2.3.3IP地址
      • 2.3.4 DNS是什么?
      • 2.3.5虚拟主机原理
    • 2.4 域名解析
      • 2.4.1 vhost文件进行域名解析
      • 2.4.2 公网域名配置
      • 2.4.3Nginx虚拟主机域名配置
        • 2.4.3.1 不同端口号的虚拟主机
        • 2.4.3.2 域名不一致的虚拟主机
    • 2.5 namespace匹配规则
  • 3.反向代理
    • 3.1 网关、正向代理、反向代理
    • 3.2反向代理的配置
    • 3.3 nginx负载均衡
  • 4.动静分离
    • 4.1什么是动静分离
    • 4.2动静分离的原理
    • 4.3使用正则配置动静分离
    • 4.4 URLRewrite
    • 4.5 负载均衡+URLRewrite实战
    • 4.5 防盗链
      • 4.5.1 配置
    • 4.6高可用
      • 4.6.1为什么要使用nginx高可用
      • 4.6.2 什么是高可用
      • 4.6.3高可用的原理
      • 4.6.4 keepalived安装及配置

1. nginx安装

1.1版本区别

常用版本分为四大阵营

  1. Nginx开源版:http://nginx.org/
  2. Nginx plus 商业版:https://www.nginx.com
  3. openresty:http://openresty.org/cn/
  4. Tengine:http://tengine.taobao.org/

1.2安装步骤

  1. 将nginx的安装包拖入服务器并解压
  2. 进入nginx目录
  3. ./configure进行安装
  4. 如果发现下面报错
checking for OS + Linux 3.10.0-693.el7.x86_64 x86_64 
checking for C compiler ... not found ./configure: error: C compiler cc is not found

安装gcc

yum install -y gcc
  1. 如果报以下错误
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

安装perl库

yum install -y pcre pcre-devel
  1. 如果报以下错误
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.

安装zlib库

yum install -y zlib zlib-devel
  1. 安装
./configure --prefix=/usr/local/nginx
  1. 接下来执行
make
make install

1.3 启动nginx

启动Nginx
进入安装好的目录 /usr/local/nginx/sbin

  1. ./nginx启动
  2. ./nginx -s stop快速停止
  3. ./nginx -s quit优雅关闭,在退出前完成已经接受的连接请求
  4. ./nginx -s reload重新加载配置

1.4关于防火墙

  1. 关闭防火墙
    systemctl stop firewalld.service
  2. 禁止防火墙开机启动
    systemctl disable firewalld.service
  3. 放行端口
    firewall-cmd --zone=public --add-port=80/tcp --permanent
  4. 重启防火墙
    firewall-cmd --reload

1.5 安装成系统服务

  1. 创建服务脚本
    vi /usr/lib/systemd/system/nginx.service
  2. 脚本内容
[Unit] 
Description=nginx - web server 
After=network.target remote-fs.target nss-lookup.target [Service] 
Type=forking 
PIDFile=/usr/local/nginx/logs/nginx.pid 
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf 
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 
ExecReload=/usr/local/nginx/sbin/nginx -s reload 
ExecStop=/usr/local/nginx/sbin/nginx -s stop 
ExecQuit=/usr/local/nginx/sbin/nginx -s quit 
PrivateTmp=true [Install] 
WantedBy=multi-user.target
  1. 重新加载系统服务
    systemctl daemon-reload
  2. 启动服务
    systemctl start nginx.service
  3. 开机启动
    systemctl enable nginx.service

1.6 配置nginx环境变量

  1. 编辑环境变量配置文件/etc/profile,命令:
vi /etc/profile
  1. 添加nginx配置:
#nginx bin目录配置
export NGINX_PATH=/opt/nginx/sbin
export PATH=$PATH:$NGINX_PATH
  1. 使配置生效,命令
source /etc/profile
  • nginx常用命令
命令说明
nginx -v显示版本信息并退出
nginx -V示版本和配置选项信息,然后退出
nginx -t检查配置文件nginx.conf
nginx -c conf文件的目录(/opt/nginx/conf/nginx.conf)启动nginx服务
nginx -s reopen重启Nginx
nginx -s reload重新加载Nginx配置文件,然后以优雅的方式重启Nginx
nginx -s stop强制停止Nginx服务
nginx -s quit优雅地停止Nginx服务

2. nginx基本使用

2.1 基本运行原理

在这里插入图片描述
在nginx的sbin目录先启动nginx后,会启动一个主线程master和多个子线程worker,主进程主要用于读取并校验配置文件,worker主要用于接收请求,解析请求读取配置文件

2.2 nginx配置文件

2.2.1 最小配置

2.2.1.1 基本配置说明

  1. worker_processes
    worker_processes 1; 默认为1,表示开启一个业务进程,一般一个CPU对应一个

  2. worker_connections
    worker_connections 1024; 单个业务进程可接受连接数

  3. include mime.types;
    include mime.types; 引入http mime类型

  4. default_type application/octet-stream;
    default_type application/octet-stream; 如果mime类型没匹配上,默认使用二进制流的方式传输。

  5. sendfile on;
    sendfile on; 使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。
    未开启sendfile(需要进行数据的拷贝)
    在这里插入图片描述
    开启后
    在这里插入图片描述

  6. keepalive_timeout 65;
    keepalive_timeout 65;

  7. server
    一个serve代表一个主机,可以配置多个serve

server {listen 80; #监听端口号 server_name localhost; #主机名或主机名 location / { #uri 匹配路径 root html;# 文件根目录 index index.html index.htm; #默认页名称 }error_page 500 502 503 504 /50x.html; #报错编码对应页面 location = /50x.html { root html; }
}

2.3 虚拟主机

虚拟主机使用特殊的软硬件技术,把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每一台虚拟主机都具有独立的域名,具有完整的Internet服务器(WWW、FTP、Email等)功能,虚拟主机之间完全独立,并可由用户自行管理,在外界看来,每一台虚拟主机和一台独立的主机完全一样。

域名解析就是域名到IP地址的转换过程,IP地址是网路上标识站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址,。域名的解析工作由DNS服务器完成。

2.3.1域名、dns、ip地址的关系

  • 域名是相对网站来说的,IP是相对网络来说的。当输入一个域名的时候,网页是如何做出反应的?
    输入域名---->域名解析服务器(dns)解析成ip地址—>访问IP地址—>完成访问的内容—>返回信息。

  • Internet上的计算机IP是唯一的,一个IP地址对应一个计算机。
    一台计算机上面可以有很多个服务,也就是一个ip地址对应了很多个域名,即一个计算机上有很多网站。

2.3.2IP地址和DNS地址的区别

IP地址是指单个主机的唯一IP地址,而DNS服务器地址是用于域名解析的地址。
一个是私网地址,一个是公网地址;
一个作为主机的逻辑标志,一个作为域名解析服务器的访问地址。
原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务

2.3.3IP地址

IP,就是Internet Protocol的缩写,是一种通信协议,我们用的因特网基本是IP网组成的。
IP地址就是因特网上的某个设备的一个编号。
IP地址一般由网络号,主机号,掩码来组成。
IP网络上有很多路由器,路由器之间转发、通信都是只认这个IP地址,类似什么哪?就好像你寄包裹,你的写上发件人地址,你的姓名,收件人地址,收件人姓名。
这个发件人地址就是你电脑的IP的网络号,你的姓名就是你的主机号。
收件人的地址就是你要访问的IP的网络号,收件人的姓名就是访问IP的主机号。
现在还有了更复杂的IPV6,还有IPV9。

2.3.4 DNS是什么?

我们访问因特网必须知道对端的IP地址,可是我们访问网站一般只知道域名啊,怎么办?
这时候DNS就有用处了,电脑先访问DNS服务器,查找域名对应的IP,于是,你的电脑就知道要发包到IP地址了。

2.3.5虚拟主机原理

虚拟主机是为了在同一台物理机器上运行多个不同的网站,提高资源利用率引入的技术。
一般的web服务器一个ip地址的80端口只能正确对应一个网站。web服务器在不使用多个ip地址和端口的情况下,如果需要支持多个相对独立的网站就需要一种机制来分辨同一个ip地址上的不同网站的请求,这就出现了主机头绑定的方法。简单的说就是,将不同的网站空间对应不同的域名,以连接请求中的域名字段来分发和应答正确的对应空间的文件执行结果。举个例子来说,一台服务器ip地址为192.168.8.101,有两个域名和对应的空间在这台服务器上,使用的都是192.168.8.101的80端口来提供服务。如果只是简单的将两个域名A和B的域名记录解析到这个ip地址,那么web服务器在收到任何请求时反馈的都会是同一个网站的信息,这显然达不到要求。接下来我们使用主机头绑定域名A和B到他们对应的空间文件夹C和D。当含有域名A的web请求信息到达192.168.8.101时,web服务器将执行它对应的空间C中的首页文件,并返回给客户端,含有域名B的web请求信息同理,web服务器将执行它对应的空间D中的首页文件,并返回给客户端,所以在使用主机头绑定功能后就不能使用ip地址访问其上的任何网站了,因为请求信息中不存在域名信息,所以会出错。

2.4 域名解析

2.4.1 vhost文件进行域名解析

  1. 修改C:\Windows\System32\drivers\etc目录下的hosts文件
    在这里插入图片描述
  2. 在浏览器中输入s.com会出现以下效果
    在这里插入图片描述

2.4.2 公网域名配置

使用阿里云的域名进行配置

  1. 进入自己购买的域名列表
    在这里插入图片描述
  2. 添加域名解析
    在这里插入图片描述
  3. 测试
    在这里插入图片描述

2.4.3Nginx虚拟主机域名配置

  1. 创建/www/www和/www/vod两个目录
  2. 在/www/www目录下创建index.html
this is index.html
  1. 在/www/vod目录下创建index.html
this is vod.html

2.4.3.1 不同端口号的虚拟主机

要求当访问80端口时请求到/www/www/indedx.html,当访问88端口时访问请求到/www/vod/index.html

  1. 修改nginx.conf文件
worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;# 虚拟主机vhost	server {listen       80;# 域名 主机名server_name  localhost;location / {root   /www/www;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}# 虚拟主机vhost	server {listen       88;# 域名 主机名server_name  localhost;location / {root   /www/vod;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}
  1. 访问80端口
    在这里插入图片描述
  2. 访问88端口
    在这里插入图片描述

2.4.3.2 域名不一致的虚拟主机

要求当访问www.smilecb.cn时请求到/www/www/indedx.html,当访问vod.smilecb.cn时访问请求到/www/vod/index.html

  1. 修改nginx.conf文件
worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;# 虚拟主机vhost	server {listen       80;# 域名 主机名server_name  www.smilecb.cn;location / {root   /www/www;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}# 虚拟主机vhost	server {listen       80;# 域名 主机名server_name  vod.smilecb.cn;location / {root   /www/vod;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}
  1. 访问www.smilecb.cn
    在这里插入图片描述
  2. 访问vod.smilecb.cn
    在这里插入图片描述

2.5 namespace匹配规则

我们需要注意的是servername匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。

  1. 完整匹配
    我们可以在同一servername中匹配多个域名
    server_name vod.smilecb.cn www.smilecb.cn;
  2. 通配符匹配
    server_name *.mmban.com
  3. 通配符结束匹配
    server_name vod.*;
  4. 正则表达式匹配
    server_name ~^[0-9]+\.mmban\.com$;

匹配的优先级:完全匹配、通配符在前的,如*.test.com、通配在后的,如www.test.*、正则匹配,如~^.www.test.com$

3.反向代理

在这里插入图片描述

3.1 网关、正向代理、反向代理

  1. 网关
    网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器,与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。网关(Gateway)就是一个网络连接到另一个网络的“关口”。也就是网络关卡。Gate在英文中就是大门的意思。
  2. 正向代理
    正向代理:是指用户利用代理服务器访问目标服务器。也就是说,代理服务器的代理对象是用户。如下图所示。
    在这里插入图片描述
  3. 反向代理
    在这里插入图片描述

反向代理的对象则是 目标服务器。是指服务端利用代理服务器给用户提供服务。
和正向代理相比,二者都是利用代理服务器实现的,不过反向代理的主语是服务端,所以说反向代理对于用户来说是透明的,在用户的视野里,代理服务器便是目标服务器。

3.2反向代理的配置

proxy_pass http://baidu.com;

nginx配置示例

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;# 虚拟主机vhost	server {listen       80;# 域名 主机名server_name  z;location / {proxy_pass http://www.atguigu.com;#  root   /www/www;#  index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

3.3 nginx负载均衡

  1. 什么是负载均衡
    当一台服务器的访问量越大时,服务器所承受的压力也就越大,超出自身所指定的访问压力就会崩掉,避免发生此类事情的发生,因此也就有了负载均衡来分担服务器的压力。
    那么究竟什么是负载均衡呢?通俗些讲,就是我们有几十台、几百台甚至更多服务器,将这些服务器组成一个服务器集群,当客户端访问某台设备的数据时,首先发送的请求先到一台中间服务器,并通过中间服务器在服务器集群中平均分摊到其他服务器中,因此,当用户每次所发送的请求都将会保证服务器集群中的设备均与平摊,以此来分担服务器的压力,从而保持服务器集群的整理性能最优,避免出现有崩溃的现象。

  2. Nginx负载均衡的作用

  • 转发功能:Nginx 会按照一定的算法轮询、权重将客户端发来的请求转发至不同的应用服务器上,同时减轻单台服务器的压力,提高服务器的并发量;
  • 故障迁移:当一台服务器出现了故障时,客户端发来的请求将自动发送到其他服务器; * 添加恢复:当故障服务器恢复正常工作时,将自动添加到处理用户请求中;
    nginx负载均衡配置示例
    将请求转发到192.168.44.112和192.168.44.113两台服务器上
worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;# 虚拟主机vhost	upstream httpds{server 192.168.44.112:80;server 192.168.44.113:80;}server {listen       80;# 域名 主机名server_name  z;location / {proxy_pass http://httpds;#  root   /www/www;#  index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

常见的几种策略

  1. weight(权重)
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream httpd {
server 127.0.0.1:8050 weight=10 down;
server 127.0.0.1:8060 weight=1;
server 127.0.0.1:8060 weight=1 backup;
}
  • down:表示当前的server暂时不参与负载
  • weight:默认为1.weight越大,负载的权重就越大。
  • backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。
  1. ip_hash
    根据客户端的ip地址转发同一台服务器,可以保持回话。
  2. least_conn
    最少连接访问
  3. url_hash
    根据用户访问的url定向转发请求,根据url的hash值定向转发到特定的服务器(使用场景:固定资源不在统一服务器)
  4. fair
    根据后端服务器响应时间转发请求(有流量去倾斜的风险)

4.动静分离

4.1什么是动静分离

为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源,如图片、js、css等文件,可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。对于用户请求的动态文件,如servlet、jsp,则转发给Tomcat,Jboss服务器处理,这就是动静分离。即动态文件与静态文件的分离。

4.2动静分离的原理

在这里插入图片描述

动静分离可通过location对请求url进行匹配,将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。通常将静态资源放到nginx中,动态资源转发到tomcat服务器中。

4.3使用正则配置动静分离

  1. 常见的Nginx正则表达式
^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
\d :匹配纯数字
{n} :重复 n 次
{n,} :重复 n 次或更多次
{n,m} :重复 n 到 m 次
[] :定义匹配的字符范围
[c] :匹配单个字符 c
[a-z] :匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] :匹配所有大小写字母或数字
() :表达式的开始和结束位置
| :或运算符  //例(js|img|css)
  1. location正则
//location大致可以分为三类
精准匹配:location = /{}
一般匹配:location /{}
正则匹配:location ~/{}
//location常用的匹配规则:
= :进行普通字符精确匹配,也就是完全匹配。
^~ :表示前缀字符串匹配(不是正则匹配,需要使用字符串),如果匹配成功,则不再匹配其它 location。
~ :区分大小写的匹配(需要使用正则表达式)。
~* :不区分大小写的匹配(需要使用正则表达式)。
!~ :区分大小写的匹配取非(需要使用正则表达式)。
!~* :不区分大小写的匹配取非(需要使用正则表达式)。
//优先级
首先精确匹配 =
其次前缀匹配 ^~
其次是按文件中顺序的正则匹配 ~或~*
然后匹配不带任何修饰的前缀匹配
最后是交给 / 通用匹配

注意:

  • 精确匹配: = , 后面的表达式中写的是纯字符串
  • 字符串匹配: ^~ 和 无符号匹配 , 后面的表达式中写的是纯字符串
  • 正则匹配: ~ 和 ~* 和 !~ 和 !~* , 后面的表达式中写的是正则表达式

location的说明

 (1)location = / {}
=为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配
再比如 location = /abc,则只匹配/abc ,/abc/或 /abcd不匹配。若 location  /abc,则即匹配/abc 、/abcd/ 同时也匹配 /abc/。(2)location / {}
因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,
但若后面是正则表达式会和最长字符串优先匹配(最长匹配)(3)location /documents/ {}
匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条(4)location /documents/abc {}
匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条(5)location ^~ /images/ {}
匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条(6)location ~* \.(gif|jpg|jpeg)$ {}
匹配所有以 gif、jpg或jpeg 结尾的请求
然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则(7)location /images/abc {}
最长字符匹配到 /images/abc,优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在(8)location ~ /images/abc {}
匹配以/images/abc 开头的,优先级次之,只有去掉 location ^~ /images/ 才会采用这一条(9)location /images/abc/1.html {}
匹配/images/abc/1.html 文件,如果和正则 ~ /images/abc/1.html 相比,正则优先级更高优先级总结:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (location /)

实际网站使用中,至少有三个匹配规则定义:

  1. 第一个必选规则
    直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。这里是直接转发给后端应用服务器了,也可以是一个静态首页
location = / {proxy_pass http://127.0.0.1:8080/; 
}
  1. 第二个必选规则
    处理静态文件请求,这是nginx作为http服务器的强项,有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
    root /webroot/static/;
}location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/;
}
  1. 第三个规则
    通用规则,用来转发动态请求到后端应用服务器
location /api/ {proxy_pass http://127.0.0.1:3000/api/
}

4.4 URLRewrite

rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到repacement,结尾是flag标记。
rewrite语法格式及参数语法:

rewrite是实现URL重写的关键指令,根据regex (正则表达式)部分内容,
重定向到replacement,结尾是flag标记。

rewrite< regex >< replacement >[flag];
关键字正则替代内容flag标记
  • 关键字:其中关键字error_log不能改变
  • 正则:perl兼容正则表达式语句进行规则匹配
  • 替代内容:将正则匹配的内容替换成replacement
  • flag标记:rewrite支持的flag标记

rewrite参数的标签段位置:

  • server,location,if

flag标记说明:

  • last #本条规则匹配完成后,继续向下匹配新的location URI规则
  • break #本条规则匹配完成即终止,不再匹配后面的任何规则
  • redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
  • permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

实例

rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 break;

4.5 负载均衡+URLRewrite实战

  1. 开启防火墙
    systemctl start firewalld
  2. 重启防火墙
    systemctl restart firewalld
  3. 重载规则
    firewall-cmd --reload
  4. 查看已配置规则
    firewall-cmd --list-all
  5. 指定端口和ip访问
    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.44.101" port protocol="tcp" port="8080" accept"
  6. 移除规则
    firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.44.101" port port="8080" protocol="tcp" accept"

网关配置

upstream httpds {
server 192.168.44.102 weight=8 down;
server 192.168.44.103:8080 weight=2;
server 192.168.44.104:8080 weight=1 backup;
}
location / {
rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 redirect;
proxy_pass http://httpds ;
}

4.5 防盗链

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。

4.5.1 配置

valid_referers none | blocked | server_names | strings ....;

  • none, 检测 Referer 头域不存在的情况。
  • blocked,检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以
    “http://” 或 “https://” 开头。
  • server_names ,设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。

在需要防盗链的location中配置

valid_referers 192.168.44.101;
if ($invalid_referer) {
return 403;
}

4.6高可用

4.6.1为什么要使用nginx高可用

因为nginx作为反向代理服务器时,有可能出现宕机的情况,而由于其反向代理的特性,就会导致其他服务器(tomcat等)无法被访问,这样项目就停止工作了。但是使用了高可用后,就可以避免这种现象出现。

4.6.2 什么是高可用

nginx的高可用简单来说就是配置了两台(或更多)的nginx服务器,当主服务器宕机时,就会自动切换到备用服务器,从而保证项目的持续运行。

4.6.3高可用的原理

nginx的实现需要借助其他工具(keepalived)来实现。在keepalived中配置一个虚拟IP(VIP),同时keepalived会定时检查主服务器的工作状态(通过脚本实现)。在主服务器正常工作时,VIP就会映射到主服务器的IP,此时,虚拟ip对应的物理地址和主服务器IP对应的物理地址是相同的,所以访问虚拟IP即访问主服务器。当主服务器失效时,脚本就会监测到,从而根据预先的配置,找到优先级最高的备用服务器,并将虚拟IP映射到该备用服务器的ip,此时,这两个ip对应的物理地址时相同的。再主服务器回复正常时,又会被检测到,又会自动切换到主服务器。这样就实现了nginx的高可用。
在这里插入图片描述

4.6.4 keepalived安装及配置

1. 使用yum源安装
yum install keepalived
2. 配置
使用yum安装后配置文件在/etc/keepalived/keepalived.conf

  • 修改主服务器的配置
! Configuration File for keepalivedglobal_defs {router_id lb111
}vrrp_instance VI_1 {  #VI_1实例的名称state MASTER  #主服务器 备份服务器上将MASTER改成BACKUPinterface ens33 #网卡的名称virtual_router_id 51 priority 100 #优先级 优先级高的为masteradvert_int 1 # 间隔检测的时间authentication { #认证配置 同一组保持一致即可auth_type PASSauth_pass 1111}virtual_ipaddress { #虚拟的ip地址192.168.44.200}
}

启动systemctl start keepalived

查看ip地址在这里插入图片描述
同理修改备用机并启动

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_74518.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学渣适用版——Transformer理论和代码以及注意力机制attention的学习

参考一篇玩具级别不错的代码和案例 自注意力机制 注意力机制是为了transform打基础。 参考这个自注意力机制的讲解流程很详细&#xff0c; 但是学渣一般不知道 key&#xff0c;query&#xff0c;value是啥。 结合B站和GPT理解 注意力机制是一种常见的神经网络结构&#xff0…

Android安卓中jni封装代码打包为aar

前文【Android安卓中jni与Java之间传递复杂的自定义数据结构】已经介绍jni编译c++代码且已经成功封装成java,但是c++是以源代码形式继承在app中,本文介绍如何将前述jni c++代码以隐藏源代码封装成aar的形式。 1、aar打包 1.1、新建module 按照流程 File -> New Module …

windows服务器实用(4)——使用IIS部署网站

windows服务器实用——IIS部署网站 如果把windows服务器作为web服务器使用&#xff0c;那么在这个服务器上部署网站是必须要做的事。在windows服务器上&#xff0c;我们一般使用IIS部署。 假设此时前端给你一个已经完成的网站让你部署在服务器上&#xff0c;别人可以在浏览器…

Objective-C description 自定义对象的打印格式/输出的字符串 类似于Java 中的 toString 方法

总目录 iOS开发笔记目录 从一无所知到入门 文章目录IntroNSObject 源码测试类截图测试代码输出Intro 在 Java 中&#xff0c;对于自定义类一般会重写集成自Object类的toString方法&#xff0c;这样在打印该类的对象时&#xff0c;打印出的字符串就是我们在 toString() 方法中返…

Oracle Apex 21.2 安装过程

什么是 Oracle APEX&#xff1f; Oracle APEX 是广受欢迎的企业级低代码应用平台。借助该平台&#xff0c;您可以构建功能先进的可扩展安全企业应用&#xff0c;并在任何位置&#xff08;云或内部部署&#xff09;部署这些应用。 使用 APEX&#xff0c;开发人员可快速开发并部…

数据结构入门DAY1

力扣刷题合集&#xff1a;力扣刷题_Sunlightʊə的博客-CSDN博客217.存在重复元素相关题目链接&#xff1a;力扣 - 存在重复元素题目重现给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返…

大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——ReduceTask工作机制

1、ReduceTask工作机制 ReduceTask工作机制&#xff0c;如下图所示。 &#xff08;1&#xff09;Copy阶段&#xff1a;ReduceTask从各个MapTask上远程拷贝一片数据&#xff0c;并针对某一片数据&#xff0c;如果其大小超过一定阈值&#xff0c;则写到磁盘上&#xff0c;否则直…

Active Directory 05 - 初识 AD CS 证书服务

写在最前 如果你是信息安全爱好者&#xff0c;如果你想考一些证书来提升自己的能力&#xff0c;那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里&#xff1a; https://discord.gg/9XvvuFq9Wb我会提供备考过程中尽可能多的帮助&#xff0c;并分享学习和实践过程…

1029 旧键盘 C++中find函数的使用

题目链接&#xff1a; 一、自己的想法&#xff1a;&#xff08;弱化版双指针&#xff09; 思路为用两个“指针”i, j分别指向原来字符串和实际输入字符串的第一个字符&#xff0c;然后判断i&#xff0c;j所指字符是否一致&#xff0c;若是则i, j同时&#xff0c;若否则将i所指…

【5G RRC】5G系统消息SIB3介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

Windows下命令执行绕过技巧总结(渗透测试专用)

一、连接符1、双引号不要求双引号闭合举例&#xff1a;"who"a"mi" //闭合的 "who"a"mi //不闭合的2、圆括号必须在两边&#xff0c;不能包括中间的字符。举例&#xff1a;((whoami))3、^符号&#xff08;转译符号&#xff09;不可以在结尾&…

Go项目(商品微服务-1)

文章目录简介建表protohandler商品小结简介 商品微服务主要在于表的设计&#xff0c;建哪些表&#xff1f;表之间的关系是怎样的&#xff1f; 主要代码就是 CURD表和字段的设计是一个比较有挑战性的工作&#xff0c;比较难说清楚&#xff0c;也需要经验的积累&#xff0c;这里…

【机器学习笔记】Python基础笔记

目录基础语法加载数据&#xff1a;pd.read_csv查看数据大小&#xff1a;shape浏览数据行字段&#xff1a;columns浏览少量数据&#xff1a;head()浏览数据概要&#xff1a;describe()输出&#xff1a;to_csv基础功能语法缺省值去除缺失值&#xff1a;dropna按行删除&#xff1a…

Paddle配置

目录&#xff1a; 1.激活环境 2.版本选择 突发情况&#xff1a;ModuleNotFoundError: No module named paddle 检验是否安装成功 1.激活环境 Anaconda&#xff1a; conda remove -n paddle --all conda activate paddle 2.版本选择 打开链接&#xff1a;https://www.pa…

基于企业微信应用消息的每日早安推送

基于企业微信应用消息的每日早安推送 第一步&#xff1a;注册企业微信 企业微信注册地址&#xff1a;https://work.weixin.qq.com/wework_admin/register_wx 按照正常流程填写信息即可&#xff0c;个人也可以注册企业微信&#xff0c;不需要公司 注册完成后&#xff0c;登录…

Google Guice 4:Bindings(2)

4 Scopes (实例的作用域&#xff09; 4.1 默认规则&#xff1a;unreuse instance 到目前为止&#xff0c;通过bind().to()和Provides定义的binding&#xff0c;每次需要注入实例对象时&#xff0c;Guice都会创建一个新的实例 // 修改DatabaseTransactionLog&#xff0c;使其打…

Ncvicat 打开sql文件方法

Nacicat打开sql文件时&#xff0c;有比较多的文章介绍可以直接打开&#xff0c;方法介绍的比较多&#xff0c;但是我遇到了一个坑&#xff0c;就是如何配置环境都无法打开。 本机环境&#xff1a; windows10 mysql 5.7.40 Navicat12.1 一、遇到问题情况 1.1、通过navicat…

【python量化】大幅提升预测性能,将NSTransformer用于股价预测

写在前面 NSTransformer模型来自NIPS 2022的一篇paper《Non-stationary Transformers: Exploring the Stationarity in Time Series Forecasting》。NSTransformer的目的主要是为了解决其他方法出现过平稳化处理的问题。其通过提出序列平稳化以及去平稳化注意力机制可以使得模型…

2023年三月份图形化二级打卡试题

活动时间 从2023年3月1日至3月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…

【尚硅谷MySQL入门到高级-宋红康】数据库概述

1、为什么要使用数据库 数据的持久化 2、数据库与数据库管理系统 2.1 数据库的相关概念 2.2 数据库与数据库管理系统的关系 3、 MySQL介绍 MySQL从5.7版本直接跳跃发布了8.0版本 &#xff0c;可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强&a…