{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

Nginx到底能做什么?

jemygrawjemygraw 回答5 收藏1
问题描述:能全面说说Nginx到底能做什么吗?
收藏问题

5条回答

beanlam

beanlam

回答于2022-06-23 13:21

nginx可以作为web服务器、缓存服务器、HTTP代理服务器、负载均衡服务器。


什么是nginx

Nginx(发音为“ engine-x”)是一种开源软件,最初被设计为高性能Web服务器。今天,Nginx可以完成其他一些任务,包括缓存服务器,反向代理服务器,负载平衡器等等



web服务器

目前主流使用的web服务器软件,主要有apache、nginx、tomcat、iis等,在全球范围内来说,Apache是现有的最流行的Web服务器,但是在高流量网站中最流行的Web服务器确实nginx,在我国不管是大中小互联网公司,主流选择的也是nginx作为web服务器软件。一份来自Netcraft的调查中,发现Apache的使用率为31.54%,Nginx的使用率为26.20%。



HTTP代理服务器

HTTP代理,分两类:一种的正向代理,一种是反向代理。

  • 反向代理。就是真实服务器不直接访问,而是通过代理进行访问,代理服务器和真实服务器是在同一个网络环境。对于访问来说是无感的,代理服务器对于访问者来说就是提供服务的服务器。基于nginx的反向代理,可以实现分布式(不同子域名访问不同的服务后端节点)和负载均衡(相同的域名访问多个相同的后端节点)




  • 正向代理。与反向代理类似。不同的是正向代理是客户端的代理。对于服务端来说,代理就是一个访问者。网上寻找的HTTP代理就属于正向代理



反向代理和正向代理的区别:

正向代理:针对客户端而言,代理服务器代理客户端,转发请求,并将获得的内容返回给客户端。

反向代理:针对客户端而言,代理服务器就像是原始服务器,代理集群的web节点服务器返回结果。


负载均衡器

负载均衡也是Nginx常用的一个功能,基于nginx反向代理。负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。


简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。


Nginx目前支持自带3种负载均衡策略(轮询、加权轮询、IP哈希),还有2种常用的第三方策略(fair、url哈希)。




缓存服务器

nginx可以实现图片、css、js等静态资源文件的缓存,nginx作为缓存服务器时是搭配nginx作为反向代理服务器一起使用的。当客户端第一次通过nginx向后端资源服务器请求静态资源,响应给对应的客户端同时自身缓存一份,后续如果请求相同的资源,就不需要再次向后端服务器请求了,除非缓存被清理或者缓存过期。





结束语

nginx的几个功能很少单一使用,基本都是几个功能搭配混合在一起使用。做实际项目中,nginx一般作为七层负载均衡器,实现分布式架构和应用服务器高可用,还可以实现动静分离,同时缓存静态资源,减轻后端服务器负载。


由于nginx的模块化设计,通过第三方模块,还可以实现其他一些功能,以上都是nginx自带模块实现的,如果你还知道nginx可以实现哪些功能,欢迎在评论区留言!


文|技术猿小黄

图|来源于网络

我是技术猿小黄,很高兴为您回答,如果您喜欢我的回答,可以关注我,点个赞,谢谢!

评论0 赞同0
  •  加载中...
lauren_liuling

lauren_liuling

回答于2022-06-23 13:21

Nginx是一款高性能的HTTP和反向代理服务器,同时也支持邮件服务。因其内存占用小、高并发的特性使得在世界范围内使用广泛,像国内互联网大企业无一例外使用的就是Nginx,比如淘宝还基于Nginx开发了Tengine。

既然Nginx应用这么广泛,那它到底能干些啥呢?下面我列举一些场景来说明下Nginx的用途:

1、反向代理

在LNMP这种架构模式下,其实就用到了反向代理。因为Nginx它默认只支持静态资源的请求,比如说PHP脚本也不是由Nginx直接解析的,而是由Nginx反向代理(通过 proxy_pass 指令)到PHP-FPM去解析的

所以我们通常在Apache、Tomcat、IIS之前加上Nginx,由Nginx反向代理到后端服务器上。

2、负载均衡

当我们的站点访问量大时,为了缓解单一应用服务器的压力我们通常会扩容多台服务器,此时如何把流量分发给不同服务器呢?通过Nginx就可以实现负载均衡了,Nginx负载均衡策略也很多,主要有:RR(轮询)、weight(权重)、ip_hash(IP Hash)、fair(后端服务器响应时间)、url_hash(URL Hash)这几种

3、动静分离

Nginx本身只支持静态资源的处理,借助Nginx我们可以实现动静分离,即:将静态请求交给Nginx处理,将动态请求通过转发给后端服务器

4、Nginx扩展

通过Nginx扩展可以实现很多功能,如:

  • 图片在线裁剪;

  • 请求合并;

  • 资源压缩等。


以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!

评论0 赞同0
  •  加载中...
jay_tian

jay_tian

回答于2022-06-23 13:21

Nginx(发音同engine x)是一个高性能、跨平台的HTTP Server,也可以用作反向代理、负载均衡和HTTP缓存服务器。俄罗斯人Igor Sysoev(伊戈尔·赛索耶夫)在2004年开发的,Nginx是免费的开源软件,根据类BSD许可证的条款发布。目前全球约有50%的网站都是用Nginx做Web服务器。

Nginx的优点

1、开源免费

  • Nginx完全开源免费,可以轻松搭建HTTP服务。

  • 相对传统收费的负载均衡器F5,用Nginx搭建负载均衡服务成本比较低。

2、高性能

  • Nginx是基于C语言开发,在执行效率很高。

  • Nginx是基于Master/Worker进程架构,Master进程管理多个Worker进程,开启多个Worker进程并发处理请求,使用CPU亲和性,充分发挥多核CPU的性能。
  • 基于事件驱动处理大量并发请求,解决C10k问题。

3、占用资源少

  • Ngxin在设计和开发时对占用内存做了大量的优化,1w多个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存。

4、跨平台

  • Nginx可以在在Linux、MacOS、Windows等平台编译部署。

5、模块化扩展

  • Nginx是高度模块化设计,可以根据抽象的模块接口开发定制相应的模块,以满足业务需求,淘宝的Tengine就是基于Nginx开发定制的,淘宝开发很多有用的模块。

Nginx的用途

1、Web服务器

  • Nginx可以搭建Web服务器,由于在性能优于Apache,因此很多公司逐渐用Nginx替换Apache。

  • Nginx支持Lua,大牛章亦春基于Nginx与Lua开发高性能Web平台OpenResty,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

2、反向代理

  • 目前很多后端应用服务在部署时都是通过Nginx搭建反向代理,首先client端请求到Nginx的反向代理,然后再转发到后端应用服务上,这样可以很好保护后端应用服务。

3、负载均衡

  • 目前互联网用户成倍增长,单台服务不足以应对海量用户的请求,需要部署多台后端应用服务,因此需要负载均衡器将请求负载到不同后端应用服务上,实现分布式集群。以前都是硬负载均衡器F5,但是F5成本比较高,小公司很难承受起,再者F5功能比较固化,不够灵活,因此Nginx做软负载均衡器就比较流行。

  • 在一线互联网公司,例如BAT公司,他们都有统一接入服务,对互联网上的请求统一分发,这个统一接入服务一般都是用Nginx搭建的。

4、HTTP缓存服务

  • Nginx支持缓存,可以将缓存图片、js、css等,现在很多CDN厂商的CDN缓存都是用的Nginx缓存。

随着互联网的迅猛发展和互联网用户数量的成倍增长,互联网公司都需要应付海量并发请求,Nginx开源免费、高性能等特点会越来越受青睐。

评论0 赞同0
  •  加载中...
joyqi

joyqi

回答于2022-06-23 13:21

Nginx能做反向代理、负载均衡、HTTP服务器、正向代理和Web缓存等。

Nginx

Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。

Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。

常用功能

  • 反向代理,代理对象为服务端做代理,使客户端不需要感知服务端的存在,只需要访问代理服务器便可获得想要的结果。实现限流、负载均衡、动静分离等。



  • 负载均衡(Load Balance),是分布式系统中一个非常重要的概念。当访问的服务具有多个实例节点时,需要根据某种“均衡”的策略决定请求发往哪个节点,这个过程就是所谓的负载均衡。多在高并发情况下需要使用。其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,从而提高了数据的吞吐量。Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。
  • web缓存,Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。
  • 动静分离:让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高用户访问静态代码的速度,降低对后台应用访问。

如果解决了你的疑惑,请点点关注和评论,谢谢支持。

正春华枝俏,待秋实果茂,与君共勉。


评论0 赞同0
  •  加载中...
xuexiangjys

xuexiangjys

回答于2022-06-23 13:21

Nginx 概述

  • NGINX是一个免费、开源、高性能、轻量级的HTTP和反向代理服务器,也是一个电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。 Nginx 因为它的稳定性、丰富的模块库、灵活的配置和较低的资源消耗而闻名 。目前应该是几乎所有项目建设必备。

  • Nginx由内核和一系列模块组成,内核提供web服务的基本功能,如启用网络协议,创建运行环境,接收和分配客户端请求,处理模块之间的交互。Nginx的各种功能和操作都由模块来实现。Nginx的模块从结构上分为核心模块、基础模块和第三方模块。

    核心模块: HTTP模块、EVENT模块和MAIL模块

    基础模块: HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块

    第三方模块: HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块及用户自己开发的模块

    这样的设计使Nginx方便开发和扩展,也正因此才使得Nginx功能如此强大。Nginx的模块默认编译进nginx中,如果需要增加或删除模块,需要重新编译Nginx,这一点不如Apache的动态加载模块方便。如果有需要动态加载模块,可以使用由淘宝网发起的web服务器Tengine,在nginx的基础上增加了很多高级特性,完全兼容Nginx,已被国内很多网站采用。

  • Nginx有很多扩展版本

    • 开源版 nginx.org
    • 商业版 NGINX Plus
    • 淘宝网发起的Web服务器 Tengine
    • 基于Nginx和Lua的Web平台 OpenResty


Nginx 作为 web 服务器

Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务,常常以B/S(Browser/Server)方式提供服务。

  • 应用层使用HTTP协议。
  • HTML文档格式。
  • 浏览器统一资源定位器(URL)。

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等,但是不支持 java。Java 程序一般都通过与 Tomcat 配合完成。

作为一名Java猿帅,肯定要理解下Nginx和Tomcat的区别了:

Nginx、Apache和Tomcat

  • Nginx—— 由俄罗斯程序员Igor Sysoev所开发的轻量级、高并发HTTP服务器;

  • Apache HTTP Server Project,一个Apache基金会下的HTTP服务项目,和Nginx功能类似;

  • Apache Tomcat ,则是Apache基金会下的另外一个项目,是一个Application Server,更准确的说是一个

    servlet应用容器,与Apache HTTP Server和Nginx相比,Tomcat能够动态的生成资源并返回到客户端;

Apache HTTP Server和Nginx本身不支持生成动态页面,但它们可以通过其他模块来支持(例如通过Shell、PHP、Python脚本程序来动态生成内容);

一个 HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。通过 CGI 技术,也可以将处理过的内容通过 HTTP Server 分发,但是一个 HTTP Server 始终只是把服务器上的文件如实的通过 HTTP 协议传输给客户端。

而应用服务器,则是一个应用执行的容器。它首先需要支持开发语言的运行(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。

正向代理

正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

正向代理“代理”的是客户端

比如在家办公期间,需要连公司的 VPN 办公,这个就是所谓的”正向代理“。还有我们访问 google也是。

反向代理 与 负载均衡

反向代理正好与正向代理相反,反向代理是指以代理服务器来接收Internet上的连接请求,然后将请求转发到内部网络上的服务器,并将服务器上得到的结果返回给客户端,此时代理服务器对外表现就是一个服务器,客户端对代理是无感知的。

反向代理“代理”的是服务端

再比如,你想本本分分的在“优酷”上看个“爱情片”,youku.com会把你的请求分发到存放片片的那台机器上,这个就是所谓的”反向代理“。

为什么使用反向代理

  • 保护和隐藏原始资源服务器
  • 加密和SSL加速
  • 通过缓存静态资源,加速Web请求
  • 实现负载均衡

负载均衡地址重定向

Nginx 的Rewrite主要的功能就是实现URL重写

比如输入360.com 跳转到了360.cn,baidu.cn跳转到了baidu.com

动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。 这里指的就是让动态程序(Java、PHP)去访问应用服务器,让缓存、图片、JS、CSS等去访问Nginx。

2. Nginx 安装

  1. 下载Nginx

  2. 安装需要编译的插件

  • 用于编译c、c++代码的GCC;

  • 用c语言编写的正则表达式函数库Pcre(使用rewrite模块);

  • 用于数据压缩的函式库的Zlib;

  • 安全套接字层密码库OpenSSL(启用SSL支持)

  • 解压、配置(Nginx支持各种配置选项,文末一一列出 Nginx配置选项 )、编译、安装nginx

  • 启动、重启、关闭

  • 验证(浏览器输入ip)

  • 评论0 赞同0
    •  加载中...

    相关问题

    最新活动

    您已邀请0人回答 查看邀请

    我的邀请列表

    • 擅长该话题
    • 回答过该话题
    • 我关注的人
    向帮助了您的网友说句感谢的话吧!
    付费偷看金额在0.1-10元之间
    <