一文快速搞懂Nginx —— Nginx 详解
一文快速搞懂Nginx —— Nginx 详解一文快速搞懂Nginx一、nginx 简介二、正向 / 反向代理2.1 正向代理2.2 反向代理三、负载均衡四、动静分离五、web 缓存六、Nginx 安装6.1 windows版本下的安装6.2 Linux版本下的安装七、常用命令八、为什么选择Nginx一、nginx 简介Nginx同Apache一样都是一种Web 服务器。基于REST架构风格以统一资源描述符Uniform Resources IdentifierURI或者统一资源定位符Uniform Resources LocatorURL作为沟通依据通过HTTP 协议提供各种网络服务。Nginx是一款轻量级的Web服务器、反向代理服务器由于它的内存占用少启动极快高并发能力强在互联网项目中广泛应用。Nginx(engine x) 是一个高性能的HTTP和反向代理web服务器同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点俄文Рамблер开发的第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日nginx 1.0.4发布。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件IMAP/POP3代理服务器在BSD-like 协议下发行。其特点是占有内存少并发能力强事实上nginx的并发能力在同类型的网页服务器中表现较好中国大陆使用nginx网站用户有百度、京东、新浪、网易、腾讯、淘宝等。Nginx是高性能的HTTP和反向代理的web服务器处理高并发能力是十分强大的能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。Nginx支持热部署启动简单可以做到7*24不间断运行。几个月都不需要重新启动。总而言之Nginx是一个高性能、灵活和可扩展的Web服务器和代理服务器适用于各种场景包括静态文件服务、反向代理、负载均衡和动态内容处理等。二、正向 / 反向代理经常听人说到一些术语如反向代理那么什么是反向代理什么又是正向代理呢2.1 正向代理由于防火墙的原因我们并不能直接访问谷歌、推特看GitHub等等那么我们可以借助VPN来实现这就是一个简单的正向代理的例子。这里你能够发现正向代理“代理” 的是客户端而且客户端是知道目标的而目标是不知道客户端是通过VPN访问的。2.2 反向代理当我们在外网访问百度的时候其实会进行一个转发代理到内网去这就是所谓的反向代理Reverse Proxy即反向代理“代理” 的是服务器端而且这一个过程对于客户端而言是透明的。再比如我们访问淘宝的时候淘宝内部肯定不是只有一台服务器它的内部有很多台服务器那我们进行访问的时候因为服务器中间session不共享那我们是不是在服务器之间访问需要频繁登录那这个时候淘宝搭建一个过渡服务器对我们是没有任何影响的我们是登录一次但是访问所有这种情况就是反向代理。对我们来说客户端对代理是无感知的客户端不需要任何配置就可以访问我们只需要把请求发送给反向代理服务器由反向代理服务器去选择目标服务器获取数据后再返回给客户端此时反向代理服务器和目标服务器对外就是一个服务器暴露的是代理服务器地址隐藏了真实服务器的地址。三、负载均衡单个服务器解决不了我们增加服务器的数量然后将请求分发到各个服务器上将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上将负载均衡分发到不同的服务器也就是我们所说的负载均衡。负载均衡Load Balance其意思就是分摊到多个操作单元上进行执行例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等从而共同完成工作任务。简单来说就是现有的请求使服务器压力太大无法承受所有我们需要搭建一个服务器集群去分担原先一个服务器所承受的压力那现在我们有ABCD等等多台服务器我们需要把请求分给这些服务器但是服务器可能大小也有自己的不同所以怎么分如何分配更好又是一个问题。Nginx给出来三种关于负载均衡的方式(1)轮询法默认方法每个请求按时间顺序逐一分配到不同的后端服务器如果后端服务器down掉能自动剔除。适合服务器配置相当无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。(2)weight权重模式加权轮询指定轮询几率weight和访问比率成正比用于后端服务器性能不均的情况。这种方式比较灵活当后端服务器性能存在差异的时候通过配置权重可以让服务器的性能得到充分发挥有效利用资源。weight和访问比率成正比用于后端服务器性能不均的情况。权重越高在被访问的概率越大上述方式存在一个问题就是说在负载均衡系统中假如用户在某台服务器上登录了那么该用户第二次请求的时候因为我们是负载均衡系统每次请求都会重新定位到服务器集群中的某一个那么已经登录某一个服务器的用户再重新定位到另一个服务器其登录信息将会丢失这样显然是不妥的。(3)ip_hash我们可以采用ip_hash指令解决这个问题如果客户已经访问了某个服务器当用户再次访问时会将该请求通过哈希算法自动定位到该服务器。每个请求按访问ip的hash结果分配这样每个访客固定访问一个后端服务器可以解决session的问题。四、动静分离动静分离在我们的软件开发中有些请求是需要后台处理的有些请求是不需要经过后台处理的如css、html、jpg、js等文件这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开动态资源做好了拆分以后我们就可以根据静态资源的特点将其做缓存操作以提高资源的响应速度。Nginx的静态处理能力很强但是动态处理能力不足因此在企业中常用动静分离技术。动静分离技术其实是采用代理的方式在server{}段中加入带正则匹配的location来指定匹配项;针对PHP的动静分离静态页面交给Nginx处理动态页面交给PHP-FPM模块或Apache处理。在Nginx的配置中是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式目前通过使用Nginx大大提高了网站的响应速度优化了用户体验让网站的健壮性更上一层楼五、web 缓存缓存是Nginx提供的可以加快访问速度的机制说白了在配置上就是一个开启同时指定目录让缓存可以存储到磁盘上。具体配置大家可以参考Nginx官方文档这里就不在展开了。六、Nginx 安装Nginx的跨平台的因此在任何平台都是可以下载的官网 下载。6.1 windows版本下的安装1首先去官网下载最新的稳定版本下载后解压打开你会看见一下目录。2启动启动方式一双击nginx.exe双击后你能看见一个小黑窗口一闪而过。启动方式二打开cmd命令窗口切换到nginx解压目录下输入命令nginx.exe回车即可注意如果安装目录是中文的情况打开exe文件时会报错。3检查是否安装成功打开浏览器浏览器地址栏输入网址http://localhost:80回车出现以下页面说明启动成功另外说明配置监听nginx的配置文件是conf目录下的nginx.conf默认配置的nginx监听的端口为80如果80端口被占用可以修改为未被占用的端口即可。当我们修改了nginx的配置文件nginx.conf时不需要关闭nginx后重新启动nginx只需要执行命令nginx -s reload即可让改动生效4、关闭Nginx如果使用cmd命令窗口启动nginx 关闭cmd窗口是不能结束nginx进程的可使用两种方法关闭nginx方法一Nginx的安装包目录下。否则无法找到Nginx输入nginx命令:nginx -s stop(快速停止nginx)或输入nginx -s quit(完整有序的停止nginx)这两个命令的区别在于nginx -s stop是快速停止Nginx而nginx -s quit是有序的停止Nginx前者可能会导致数据没有完全保存方法二使用taskkill /f /t /im nginx.exetaskkill 是用来终止进程的/f 是强制终止/t终止指定的进程和任何由此启动的子进程/im指定的进程名称 .这种方法可以直接在cmd命令面板上使用当第一种方法无效时可以尝试使用此方法前第一种方法适用于大部分版本的Nginx但是个别版本的可能不实用使用taskkill就可解决。6.2 Linux版本下的安装1下载安装包下载完毕上传到Linux服务器上 我上传到了opt/apps/目录下2解压span stylecolor:#000000span stylebackground-color:#fafafacode classlanguage-powershelltar span stylecolor:#a67f59-/spanzxvf nginx-1span stylecolor:#999999./span24span stylecolor:#999999./span0span stylecolor:#999999./spantarspan stylecolor:#999999./spangz /code/span/span1进入nginx-1.24.0目录3配置span stylecolor:#000000span stylebackground-color:#fafafacode classlanguage-powershellspan stylecolor:#708090# 依次输入/span span stylecolor:#999999./spanspan stylecolor:#a67f59//spanconfigure make make install /code/span/span1234查找安装路径whereis nginx4启动进入目录/usr/local/nginx/sbin/ 再输入./nginx启动启动成功访问服务器ip:80注意如何连接不上检查阿里云安全组是否开放端口或者服务器防火墙是否开放端口相关命令span stylecolor:#000000span stylebackground-color:#fafafacode classlanguage-powershellspan stylecolor:#708090# 开启service firewalld start/span span stylecolor:#708090# 重启service firewalld restart/span span stylecolor:#708090# 关闭service firewalld stop/span span stylecolor:#708090# 查看防火墙规则firewall-cmd --list-all/span span stylecolor:#708090# 查询端口是否开放firewall-cmd --query-port8080/tcp/span span stylecolor:#708090# 开放80端口firewall-cmd --permanent --add-port80/tcp/span span stylecolor:#708090# 移除端口firewall-cmd --permanent --remove-port8080/tcp#重启防火墙(修改配置后要重启防火墙)firewall-cmd --reload/span span stylecolor:#708090# 参数解释1、firwall-cmd是Linux提供的操作firewall的一个工具2、--permanent表示设置为持久3、--add-port标识添加的端口/span /code/span/span12345678七、常用命令span stylecolor:#000000span stylebackground-color:#fafafacode classlanguage-powershellcd span stylecolor:#a67f59//spanusr/local/nginx/sbin/ span stylecolor:#999999./spanspan stylecolor:#a67f59//spannginx span stylecolor:#708090# 启动/span span stylecolor:#708090# 快速关闭Nginx可能不保存相关信息并迅速终止web服务/span nginx span stylecolor:#a67f59-/spans stop span stylecolor:#708090# 平稳关闭Nginx保存相关信息有安排的结束web服务/span nginx span stylecolor:#a67f59-/spans quit span stylecolor:#708090# 因改变了Nginx相关配置需要重新加载配置而重载/span nginx span stylecolor:#a67f59-/spans reload span stylecolor:#708090# 重新打开日志文件/span nginx span stylecolor:#a67f59-/spans reopen span stylecolor:#708090# 为 Nginx 指定一个配置文件来代替缺省的/span nginx span stylecolor:#a67f59-/spanc filename span stylecolor:#708090# 不运行而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性并尝试打开配置文件中所引用到的文件/span nginx span stylecolor:#a67f59-/spant span stylecolor:#708090# 显示 nginx 的版本/span nginx span stylecolor:#a67f59-/spanv span stylecolor:#708090# 显示 nginx 的版本编译器版本和配置参数/span nginx span stylecolor:#a67f59-/spanV span stylecolor:#708090# 格式换显示 nginx 配置参数/span 21 nginx span stylecolor:#a67f59-/spanV span stylecolor:#999999|/span xargs span stylecolor:#a67f59-/spann1 21 nginx span stylecolor:#a67f59-/spanV span stylecolor:#999999|/span xargs span stylecolor:#a67f59-/spann1 span stylecolor:#999999|/span grep lua /code/span/span123456789101112131415161718192021222324252627282930八、为什么选择NginxNginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器同时也是一个IMAP、POP3、SMTP代理服务器Nginx可以作为一个HTTP服务器进行网站的发布处理另外Nginx可以作为反向代理进行负载均衡的实现。在Nginx网站上其功能包括HTTP和HTTPSTLS / SSL / SNI超快速的Web服务器用于静态内容FastCGIWSGISCGI用于动态内容具有负载平衡和缓存功能的加速Web代理不间断实时二进制升级和配置压缩和内容过滤器虚拟主机FLV和MP4的媒体流带宽和连接策略全面的访问控制自定义日志嵌入式脚本带有TLS的SMTP / IMAP / POP3的邮件代理逻辑灵活可扩展的配置在LinuxFreeBSDMac OS XSolaris和Windows上运行Nginx有如下优势IO多路复用epollIO复用如何理解呢举个例子吧有A、B、C三个老师他们都遇到一个难题要帮助一个班级的学生解决课堂作业。老师A采用从第一排开始一个学生一个学生轮流解答的方式去回答问题老师A浪费了很多时间并且有的学生作业还没有完成呢老师就来了反反复复效率极慢。老师B是一个忍者他发现老师A的方法行不通于是他使用了影分身术分身出好几个自己同一时间去帮好几个同学回答问题最后还没回答完老师B消耗光了能量累倒了。老师C比较精明他告诉学生谁完成了作业举手有举手的同学他才去指导问题他让学生主动发声分开了“并发”。这个老师C就是Nginx。轻量级功能模块少- Nginx仅保留了HTTP需要的模块其他都用插件的方式后天添加代码模块化- 更适合二次开发如阿里巴巴TengineCPU亲和把CPU核心和Nginx工作进程绑定把每个worker进程固定在一个CPU上执行减少切换CPU的cache miss从而提高性能。仅供学习参考如有不足欢迎指正。《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取g.csdnimg.cn/direct/5458f21c6efa4e739621ffb5d4309b20.jpeg#pic_center)面试真题/经验以上资料如何领取