随着互联网时代的发展,使用电脑、手机及其他电子设备上网是日常生活中最常见的活动,那么这个上网过程是怎么实现的呢?主要是靠代理服务器。代理是在服务器和客户端之间假设的一层服务器,代理将接收的客户端请求转发给服务器,然后将服务端的响应转发给客户端。
Nginx是一款轻量级的Web服务器、反向代理服务器。基于REST架构风格,以统一资源描述符URI或统一资源定位符URL作为沟通依据,通过HTTP协议提供各种网络服务。由于它内存占用少,启动速度快,高并发能力强等优点,在互联网项目中广泛应用。
1整体介绍
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
1.1反向代理
反向代理(ReverseProxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
如图,保存配置文件后启动Nginx,这样当我们访问localhost的时候,就相当于访问localhost:8080。
1.2负载均衡
负载均衡,其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,从而提高数据的吞吐量,多在高并发情况下使用。可使用的负载均衡策略有:轮询(默认)、权重、ip_hash、url_hash(第三方)、fair(第三方)。
如图,保存配置文件后启动Nginx,这样当我们访问localhost的时候,就相当于访问localhost:8080或者localhost:8081。因为Nginx会自动判断服务器的状态,如果服务器处于不能访问(服务器挂了),就不会跳转到这台服务器,所以也避免某台服务器挂了影响使用。
1.3动静分离
Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现,首先了解Nginx做静态资源服务器。
如图,这样如果访问http://localhost就会默认访问到E盘wwwroot目录下面的index.html,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。
动静分离,常用于前后端分离,Nginx提供的动静分离是指把动态请求和静态请求分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。Nginx可以根据配置对不同的请求做不同转发,这是动态分离的基础。静态请求对应的静态资源可以直接放在Nginx上做缓冲,更好的做法是放在相应的缓冲服务器上。动态请求由相应的后端服务器处理。
2安装配置
本次以Nginx1.14.2版本为例,在linux服务器环境上进行安装部署,具体操作如下:
2.1环境准备
安装make:
安装g++:
安装pcre和pcre-devel:
安装zlibzlib提供了很多压缩和解方式,nginx需要zlib对http进行gzip:
安装opensslopenssl是一个安全套接字层密码库,nginx要支持https,需要使用openssl:
2.2安装配置
下载nginx:
进入文件夹:
解压:
打开到文件路径:
编译文件:
安装:
更改配置文文件:
方式二:也可以将nginx.conf文件直接通过xftp上传到该位置,注意将原有文件进行备份:
让配置立即生效:
2.3执行启动
进入sbin目录:
启动nginx:
停止命令:
3高可用配置
Keepalived是一个高可用解决方案,主要用来防止服务器单点发生故障,可以通过和Nginx配合来实现Web服务的高可用。
3.1环境准备
通过以下命令安装Keepalived:
设置为系统服务:
关闭SElinux、配置keepalived相关配置:
进入后如下修改:
修改完成后,让配置立即生效:
修改keepalived配置,主从机不同的地方通过黄色高亮显示:
备份:
cp/etc/keepalived/keepalived.conf/etc/keepalived/keepalived.conf.bak:
3.2脚本配置
配置chk_nginx.sh文件:
添加如下内容:
脚本进行授权:
修改防火墙,添加对虚拟IP的监听:
3.3启停服务
开启keepalived服务:
停止keepalived服务:
4心得体会
通过撰写本篇文档,意识到在实际项目工作过程中随手记录的重要性。在记录后,也需要相应的把记录内容整理到工作文档内,不断迭代完善自身能力。现从知识收获、意识形态、工作总结方面总结如下。
4.1知识收获
通过学习Nginx,了解了其很多特点:
1.跨平台:可以在大多数UnixlikeOS编译运行,而且也有Windows的移植版本。
2.配置简单:风格跟程序开发一样,容易上手。
3.非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型)
4.事件驱动:通信机制采用epoll模型,支持更大的并发连接。
5.master/worker结构:一个master进程,生成一个或多个worker进程。
6.内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx进程才消耗150M内存(15M*10=150M)
7.成本低廉:开源软件,可以免费使用。
8.内置的健康检查功能:如果NginxProxy后端的某台Web服务器宕机了,不会影响前端访问。
9.节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头。
10.稳定性高:用于反向代理,宕机的概率微乎其微。
4.2意识形态
伴随着自身专业知识的不断积累,对知识的认知也不断地提高。回过头来看自己之前记录的工作文档,会发现有很多漏点存在,这时就需要再次完善工作文档了。在完善过程中,可以把初学时的理解和当下做一个比较,了解当时的自己有哪些不足,思维逻辑有了怎样改善。技术、认知在不断地更新,工作文档也在不断地更新。在这个不断迭代更新的过程中,使自己的知识点不知不觉连成了线。
4.3工作总结
在工作学习过程中通过不断地记录文档,可以从多方面提升自身的综合能力。一方面可以感觉得到自己的逻辑思维有了显著提升,尤其是在记录教程类的文档时,例如某些系统的使用手册。可以重新系统梳理技术要点。通过系统梳理,过程中不断提高自己的逻辑思维。一方面在有了一个清晰的逻辑思维后,对自己的技术能力和水平都有了系统的提升。同时撰写文档也是一个总结、反思的过程,能够帮助个人促进深入思考的能力。
通过实际参与项目,在服务器上安装配置Nginx,不仅能提高对Nginx安装部署的经验,也加深了对Nginx知识的理解。后续也会继续整理相关的技术文档,迭代提升自身的工作能力,为后续的职业生涯奠定扎实的基础。