【Linux】Nginx 简介 (一)

一、Nginx 介绍

Nginx是一款使用c语言开发的高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,能够支持高达 50000 个并发连接数的响应。

二、为什么选择Nginx

Nginx 是一个很牛的高性能Web和反向代理服务器, 它具有有很多非常优越的特性:

  • 高并发量:根据官方给出的数据,能够支持高达 50,000 个并发连接数的响应。原因,主要是 Nginx 使用了最新的 epoll(Linux 2.6 内核)和 kqueue(freeBSD)网路 I/O 模型,而 Apache 使用的是传统的 Select 模型,其比较稳定的 Prefork 模式为多进程模式,需要经常派生子进程,所以消耗的 CPU 等服务器资源,要比 Nginx 高很多。

  • 内存消耗少:处理静态文件,同样起 web 服务,比 apache 占用更少的内存及资源,所以它是轻量级的。

  • 简单稳定:配置简单,基本在一个 conf 文件中配置,性能比较稳定,可以 7*24 小时长时间不间断运行。

  • 模块化程度高:Nginx 是高度模块化的设计,编写模块相对简单,包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter,支持 SSL 和 TLSSNI。

  • 支持 Rwrite 重写规则:能够根据域名、URL 的不同, 将 HTTP 请求分发到不同的后端服务器群组。

  • 低成本:Nginx 可以做高并发的负载均衡,且 Nginx 是开源免费的,如果使用 F5 等硬件来做负载均衡,硬件成本比较高。购买 F5BIG-IP、NetScaler 等硬件负载均衡交换机,需要十多万到几十万人民币,而 Nginx 为开源软件,采用的是 2-clause BSD-like 协议,可以免费试用,并且可用于商业用途。BSD 开源协议是一个给使用者很大自由的协议,协议指出可以自由使用、修改源代码、也可以将修改后的代码作为开源或专用软件再发布。

  • 支持多系统:Nginx 代码完全用 C 语言 从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX 以及 Microsoft Windows,由于 Nginx 是免费开源的,可以在各系统上编译并使用

  • 配置文件非常简单:网络和程序一样通俗易懂,即使,非专用系统管理员也能看懂。

  • 内置的健康检查功能:如果 NginxProxy 后端的某台 Web 服务器宕机了,不会影响前端的访问。

  • 节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。

  • 支持热部署:Nginx 支持热部署,它的自动特别容易,并且,几乎可以 7 天 * 24 小时不间断的运行,即使,运行数个月也不需要重新启动,还能够在不间断服务的情况下,对软件版本进行升级。

三、Nginx 缺点
  • 动态处理差:nginx 处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用 nginx 作为反向代理抗住压力,apache 作为后端处理动态请求
  • rewrite 弱:虽然 nginx 支持 rewrite 功能,但是相比于 Apache 来说,Apache 比 nginx 的 rewrite 强大。
  • Nginx 仅能支持 http、https 和 Email 协议,这样就在适用范围上面小些,这个是它的缺点。
  • 对后端服务器的健康检查,只支持通过端口来检测,不支持通过 url 来检测。
  • 不支持 Session 的直接保持,但能通过 ip_hash 来解决。
四、Nginx与Apache区别

优点:

1. 轻量级,采用 C 语言 进行编写,同样的 web 服务,会占用更少的内存及资源。

2. 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,多个连接对应一个进程,负载能力比 apache 高很多,而 apache 则是同步多进程模型,只能一个连接对应一个进程,当压力过大时,它是会被阻塞型的。 在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。

3.设计高度模块化,编写模块相对简单。

4.配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃。

5.一般用于处理静态文件,静态处理性能比 apache 高三倍以上。

6.作为负载均衡服务器,支持 7 层负载均衡。

7.本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器。

8.nginx 启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,支持热部署,比如:实现不间断服务的情况下进行软件版本的升级与版本的回退。

9.社区活跃,各种高性能模块出品迅速。

缺点:
1.apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache。
2.apache 发展到现在,模块超多,基本想到的都可以找到。
3.apache 更为成熟,少 bug ,nginx 的 bug 相对较多。
4.apache 超稳定,Nginx 一个进程死掉时,会影响到多个用户的使用,稳定性差。
5.apache 对 PHP 支持比较简单,nginx 需要配合其他后端用。
6.apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。
7.apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区。

Nginx与Apache区别总结

  • Apache 是同步多进程模型,一个连接对应一个进程,而 Nginx 是异步的,多个连接(万级别)可以对应一个进程。
五、Nginx与LVS区别

1.工作在网络的 7 层之上,可以针对 http 应用做一些分流的策略,比如针对域名、目录结构。它的正则规则比HAProxy 更为强大和灵活,这也是它目前广泛流行的主要原因之一。Nginx 单凭这点可利用的场合就远多于 LVS 了。

