前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Nginx系列】(一)Nginx基础概念

【Nginx系列】(一)Nginx基础概念

作者头像
程序员朱永胜
发布2023-09-21 08:38:03
3790
发布2023-09-21 08:38:03
举报
文章被收录于专栏:朱永胜的私房菜

Nginx的三个主要应用场景

alt
alt

静态资源服务通过本地文件系统提供服务

静态资源服务是指通过本地文件系统提供静态文件(如HTML、CSS、JavaScript、图片等)的服务。这种服务通常由Web服务器来提供,比如Nginx、Apache等。

静态资源服务的实现原理很简单,当客户端请求静态资源时,服务器会根据请求的URL路径找到对应的文件,并将文件内容返回给客户端。这个过程不需要进行动态处理,因此可以提高服务的性能和响应速度。

在Nginx中配置静态资源服务非常简单,只需要在配置文件中指定静态资源的根目录即可。例如,以下是一个简单的Nginx配置示例:

代码语言:javascript
复制
server {
    listen 80;
    server_name example.com;

    root /path/to/static/files;

    location / {
        try_files $uri $uri/ =404;
    }
}

上述配置中,root指定了静态资源的根目录,location /表示所有请求都会被该配置块处理。try_files 指令用于尝试查找请求的文件,如果找到则返回文件内容,否则返回404错误。

反向代理服务

反向代理是一种服务器架构模式,它将客户端的请求转发给后端的多个服务器进行处理,并将处理结果返回给客户端。与正向代理不同,反向代理是对服务器端的资源进行代理,客户端并不知道请求的资源实际上是由哪个服务器提供的。

反向代理的主要作用是负载均衡和提高系统的可靠性和安全性。通过将请求分发给多个后端服务器,可以均衡服务器的负载,提高系统的并发处理能力。同时,反向代理还可以隐藏后端服务器的真实IP地址,增加系统的安全性。

Nginx是一款常用的反向代理服务器,它具有高性能、高并发处理能力和灵活的配置选项。在Nginx中配置反向代理非常简单,只需要在配置文件中指定后端服务器的地址即可。以下是一个简单的Nginx反向代理配置示例:

代码语言:javascript
复制
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_server;
    }
}

上述配置中,proxy_pass指令用于指定后端服务器的地址,可以是IP地址或域名。当客户端发送请求时,Nginx会将请求转发给后端服务器,并将后端服务器的响应返回给客户端。

缓存

Nginx具有强大的性能缓存功能,可以有效提高网站的访问速度和性能。Nginx的性能缓存主要包括两个方面:静态文件缓存和反向代理缓存。

静态文件缓存是指将静态文件(如HTML、CSS、JavaScript、图片等)缓存到内存中,当客户端请求这些文件时,直接从缓存中返回,而不需要再次读取文件。这样可以大大减少文件的读取时间,提高网站的响应速度。

反向代理缓存是指将后端服务器的响应结果缓存到内存中,当客户端发送相同的请求时,直接从缓存中返回响应结果,而不需要再次请求后端服务器。这样可以减少对后端服务器的访问压力,提高系统的并发处理能力。

Nginx的缓存配置非常灵活,可以根据需要进行配置。可以设置缓存的有效期、缓存的大小、缓存的存储位置等。以下是一个简单的Nginx缓存配置示例:

代码语言:javascript
复制
http {
    proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_cache my_cache;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
            proxy_cache_bypass $http_cache_control;
            proxy_no_cache $http_pragma $http_authorization;
            proxy_pass http://backend_server;
        }
    }
}

上述配置中,proxy_cache_path指令用于指定缓存的存储位置和大小。proxy_cache指令用于启用缓存,proxy_cache_valid 指令用于设置缓存的有效期。proxy_cache_use_stale指令用于指定在后端服务器不可用时是否使用过期的缓存。proxy_cache_bypassproxy_no_cache指令用于控制缓存的使用条件。

负载均衡

负载均衡是指将客户端的请求分发给多个服务器进行处理,以达到均衡服务器负载、提高系统性能和可靠性的目的。负载均衡可以通过多种方式实现,包括硬件负载均衡器、软件负载均衡器和DNS负载均衡等。

Nginx是一款常用的软件负载均衡器,它具有高性能、高并发处理能力和灵活的配置选项。在Nginx中配置负载均衡非常简单,只需要在配置文件中指定后端服务器的地址即可。以下是一个简单的Nginx负载均衡配置示例:

