为什么需要Nginx
- 一个普通web项目刚刚上线不久时,用户使用的少,并发度低,所以在一个服务器上用一个jar包启动应用就可以了,然后内部Tomcat返回内容给用户。
- 但是慢慢的,用户量上来了,并发量逐渐增大,这时候一台服务器就满足不了我们的需求了。
- 于是采用横向扩展,即增加服务器的数量,即在每个服务器上都运行同一个jar包。
- 但这个时候这个应用的jar包由于启动在不同的服务器上,用户若要访问,就需要一个代理服务器,通过代理服务器来转发请求给相应的服务器;这个过程用户是无感知的,用户不知道是哪个服务器返回的结果;同时,这个代理服务器还可以按照服务器的性能提供不同的权重选择,保证系统的稳定,所以我们使用了Nginx.
Nginx
什么是Nginx?
-
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。
-
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器, 由C语言编写,其特点是占有内存少,并发能力强,官方数据测试表明能够支持高达 50,000 个并发连接数的响应。
-
Nginx 是一个安装非常简单、配置文件简洁、Bug少的服务。
-
Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。还能够不间断服务的情况下进行软件版本的升级。
Nginx应用的三大特性
- 反向代理
- 负载均衡
- 动静分离
反向代理
理解反向代理
之前,需要理解一下什么是正向代理
。
正向代理
我们知道,客户端(不一定是自己的浏览器)和服务器之间是通过http请求和响应来进行交流的。
在一般情况下,发起请求的客户端就是我们的浏览器,浏览器和服务器之间进行直接交流。
但在有些情况下,发起请求的客户端不一定就是浏览器,而是一个代理的客户端去代理我们浏览器去发起请求,然后这个代理的客户端接收响应数据后再返回给我们的浏览器,而这就是我们一般所说的正向代理,其代理的对象是客户端
。
所以对于服务器而言,正向代理隐藏了客户端对象,这样服务器就不知道正式请求的客户是谁。
正向代理图示:
比如有时我们需要上国外的网站时,需要购买VPN(Virtual Private Network)服务来作为跳板,让其代理我们去访问,并将响应结果再返回给我们。而这就是正向代理的实际应用。
反向代理
如果理解了正向代理
,那么反向代理
就容易理解了。
反向代理
与正向代理
相反,其代理的对象是服务器
,反向代理服务器收到需求后判断请求分给哪个具体的服务器,具体的服务器处理后再将响应结果返回给反向代理服务器,反向代理服务器反馈客户端。
在反向代理过程中,隐藏了内部服务器的信息,用户不需要知道是具体哪一台服务器提供的服务,只要知道反向代理服务器是谁就好了,甚至可以把反向代理服务器当做真正服务器看待。
这种形式的代理通常被用作实现负载均衡
,其为反向代理的具体应用。所以: Nginx就是一个可以实现反向代理的优秀的服务器。
负载均衡
内置的策略
内置的负载均衡策略有哪些?
- 轮询【默认】
- 指定权重轮询
- 绑定IP Hash值
- …
轮询
本质:请求轮流转发给各个服务器,各个服务器处理一样的请求量
指定权重轮询
本质:
按照权重的不同,给各个处理分发不同的请求量,权重越大处理的请求量越大,反之越小。
IP Hash
本质:
对客户端的ip地址进行hash运算,若ip地址不变,则hash运算后的结果也不变,则将固定的某个hash结果分配给固定的某个服务器处理,即以后同个ip地址的访问都是由同个服务器进行处理,这样也较好解决了以前由于存在众多服务器的session不共享问题。
扩展/自定义策略
即可以自定义策略,扩展Nginx的负载均衡策略,从而实现自定义的负载均衡效果。
动静分离
在客户端的发送请求中,有些请求是需要后台处理的,称为动态资源;有些请求是不需要经过后台处理的(如:html,css,js,图片等文件),这些不需要经过后台处理的文件称为静态资源。
让网站根据一定规则把静态资源和动态资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,提高资源响应的速度;即先将网站的静态资源缓存在nginx中,如果请求的是静态资源,则直接从nginx中获取静态资源返回即可;而只有需要网站动态资源才会去请求后台服务器进行处理和返回。
Nginx安装
Windows
-
下载nginx压缩包文件.
以nginx/Windows-1.16.1为例,直接下载 nginx-1.16.1.zip。
下载后解压即可。 -
启动nginx.
一般有两种方法启动nginx
-
(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过
-
(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令
nginx.exe
,回车即可.
-
-
检查nginx是否启动
直接在浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功!
-
根据需要来修改配置文件
nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口
当修改了nginx配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx,只需要执行命令
nginx -s reload
即可让改动生效即可。 -
关闭Nginx
如果使用cmd命令窗口启动nginx,可使用两种方法关闭nginx:
-
(1)输入nginx命令
nginx -s stop
(快速停止nginx) 或nginx -s quit
(完整有序的停止nginx) -
(2)使用命令:
taskkill /f /t /im nginx.exe
其中:taskkill是用来终止进程的, /f是强制终止 . /t终止指定的进程和任何由此启动的子进程。 /im是指定进程名称 .
-
Linux
-
安装gcc编译器
yum install gcc-c++
-
安装pcre和pcre-devel
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库,故也需要此库。
yum install -y pcre pcre-devel
-
安装zlib和zlib-devel
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行解压缩,同时zlib-devel是基于zlib的二次开发库
yum install -y zlib zlib-devel
-
安装OpenSSL和openssl-devel
OpenSSL 是一个强大的安全套接字层密码库,包括密码算法、 常用密钥和证书封装管理功能及 SSL 协议,nginx 不仅支持http 协议,还支持 https(即在ssl协议上传输http),即httpsh还需要 依赖SSL,故需要安装。
yum install -y openssl openssl-devel
-
下载nginx的tar.gz格式的安装包
下载完毕后上传到服务器上 /root。
-
解压
tar -zxvf nginx-1.18.0.tar.gz #解压 cd nginx-1.18.0 #进入目录
-
安装
./configure make make install
查找安装路径命令:
whereis nginx
-
启动Nginx,并用浏览器访问验证:
注意:
若是使用linux的云服务器,则需要注意检查服务器的安全组是否开放端口,或者服务器防火墙是否开放端口!
附上linux centos防火墙控制的相关命令:
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
Nginx常用命令
cd /usr/local/nginx/sbin/
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加载配置文件
ps aux|grep nginx 查看nginx进程
创作不易,欢迎点赞/评论/转发!!