2.Nginx 对网络稳定性的依赖非常小,理论上能 ping 通就能进行负载功能,这个也是它的优势之一,相反 LVS 对网络稳定性依赖比较大。

3.Nginx 安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS 的配置、测试就要花比较长的时间了,LVS 对网络依赖比较大。

4.可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比 LVS 相对小些。

5.Nginx 可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持 url 来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx 会把上传切到另一台服务器重新处理,而 LVS 就直接断掉了。如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。

6.Nginx 不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的 Web 应用服务器。LNMP 也是近几年非常流行的 web 架构,在高流量的环境中稳定性也很好。

7.Nginx 现在作为 Web 反向加速缓存越来越成熟了,速度比传统的 Squid 服务器更快,可考虑用其作为反向代理加速器。

8.Nginx 可作为中层反向代理使用,这一层面 Nginx 基本上无对手,唯一可以对比 Nginx 的就只有 lighttpd 了。

9.不过 lighttpd 目前还没有做到 Nginx 完全的功能,配置也不那么清晰易读,社区资料也远远没 Nginx 活跃。

10.Nginx 也可作为静态网页和图片服务器,这方面的性能也无对手。还有 Nginx 社区非常活跃,第三方模块也很多

六、Nginx与Apache选择

Apache:
1.apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache
2.apache 发展到现在,模块超多,基本想到的都可以找到
3.apache 更为成熟,少 bug ,nginx 的 bug 相对较多
4.apache 超稳定
5.apache 对 PHP 支持比较简单,nginx 需要配合其他后端用
6.apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。
7.apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区

Nginx:
1.轻量级,采用 C 语言 进行编写,同样的 web 服务,会占用更少的内存及资源 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。
2.nginx 处理静态文件好,静态处理性能比 apache 高三倍以上
3.nginx 的设计高度模块化,编写模块相对简单
4.nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃 ,nginx 作为负载均衡服务器,支持 7 层负载均衡 nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器
8.启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级
9.社区活跃,各种高性能模块出品迅速

Nginx和Apache选择总结
一般来说,需要性能的 web 服务,用 nginx 。如果不需要性能只求稳定,更考虑 apache 。更为通用的方案是,前端 nginx 抗并发,后端 apache 集群,配合起来会更好。

七、Nginx常用使用场景

Nginx 的常用使用场景包括 HTTP 服务器、静态服务器、反向代理、负载均衡、动静分离、统一访问入口、解决浏览器跨域问题和行为分析等。

1.HTTP服务器
Nginx 本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用 Nginx 来做服务器,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。

2.反向代理
反向代理应该是 Nginx 使用最多的功能了,反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。反向代理通过proxy_pass 指令来实现。

3.负载均衡
负载均衡也是 Nginx 常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如 Web 服务器、FTP 服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
简单而言就是当有 2 台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而 Nginx 目前支持自带 3 种负载均衡策略,还有 2 种常用的第三方策略。
负载均衡通过 upstream 指令来实现。

4.动静分离
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

5.统一访问入口
多套业务系统需使用同一个 ip 或者域名进行访问,以不同后缀进行区分,需要一台 NGINX 服务器做统一的访问入口。

使用反向代理功能,将所有 NGINX 服务器作为外网或内网用户统一的访问入口,然后根据设置的 localtion 规则匹配不同的后缀转发至不同的业务服务器。通常和上一个反向代理场景结合使用实现使用一个域名来访问多个业务系统,同时甚至还可以实现统一的 https 访问,实现方式为在 NGINX 服务器上配置证书,后端所有业务服务器无需每台额外配置证书即可实现 https 访问。

6.解决浏览器跨域问题
跨域是指 a 页面想获取 b 页面资源,如果 a、b 页面的协议、域名、端口、子域名不同,或是 a 页面为 ip 地址,b 页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。跨域有很多解决办法,NGINX 只是解决办法其中之一,适用于不改目标服务器配置,又能提供搭建一个中转 NGXIN 服务器的场景。

使用 NGIXN 反向代理功能,需实现访问主程序业务服务 A 中首页桌面嵌套业务服务 B 的相关页面,使用 NGINX 作为统一入口,当配套到业务服务 A 嵌套页面 url 后缀时转发至业务服务 B。相当于 NGINX 服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。

7.行为分析
需统计整个系统访问的浏览器信息、IP、地理位置、操作系统等信息作为项目上大数据展示的初始数据来源。

通常搭配反向代理、统一访问入口的场景,使用 NGINX 的日志及地理位置库插件来采集信息,然后由 eCloud 平台进行初步分析后供大数据平台采集和展示。主流发布的一键部署包已包含地理位置库插件。
8.Nginx常用使用场景总结
Nginx 的常用使用场景包括 HTTP 服务器、静态服务器、反向代理、负载均衡、动静分离、统一访问入口、解决浏览器跨域问题和行为分析等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值