代码语言:javascript
复制
http {
    upstream backend_servers {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend_servers;
        }
    }
}

上述配置中,upstream指令用于定义后端服务器的地址,可以是IP地址或域名。proxy_pass 指令用于将请求转发给后端服务器。当客户端发送请求时,Nginx会根据一定的负载均衡算法选择一个后端服务器进行处理。

Nginx支持多种负载均衡算法,包括轮询、IP哈希、最少连接数等。可以根据实际需求选择合适的负载均衡算法。

API服务

API(Application Programming Interface)服务是指通过接口提供的一组功能和服务,用于与其他软件系统进行交互和通信。API服务通常用于实现不同系统之间的数据传输和功能调用。

API服务可以通过多种方式实现,包括RESTful API、SOAP API、GraphQL等。其中,RESTful API是一种常用的API设计风格,它使用HTTP协议进行通信,通过URL和HTTP方法来表示资源和操作。

在实现API服务时,需要考虑以下几个方面:

  1. 接口设计:定义API的资源和操作,包括URL路径、HTTP方法、请求参数、响应格式等。
  2. 授权认证:保护API的安全性,限制只有授权用户才能访问API。
  3. 数据传输:API服务通常需要与数据库或其他系统进行数据交互,需要考虑数据传输的方式和格式。
  4. 错误处理:处理API请求过程中可能出现的错误,返回合适的错误码和错误信息。

在实际开发中,可以使用框架来简化API服务的实现。例如,使用Spring Boot可以快速搭建RESTful API服务,使用Express可以快速搭建Node.js API服务。

OpenResty

OpenResty是一个基于Nginx的高性能Web应用服务器,它将Nginx与Lua脚本语言集成在一起,提供了强大的扩展能力和灵活的配置选项。

OpenResty的主要特点包括:

  1. 高性能:OpenResty基于Nginx,具有高性能和高并发处理能力。
  2. 扩展能力:OpenResty使用Lua脚本语言作为扩展语言,可以通过编写Lua脚本来实现自定义的功能和逻辑。
  3. 灵活配置:OpenResty的配置文件采用Nginx的配置语法,可以灵活配置各种功能和选项。
  4. 动态模块:OpenResty支持动态加载模块,可以根据需要加载和卸载模块,提高系统的灵活性和可维护性。

使用OpenResty可以实现各种功能,包括反向代理、负载均衡、API服务、静态资源服务等。通过编写Lua脚本,可以实现自定义的功能和逻辑,如访问控制、请求转发、数据处理等。

OpenResty的安装和配置相对简单,可以根据官方文档进行操作。在实际开发中,可以根据需求选择合适的功能和配置选项,编写Lua脚本来实现自定义的功能。

Nginx出现的历史背景

Nginx之所以出现,是因为互联网的数据量快速增长以及互联网的快速普及、全球化和物联网的发展。这些因素导致了对网络服务器的性能和效率要求越来越高。

在过去,Apache是最常用的Web服务器软件之一。然而,Apache的架构是基于每个连接对应一个进程的模型,这种模型在面对大量并发连接时效率较低。由于摩尔定律的存在,硬件性能不断提升,但Apache的架构并没有跟上硬件性能的发展。

Nginx的出现正是为了解决Apache的性能问题。Nginx采用了事件驱动的异步非阻塞架构,可以处理大量并发连接而不会消耗过多的系统资源。它使用少量的线程来处理多个连接,而不是为每个连接创建一个进程。这种架构使得Nginx在高并发场景下表现出色,能够更好地应对互联网数据量的快速增长。

此外,Nginx还具有高度可扩展性和灵活性,可以作为反向代理服务器、负载均衡器和静态文件服务器等多种用途。它还支持动态模块的扩展,可以根据实际需求进行功能扩展和定制。

总结来说,Nginx之所以出现,是为了满足互联网数据量快速增长和高并发连接的需求,以及解决Apache在处理大量并发连接时的性能问题。它的异步非阻塞架构和高度可扩展性使得它成为了互联网领域中非常重要的服务器软件之一。

为什么用Nginx?

