分布式之Nginx

26 篇文章 0 订阅
6 篇文章 0 订阅

1、介绍

  • Nginx (engine x) 是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器,负载均衡。

  • Nginx 特点是占有内存少,并发处理能力强,以高性能、低系统资源消耗而闻名,Nginx官方测试为5万并发请求。与Nginx同类型的Web服务器还有Apache、Lighttpd(音同lighty)、Tengine(阿里巴巴的) 等。

2、正向代理和反向代理概念

  • 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;

  • 正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。

  • 正向代理代理对象是客户端,反向代理代理对象是服务端。

  • 代理指的是隐去具体的请求/响应对象。

3、Nginx环境搭建

3、1 Linux下

安装前的准备

Nginx的安装需要确定Linux安装相关的几个库,否则配置和编译会出现错误, 具体的检查安装过程为:

gcc编译器是否安装

     检查是否安装:yum list installed | grep gcc

     执行安装:yum install gcc -y

openssl库是否安装

     检查是否安装:yum list installed | grep openssl

     执行安装:yum install openssl openssl-devel -y

pcre库是否安装

     检查是否安装:yum list installed | grep pcre

     执行安装:yum install pcre pcre-devel -y

zlib库是否安装

     检查是否安装:yum list installed | grep zlib

     执行安装:yum install zlib zlib-devel -y

一次性安装,执行如下命令

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

正式安装

	解压下载下来的nginx文件,执行命令:tar -zxvf nginx-1.14.2.tar.gz
	切换至解压后的nginx主目录,执行命令:cd nginx-1.14.2
	在nginx主目录nginx-1.14.2下执行命令:./configure --prefix=/usr/local/nginx
	(其中--prefix是指定nginx安装路径)  注意:等号左右不要有空格
	执行命令进行编译:make
	执行命令进行安装:make install
	安装成功后,可以切换到/usr/local/nginx目录下,查看内容pwd、ll

启动
1 普通启动

	切换到nginx安装目录的sbin目录下,执行:./nginx

2 通过配置文件启动

	./nginx -c /usr/local/nginx/conf/nginx.conf
	/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

其中-c是指定配置文件,而且配置文件路径必须指定绝对路径

3 检查Nginx是否启动
通过查看进程:

		ps -ef | grep nginx

nginx 体系结构由 master 进程和其 worker 进程组成
master 进程读取配置文件,并维护 worker 进程,而 worker 进程则对请求进行实际处理
Nginx启动后,安装目录下会出现一些_tmp结尾的文件,这些是临时文件,不用管。
在浏览器中输入http://192.168.235.128:80/访问Nginx服务器,出现以下界面

关闭

1 优雅关闭Nginx

	找出nginx的进程号:ps -ef | grep nginx
	执行命令:kill -QUIT 主pid

注意:

  • 其中pid是主进程号的pid(master process),其他为子进程pid(worker process)
  • 这种关闭方式会处理完请求后再关闭,所以称之为优雅的关闭

2 快速关闭Nginx:

	找出nginx的进程号:ps -ef | grep nginx
	kill -TERM 主pid

注意:

  • 其中pid是主进程号的pid(master process),其他为子进程pid(worker process)
  • 这种关闭方式不管请求是否处理完成,直接关闭,比较暴力,称之为快速的关闭

重启Nginx

	./nginx -s reload

配置检查
当修改Nginx配置文件后,可以使用Nginx命令进行配置文件语法检查,用于检查Nginx配置文件是否正确

	/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf –t

其它

Linux上查看nginx版本:

	/usr/local/nginx/sbin/nginx -V

-v (小写的v)显示 nginx 的版本
-V (大写的V)显示 nginx 的版本、编译器版本和配置参数

3、2 Windows下

在官方网站下载最新windows版的nginx:http://nginx.org/en/download.html
将下载下来的nginx压缩包解压到一个目录下,解压后该软件就可以启动使用了

	启动方式1:双击解压目录下的nginx.exe文件即可运行nginx;
	启动方式2:进入dos窗口,切换到nginx主目录下,在dos窗口执行命令:start nginx
	
	关闭方式1:在资源管理器杀掉Nginx进程(有两个进程)
	关闭方式2:在dos窗口切换到Nginx安装主目录下执行命令:nginx -s stop

