Nginx篇

@author:尹会东
@createTime:2020/05/13

一,Nginx简介

1.什么是nginx?

高性能的HTTP和反向代理web服务器。

特点:占用内存少,并发能力强。

2.正向代理和反向代理

1)正向代理

当客户端无法访问外部资源的时候(由于诸如墙这样的原因),可以通过一个正向代理去间接地访问,所以客户端需要配置代理服务器的ip。
正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理

2)反向代理

客户端是无感知代理的存在,以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。保证内网的安全,公网作为访问地址,web服务器谁内网

正向代理隐藏的是代理服务器    反向代理隐藏的是实际服务器

3.负载均衡

单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是负载均衡。

4.动静分离

为了加快网站解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。

二,linux下安装nginx

1.安装相关依赖

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

2.安装nginx

解压缩nginx.xx.tar.gz 包
tar -xvf nginx.xx.tar.gz -C /opt/
进入解压缩目录 执行 ./configure
make && make install

3.常用命令

1)前提条件:必须进入nginx的目录中去操作
cd /usr/local/nginx/sbin
2)查看版本:./nginx -v
3)启动nginx:./nginx
4)关闭nginx:./nginx  -s stop
5)重新加载 nginx : ./nginx -s reload

4.nginx配置文件

1)配置文件位置
cd /usr/local/nginx/conf
nginx.conf
2)配置文件组成
  由三部分组成
  全局块:work-processes 1;越大,处理并发量越多。
  events块:worker-connections 1024; 最大连接数
  http块

三,配置反向代理

1.反向代理实例1

在这里插入图片描述

server_name + lister 代表的是代理服务器的ip+端口号
proxy_pass 指定的是要代理的ip地址+端口号

打开浏览器输入121.199.31.160

在这里插入图片描述

2.反向代理实例2

1)实现效果

使用 nginx  反向代理,根据访问的路径跳转到不同端口的服务中
nginx  监听端口为 9001
访问 http://121.199.31.160:9001/edu/  直接跳转到 127.0.0.1:8080
访问 http://121.199.31.160:9001/vod/  直接跳转到 127.0.0.1:8081

2)准备工作

1)准备两个tomcat服务器,一个是8080端口,一个是8081端口
在opt目录下创建两个文件夹
mkdir tomcat8080
mkdir tomcat8081
分别解压tomcat压缩包到两个文件夹
tar -xvf apache-tomcat-7.0.70.tar.gz -C /opt/tomcat8080
tar -xvf apache-tomcat-7.0.70.tar.gz -C /opt/tomcat8081
分别进入bin目录下启动tomcat服务器
./startup.sh
8081在启动跟之前先修改配置文件:
cd/opt/tomcat8081/apache-tomcat/conf
vim server.xml
sever port=8015
8080-->8081
:wq!
然后启动
2)测试
分别在两个文件夹下的web文件夹下创建edumulu和vod目录,
在里面加入文件a.html

3)具体配置

1)找到nginx配置文件,进行反向代理配置。
cd /usr/local/nginx/conf
vi /nginx.conf
找到:
# another virtual host using mix of IP-, name-, and port-based configuration
在下面添加:
server {
        listen       9001;
        server_name  localhost;

        location ~ /edu/ {
            root   html;
            index  index.html index.htm;
            proxy_pass http://121.199.31.160:8080;
        }
         location ~ /vod/ {
            root   html;
            index  index.html index.htm;
            proxy_pass http://121.199.31.160:8081;
        }
        }

在这里插入图片描述

此时,只需要访问:代理ip+被代理ip的项目目录就可以成功实现隐藏被代理ip来访问项目。

3.location指令说明

location [ =|~|~*|^~] uri{
}
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri 和请求字符串做匹配。

四,配置负载均衡

1.实现效果

浏览器地址栏输入地址 http://121.199.31.160/edu/a.html ,负载均衡效果,平均 8080
 和 8081 

2.准备工作

(1 )准备两台 tomcat  服务器,一台 8080 ,一台 8081
(2 )在两台 tomcat  里面 webapps  目录中,创建名称是 edu  文件夹,在 edu  文件夹中创建页面 a.html