alt
alt
  1. 「高并发,高性能」 :Nginx采用了事件驱动的异步非阻塞架构,能够处理大量并发连接,而且在高负载情况下仍然能够保持较低的资源消耗。它的事件驱动模型使得它能够更好地处理并发请求,提供更高的吞吐量和更低的延迟。主流的32核心64G内存的服务器,可以轻松达到数千万并发请求连接,处理静态资源可以达到一千万的RPS。
  2. 「可扩展性好」:Nginx的设计使得它非常适合构建可扩展的系统。它可以作为负载均衡器,将请求分发到多个后端服务器上,从而实现水平扩展。此外,Nginx还支持动态模块加载,可以根据需要添加或删除模块,方便扩展功能。
  3. 「高可靠性」 :Nginx具有出色的稳定性和可靠性。它采用了多进程或多线程的工作模式,每个进程或线程都是独立的,一个进程或线程的崩溃不会影响其他进程或线程的正常工作。此外,Nginx还具有自动故障恢复和自动重启功能,可以在出现故障时保持服务的可用性。
  4. 「热部署」:Nginx支持热部署,即在不停止服务的情况下更新配置文件或模块。这意味着可以在不影响用户访问的情况下进行系统配置的更改或升级。
  5. 「BSD许可证」:Nginx采用BSD许可证,这意味着它可以免费使用,并且可以自由修改和分发。BSD许可证还允许将Nginx用于商业目的,而无需公开源代码。

综上所述,Nginx具有高并发、高性能、可扩展性好、高可靠性和热部署等优点,使得它成为构建高性能、可靠的Web应用程序和服务的理想选择。

Nginx的组成

alt
alt
  1. Nginx 二进制可执行文件:这是Nginx的核心组件,它是一个独立的可执行文件,负责接收和处理客户端的请求,并将请求转发给后端的服务器。Nginx的二进制可执行文件通常位于操作系统的可执行文件路径中,比如/usr/sbin/nginx
  2. Nginx.conf配置文件:这是Nginx的主要配置文件,用于配置Nginx服务器的各种参数和行为。Nginx.conf文件包含了全局配置、http模块配置、server模块配置等多个部分,可以通过编辑该文件来定制Nginx服务器的行为。
  3. access.log访问日志:Nginx会将每个客户端的请求记录到access.log文件中,该文件记录了客户端的IP地址、访问时间、请求的URL、HTTP状态码等信息。通过查看access.log文件,可以了解到Nginx服务器的访问情况,对于排查问题和分析性能非常有帮助。
  4. error.log错误日志:Nginx会将服务器的错误信息记录到error.log文件中,该文件记录了Nginx服务器在处理请求过程中出现的错误,比如请求超时、后端服务器连接失败等。通过查看error.log文件,可以及时发现和解决服务器的问题。

除了以上几个组成部分,Nginx还可以通过加载各种模块来扩展其功能,比如HTTP模块、SSL模块、缓存模块等。这些模块可以通过在Nginx.conf配置文件中进行配置和加载。

Nginx版本

  1. Nginx 0.1.0:这是Nginx的第一个版本,发布于2004年10月4日。这个版本只支持基本的HTTP功能。
  2. Nginx 0.2.0:发布于2004年10月10日,这个版本增加了对FastCGI的支持。
  3. Nginx 0.3.0:发布于2004年10月26日,这个版本增加了对代理服务器的支持。
  4. Nginx 0.4.0:发布于2004年11月9日,这个版本增加了对SSL的支持。
  5. Nginx 0.5.0:发布于2005年1月4日,这个版本增加了对虚拟主机的支持。
  6. Nginx 0.6.0:发布于2006年4月4日,这个版本增加了对缓存的支持。
  7. Nginx 0.7.0:发布于2008年5月6日,这个版本增加了对HTTP流的支持。
  8. Nginx 0.8.0:发布于2010年6月8日,这个版本增加了对异步文件IO的支持。
  9. Nginx 1.0.0:发布于2011年4月12日,这个版本是Nginx的第一个稳定版本。
  10. Nginx 1.2.0:发布于2012年4月24日,这个版本增加了对IPv6的支持。
  11. Nginx 1.4.0:发布于2013年4月24日,这个版本增加了对SPDY的支持。
  12. Nginx 1.6.0:发布于2014年4月24日,这个版本增加了对HTTP/1.1的支持。
  13. Nginx 1.8.0:发布于2015年4月21日,这个版本增加了对HTTP/2的支持。
  14. Nginx 1.10.0:发布于2016年4月26日,这个版本增加了对TLS SNI的支持。
  15. Nginx 1.12.0:发布于2017年4月12日,这个版本增加了对TLS 1.3的支持。
  16. Nginx 1.14.0:发布于2018年4月17日,这个版本增加了对动态模块的支持。
  17. Nginx 1.16.0:发布于2019年4月23日,这个版本增加了对gRPC的支持。
  18. Nginx 1.18.0:发布于2020年4月21日,这个版本增加了对HTTP/3的支持。
  19. Nginx 1.19.1:发布于2020年7月7日。
  20. Nginx 1.20.0:发布于2021年4月20日。
  21. Nginx 1.21.0:发布于2021年7月12日。
  22. Nginx 1.22.1:发布于2022年5月24日。