4 配置与应用

4.1 Nginx的核心配置文件

学习Nginx首先需要对它的核心配置文件有一定的认识,这个文件位于Nginx的安装目录/usr/local/nginx/conf目录下,名字为nginx.conf

详细配置,可以参考resources目录下的<<nginx配置中文详解.conf>>

Nginx的核心配置文件主要由三个部分构成:1基本配置、2events配置、3http配置
1基本配置
在这里插入图片描述
2events配置
在这里插入图片描述
3http配置-基本配置
在这里插入图片描述

3http配置-server配置
在这里插入图片描述

4.2 Nginx主要应用⭐⭐

  • 静态网站部署
  • 负载均衡
  • 静态代理
  • 动静分离
  • 虚拟主机

5 静态网站部署

5.1 修改nginx.conf配置文件,并重启nigx

在server中,通过location匹配访问的路径,然后转发给静态资源
在这里插入图片描述

5.2 配置路径问题

可能会遇到404找不到页面的错误,主要原因是配置路径问题;

规则:ip + port 等于 root,假设server的配置如下:

server {  
    listen 80; #端口号  
    location / {  
        root /opt/static /ace; #静态文件路径
    }  
}

替换:

http://192.168.92.128:80/ = root = /opt/static/ace
http://192.168.92.128:80/ace = root/ace = /opt/static/ace/ace 

location匹配顺序
在没有标识符的请求下,匹配规则如下:

  1. nginx服务器首先在server块的多个location块中搜索是否有标准的uri和请求字符串匹配。如果有多个标准uri可以匹配,就匹配其中匹配度最高的一个location。
  2. 然后,nginx在使用location块中,正则uri和请求字符串,进行匹配。如果正则匹配成功,则结束匹配,并使用这个location处理请求;如果正则匹配失败,则使用标准uri中,匹配度最高的location。
    备注:
    - 如果有精确匹配,会先进行精确匹配,匹配成功,立刻返回结果。
    - 普通匹配与顺序无关,因为按照匹配的长短来取匹配结果。
    - 正则匹配与顺序有关,因为是从上往下匹配。(首先匹配,就结束解析过程)
    - 在location中,有一种统配的location,所有的请求,都可以匹配,如下:

location / {
# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
# 但是正则和最长字符串会优先匹配
}

结合标识符,匹配顺序如下:

(location =) > (location 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径) > (location /)

(精确匹配)> (最长字符串匹配,但完全匹配) >(非正则匹配)>(正则匹配)>(最长字符串匹配,不完全匹配)>(location通配)

6 负载均衡

6.1 概述

  • 负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀。
  • 硬件负载均。比如 F5、深信服、Array 等。
  • 软件负载均衡。比如 Nginx、LVS、HAProxy 等。
  • Nginx通过在nginx.conf文件进行配置即可实现负载均衡。

在这里插入图片描述

6.2 配置

第一步:
在http模块加上upstream配置

upstream www.myweb.com { 
     	server  127.0.0.1:9100 weight=3; 
      	server  127.0.0.1:9200 weight=1;  
} 
  • 其中weight=1表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大访问机会越多
  • upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器。

第二步:
在server模块里添加location,并配置proxy_pass

location /myweb {
	proxy_pass http://www.myweb.com;
}
  • 其中 www.myweb.com 字符串要和 upstream 后面的字符串相等

6.3 Nginx常用负载均衡策略

6.3.1轮询(默认)

注意:这里的轮询并不是每个请求轮流分配到不同的后端服务器,与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。如果后端服务器down掉,将自动剔除

	upstream backserver { 
    	server 127.0.0.1:8080; 
    	server 127.0.0.1:9090; 
} 

6.3.2权重

每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况

	upstream backserver { 
    	server 192.168.0.14 weight=5; 
    	server 192.168.0.15 weight=2; 
} 

