Nginx产生原因
一个公司的项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户
慢慢的,使用平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了
于是我们横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求
我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望他可以按照服务器的性能提供不同的权重选择。保证最佳体验!所以我们使用了Nginx。
Nginx简介
Nginx(engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。
其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。
Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应
正向代理和反向代理
正向代理就是代理客户端的,反向代理就是代理服务器端的
正向代理比较常见的就是VPN,因为国内访问不了外国服务器,我们就需要设置一个代理服务器来访问外网,这个代理服务器就是VPN。你的服务器去请求代理服务器,代理服务器会帮你请求外国服务器,外国服务器把数据响应给代理服务器,代理服务器再把请求内容返回给你
反向代理:大家访问百度,都是通过一个域名www.baidu.com/ ,但大家都是访问的一个服务器吗,其实不是,它的背后有很多台服务器,这时候反向代理就出现了,反向代理是代理服务器端的
负载均衡
因为代理很多服务器,服务器的大小也各不相同,我们希望更多的把请求转发到大的或者空服务器上,这时候就需要负载均衡了
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。
轮询
加权轮询
根据服务器大小设置权重,这样可以保证服务器性能最大化,哪怕是一台很小的服务器都能上线使用,节约成本
iphash
iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
动静分离
动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
Nginx安装
windows下Nginx安装
官网下载,下载稳定版本,解压即可,双击nginx.exe即可启动,或者进入目录使用cmd启动
检查Nginx是否启动成功
直接在浏览器地址栏输入网址 http://localhost:80 回车(因为默认配置问价,监听的是80端口),出现以下页面说明启动成功
Linux下Nginx安装
官网下载
解压后即可使用
进入目录,执行 configure 完成默认配置
然后执行make命令,手动安装Nginx,执行make install,安装完就可以查找到Nginx(安装成功)
进入目录usr/local/nginx/sbin/启动服务
cd /usr/local/nginx/sbin/./nginx
在这里注意,如果使用的自己电脑配置的linux虚拟机,记得关闭防火墙,或者开放80端口
如果使用的时阿里的ecs服务器,记得开放安全组80
防火墙的操作会在文末指出
启动成功后,输入公网地址,会出现nginx的界面,证明配置正确
Nginx的常用命令
(1)启动命令
在/usr/local/nginx/sbin 目录下执行 ./nginx
(2)关闭命令
在/usr/local/nginx/sbin 目录下执行 ./nginx -s stop
(3)重新加载命令
在/usr/local/nginx/sbin 目录下执行 ./nginx -s reload
Nginx的配置文件
1.nginx的配置文件位置
cd /usr/local/nginx/conf/nginx.conf
包含三部分内容
全局块:配置服务器整体运行的配置指令
比如worker_processes处理并发数的配置
2.events块:影响Nginx服务器与用户的网络连接
比如worker_connections1024;支持的最大连接数为1024
3.http
还包含两部分:
http全局块
server块
Nginx配置反向代理实例
实现效果(前提已经拥有备案好的域名),比如你的项目是8080端口,但是域名的默认地址访问的是80端口,要实现在浏览器中输入域名就可以访问你的项目。
准备工作:
在linux系统中安装tomcat,默认为8080端口
对外开放8080端口,如果是阿里云服务器,需要配置安全组。
firewall-cmd --add-port=8080/tcp --permanentfirewall-cmd-reload查看已经开放的端口
firewall-cmd --list-all操作完成后在windows中访问tomcat(输入你的公网地址:tomcat端口号)
效果图:
访问过程分析:
具体配置:
第一步:打开nginx配置文件(/usr/local/nginx/conf)nginx.conf
反向代理配置
第二步:最终测试
Nginx配置负载均衡实例
实现需求:在浏览器中输入项目地址,实现负载均衡效果,平均分配到8080和8081端口
准备工作:两个tomcat容器,一个8080,一个8081
准备工作完成之后,在Nginx配置文件中进行负载均衡配置
Nginx配置动静分离
提问:什么是动静分离??
通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires来缓存),我这里设置3d,表示在这3天之内访问这个URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。
准备工作:在linux中准备静态资源文件,用于进行访问
具体配置:
-
在nginx配置文件中配置:
-
在浏览器中测试访问