Nginx的版本号由三个数字组成,格式为主版本号.次版本号.修订版本号。例如,1.18.0是一个典型的Nginx版本号。

  • 主版本号:当Nginx的主要功能发生重大变化或者有不兼容的改动时,主版本号会增加。这意味着新版本可能需要用户进行一些修改或者配置调整才能正常使用。
  • 次版本号:当Nginx的功能有较大的增强或者有一些新特性添加时,次版本号会增加。这些新特性通常不会破坏现有的配置和使用方式。
  • 修订版本号:当Nginx进行一些错误修复、性能优化或者其他小的改动时,修订版本号会增加。这些改动通常不会引入新的功能或者破坏现有的配置。

通常情况下,我们可以通过查看Nginx的版本号来了解其功能和改动情况。比如,如果版本号的主版本号发生了变化,那么可能需要注意一些不兼容的改动;如果版本号的次版本号增加了,那么可能有一些新的功能或者特性可以使用;如果版本号的修订版本号增加了,那么可能有一些错误修复或者性能优化。

如何选择Nginx版本

  1. 开源免费版Nginx:
    • 这是最常见的Nginx版本,也是最广泛使用的版本。
    • 它是一个高性能的HTTP和反向代理服务器,可以用于负载均衡、静态资源缓存、反向代理等场景。
    • 开源免费版Nginx具有稳定性高、性能优越、配置简单等特点。
    • 它提供了丰富的模块和插件,可以满足大部分的需求。
    • 如果你只需要基本的HTTP和反向代理功能,并且对商业支持没有特别的需求,那么开源免费版Nginx是一个不错的选择。
  2. 商业版Nginx Plus:
    • 商业版Nginx Plus是由Nginx官方提供的增强版Nginx。
    • 它在开源版本的基础上增加了一些高级功能和工具,如负载均衡算法、健康检查、实时监控、高级缓存等。
    • 商业版Nginx Plus还提供了商业支持和服务,包括技术支持、紧急修复、性能优化等。
    • 如果你需要更高级的功能和更可靠的商业支持,可以考虑使用商业版Nginx Plus。
  3. 阿里巴巴Tengine:
    • Tengine是由阿里巴巴集团开发的Nginx衍生版本。
    • 它在官方主干版本的基础上进行了一些修改和优化,以适应阿里巴巴的特定需求。
    • Tengine在性能和稳定性方面与官方版本相当,但可能会有一些额外的功能和特性。
    • 如果你是阿里巴巴的用户,或者对Tengine的特定功能有需求,可以考虑使用阿里巴巴Tengine。
  4. OpenResty:
    • OpenResty是一个基于Nginx和Lua的Web应用服务器。
    • 它将Nginx作为核心,通过Lua脚本扩展了Nginx的功能,使其可以处理动态请求和业务逻辑。
    • OpenResty适用于需要在Nginx上编写复杂的业务逻辑的场景,如API网关、微服务架构等。
    • 如果你需要在Nginx上编写复杂的业务逻辑,可以考虑使用OpenResty。

综上所述,选择哪个版本的Nginx取决于你的具体需求和使用场景。如果你只需要基本的HTTP和反向代理功能,开源免费版Nginx是一个不错的选择。如果你需要更高级的功能和商业支持,可以考虑商业版Nginx Plus。如果你是阿里巴巴的用户或对Tengine的特定功能有需求,可以考虑使用阿里巴巴Tengine。如果你需要在Nginx上编写复杂的业务逻辑,可以考虑使用OpenResty。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nginx的三个主要应用场景
    • 静态资源服务通过本地文件系统提供服务
      • 反向代理服务
        • 缓存
          • 负载均衡
            • API服务
              • OpenResty
              • Nginx出现的历史背景
              • 为什么用Nginx?
              • Nginx的组成
              • Nginx版本
              • 如何选择Nginx版本
              相关产品与服务
              负载均衡
              负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档