6.3.3ip_hash

ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题
算法:hash(“124.207.55.82”) % 2 = 0, 1

	upstream backserver { 
    	ip_hash; 
    	server 127.0.0.1:8080; 
    	server 127.0.0.1:9090; 
}

6.3.4最少连接

web请求会被转发到连接数最少的服务器上

	upstream backserver { 
    	least_conn;
    	server 127.0.0.1:8080; 
    	server 127.0.0.1:9090; 
}	

6.4 负载均衡其他几个配置

配置1:

upstream backserver { 
    	server 127.0.0.1:9100;
		#其它所有的非backup机器down的时候,才请求backup机器
    	server 127.0.0.1:9200 backup; 
} 

配置2:

upstream backserver { 
		server 127.0.0.1:9100;
		#down表示当前的server是down状态,不参与负载均衡
   		server 127.0.0.1:9200 down; 
} 

一般在项目上线的时候,可以分配部署不同的服务器上,然后对Nginx重新reload。
reload不会影响用户的访问,或者可以给一个提示页面,系统正在升级…

7 静态代理

7.1概述

  • 把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx更擅长于静态资源的处理,性能更好,效率更高。
  • 所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。

在这里插入图片描述

7.2 实现的两种方式

方式一 在nginx.conf的location中配置静态资源的后缀

例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)

location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
    	root /opt/static;
}

说明

  • ~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配
  • 第一个点 . 表示任意字符
  • *表示一个或多个字符
  • . 是转移字符,是后面这个点的转移字符
  • | 表示或者
  • $ 表示结尾

整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理。
放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限;否则会出现403错误 chmod 755

方式二 在nginx.conf的location中配置静态资源所在目录实现
例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)

location ~ .*/(css|js|img|images) {
    	root   /opt/static;
}

xxx/css
xxx/js
xxx/img
xxx/images
我们将静态资源放入 /opt/static 目录下,然后用户访问时由nginx返回这些静态资源

8 动静分离

在这里插入图片描述

整个架构中,一个nginx负责负载均衡,两个nginx负责静态代理。Nginx在一台Linux上安装一份,可以启动多个Nginx,每个Nginx的配置文件不一样即可

9 虚拟主机

9.1概述

  • 虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。
  • Nginx提供虚拟主机的功能,就是为了让我们不需要安装多个Nginx,就可以运行多个域名不同的网站。
  • Nginx下,一个server标签就是一个虚拟主机。nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可;

9.2两种配置方式

第一种:基于端口的虚拟主机(了解)
基于端口的虚拟主机配置,使用端口来区分
浏览器使用 同一个域名+端口 或 同一个ip地址+端口访问;

		server {
		    listen 8080;
    		server_name www.myweb.com;
    		location /myweb {
            	proxy_pass http://www.myweb.com;
    		}
}
		server {
    		listen 9090;
    		server_name www.myweb.com;
    		location /p2p {
           		proxy_pass http://www.p2p.com;
    		}
}

第二种:基于域名的虚拟主机(掌握)
基于域名的虚拟主机是最常见的一种虚拟主机

	server {
        listen       80;
        server_name  www.myweb.com;
        location /myweb {
           proxy_pass http://www. myweb.com;
        }
}
	server {
        listen       80;
        server_name  www.p2p.com;
        location /myweb {
           proxy_pass http://www.p2p.com;
        }
}

需要修改一下本地的hosts文件,文件位置:C:\Windows\System32\drivers\etc\hosts
在hosts文件配置:
192.168.208.128 www.myweb.com
192.168.208.128 www.p2p.com
前面是Linux的IP,后面是你自定义的域名,域名访问就相当于ip访问服务器。

10 其他

浏览器申请访问网址,首先由server模块通过IP和port监听,使用location拦截相应路径,转发到proxy_pass指定的url,比如http://new_name.com。然后upstream匹配相应的地址(new_name.com),通过server命令转发到相应服务器(127.0.0.1:8080)上。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zkFun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值