3.在nginx配置文件中进行负载均衡配置

upstream myserver {
	server 121.199.31.160:8080;
	server 121.199.31.160:8081;
}

server{
	listen   80;
	server_name  121.199.31.160;
	location / {
		proxy_pass http://myserver;
	}
}

4.nginx分配服务器策略

第一种  轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 。 掉,能自动剔除。
第二种 weight
weight  代表权重默认为 1, 权重越高被分配的客户端越多
upstream server_pool {
server 192.168.5.21 weight = 10 ;
server 192.168.5.22 weight = 10 ;
}
第三种 ip_hash
每个请求按访问 ip 的 的 hash  结果分配,这样每个访客固定访问一个后端服务器
upstream server_pool {
ip_hash ;
server 192.168.5.21:80 ;
server 192.168.5.22:80 ;
}
第四种 fair (第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool {
server 192.168.5.21:80 ;
server 192.168.5.22:80 ;
fair ;
}

五,配置动静分离

1.动静分离图示

在这里插入图片描述

通过 location  指定不同的后缀名实现不同的请求转发。通过 expires  参数设置,可以使浏
览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires  定义:是给一个资源
设定一个过期时间,也就是说无需去 服务端验证,直接通过浏览器自身确认是否过期即可,
所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,
不建议使用 Expires  来缓存),我这里设置 3d ,表示在这 3  天之内访问这个 URL ,发送一
个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304 ,
如果有修改,则直接从服务器重新下载,返回状态码 200 。

2.准备静态资源

在这里插入图片描述

3.具体配置

1)在 nginx 配置文件中进行配置
找到 nginx 安装目录,打开/conf/nginx.conf 配置文件,
2)添加监听端口、访问名字
重点是添加 location,
#gzip on ;下添加:

server {
       listen    80;
       server_name 192.168.10.105;
       location /www/ {
                    root /data/;
                    index index.html  index.htm;
        }
        location  / image / {
                      root;
                      autoindex on;
       }
}
最后检查 Nginx 配置是否正确即可,然后测试动静分离是否成功,之需要删除后端 tomcat
服务器上的某个静态文件,查看是否能访问,如果可以访问说明静态资源 nginx 直接返回
了,不走后端 tomcat 服务器

六,配置高可用集群

1.图解高可用

在这里插入图片描述

2.准备工作

(1 )需要两台 nginx  服务器
(2 )需要 keepalived
	yum install keepalived –y
	安装之后,在 etc  里面生成目录 keepalived ,有文件 keepalived.conf
(3 )需要虚拟 ip

3.完成主从配置

(1 )修改/etc/keepalived/keepalivec.conf


global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 //网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虚拟地址
}
}

(2 )在/usr/local/src 添加检测脚本

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
	/usr/local/nginx/sbin/nginx
	sleep 2
	if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
		killall keepalived
	fi
fi

(3 )把两台服务器上 nginx 和 和 keepalived

启动 nginx :./nginx
启动 keepalived :systemctl start keepalived.service

4.测试

在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50

5.Keepalived的作用

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

七,nginx原理

1.mater 和 worker

在这里插入图片描述

2 、worker 如何工作的

在这里插入图片描述

3 、一个 master 和多个 woker 有好处

(1 )可以使用 nginx –s reload  热部署,利用 nginx  进行热部署操作
(2 )每个 woker  是独立的进程,如果有其中的一个 woker  出现问题,其他 woker  独立的,
继续进行争抢,实现请求过程,不会造成服务中断

4 、设置多少个 woker 合适

worker 数和服务器的 cpu 数相等是最为适宜的

5 、连接数 worker_connection

第一个:发送请求,占用了 woker  的几个连接数?
答案:2  或者 4  个
第二个:nginx  有一个  master ,有四个 woker ,每个 woker  支持最大的连接数 1024 ,支持的最大并发数是多少?
  普通的静态访问最大并发数是: worker_connections * worker_processes /2 ,
  而如果是 HTTP  作  为反向代理来说,最大并发数量应该是 worker_connections *
worker_processes/4 。

猜你喜欢

转载自blog.csdn.net/weixin_45596022/article/details/108503642
今日推荐