百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

本文来深入学习Nginx/OpenResty详解,Nginx到底是个什么鬼

off999 2025-02-11 13:05 38 浏览 0 评论

Nginx/OpenResty详解

Nginx(或OpenResty)在生产场景中使用的广泛程度已经到了令人咂舌的地步。无论其实际的市场占用率如何,以笔者这些年所经历的项目来看,其使用率为100%。

然而,笔者周围的大量开发人员对Nginx(或OpenResty)的了解程度都停留在基本配置的程度,对其核心原理和高性能配置了解不多。

本文不仅为大家解读Nginx的核心原理和高性能配置,还将介绍Nginx+Lua高并发实战编程,帮助大家掌握一个解决高并发问题的新利器。

Nginx简介

Nginx是一个高性能的HTTP和反向代理Web服务器,是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的Web服务器。

Nginx源代码以类BSD许可证的形式发布,其第一个公开版本0.1.0发布于2004年10月4日,2011年6月1日发布了1.0.4版本。Nginx因高稳定性、丰富的功能集、内存消耗少、并发能力强而闻名全球,目前得到非常广泛的使用,比如百度、京东、新浪、网易、腾讯、淘宝等都是Nginx的用户。Nginx相关地址如下:

源码地址为https://trac.nginx.org/nginx/browser。
官网地址为http://www.nginx.org/。

Nginx有以下3个主要社区分支:

(1)Nginx官方版本:更新迭代比较快,并且提供免费版本和商业版本。

(2)Tengine:Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上针对大访问量网站的需求添加了很多高级功能和特性。

Tengine的性能和稳定性已经在大型的网站(如淘宝网、天猫商城等)得到了很好的检验。它的最终目标是打造一个高效、稳定、安全和易用的Web平台。

(3)OpenResty:2011年,中国人章亦春老师把LuaJIT VM嵌入Nginx中,实现了OpenResty这个高性能服务端解决方案。OpenResty是一个基于Nginx与Lua的高性能Web平台,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项,用于方便地搭建能够处理超高并发、扩展性极高的动态Web应用、Web服务和动态网关。OpenResty的目标是让Web服务直接跑在Nginx服务内部,充分利用Nginx的非阻塞I/O模型,不仅对HTTP客户端请求,甚至对远程后端(诸如MySQL、PostgreSQL、Memcached以及Redis等)都进行一致的高性能响应。

OpenResty通过汇聚各种设计精良的Nginx模块(主要由OpenResty团队自主开发)从而将Nginx有效地变成一个强大的通用Web应用平台,使得Web开发人员和系统工程师可以使用Lua脚本语言调动Nginx支持的各种C以及Lua模块,快速构造出足以胜任10KB乃至1000KB以上单机并发连接的高性能Web应用系统。

通过以下OpenResty官网的链接地址可以查看到OpenResty支持的组件:

官网地址为https://openresty.org/cn/。
组件地址为https://openresty.org/cn/components.html。

正向代理与反向代理

这里先简明扼要地介绍什么正向代理和反向代理。正向代理和反向代理的用途都是代理服务中进行客户端请求的转发,但是区别还是很大的。

正向代理最大的特点是客户端非常明确要访问的服务器地址,如图7-1所示。

在正向代理服务器,客户端需要配置目标服务器信息,比如IP和端口。一般来说,正向代理服务器是一台和客户端网络连通的局域网内部的机器或者是可以打通两个隔离网络的双网卡机器。通过正向代理的方式,客户端的HTTP请求可以转发到之前与客户端网络不通的其他不同的目标服务器。

反向代理与正向代理相反,客户端不知道目标服务器的信息,代理服务器就像是原始的目标服务器,客户端不需要进行任何特别的设置。

反向代理最大的特点是客户端不知道目标服务器地址,如图7-2所示。

客户端向反向代理服务器直接发送请求,接着反向代理将请求转发给目标服务器,并将目标服务器的响应结果按原路返回给客户端。

正向代理和反向代理的使用场景说明:

(1)正向代理的主要场景是客户端。由于网络不通等物理原因,需要通过正向代理服务器这种中间转发环节顺利访问目标服务器。当然,也可以通过正向代理服务器对客户端某些详细信息进行一些伪装和改变。

(2)反向代理的主要场景是服务端。服务提供方可以通过反向代理服务器轻松实现目标服务器的动态切换,实现多目标服务器的负载均衡等。

通俗点来说,正向代理(如Squid、Proxy)是对客户端的伪装,隐藏了客户端的IP、头部或者其他信息,服务器得到的是伪装过的客户端信息;反向代理(如Nginx)是对目标服务器的伪装,隐藏了目标服务器的IP、头部或者其他信息,客户端得到的是伪装过的目标服务器信息。

Nginx的启动命令和参数详解

在Windows平台安装OpenResty并且设置path环境变量之后,就可以启动OpenResty了。OpenResty的原始启动命令为nginx,其参数有-v、-t、-p、-c、-s等,使用说明如下:

(1)-v:表示查看Nginx的版本。

C:\dev\refer\LuaDemoProject\src> nginx -v
nginx version: openresty/1.13.6.2

(2)-c:指定一个新的Nginx配置文件来替换默认的Nginx配置文件。

//启动时,在cmd窗口切换到src目录,然后执行以下命令
C:\dev\refer\LuaDemoProject\src> nginx -p ./ -c nginx-debug.conf

(3)-t:表示测试Nginx的配置文件。如果不能确定Nginx配置文件的语法是否正确,就可以通过Nginx命令的-t参数来测试。此参数代表不运行配置文件,只是测试配置文件。

C:\dev\refer\LuaDemoProject\src> nginx -t -c nginx-debug.conf
nginx: the configuration file ./nginx-debug.conf syntax is ok
nginx: configuration file ./nginx-debug.conf test is successful

(4)-p:表示设置前缀路径。C:\dev\refer\LuaDemoProject\src> nginx -p ./ -c nginx-debug.conf在上面的命令中,“-p./”表示将当前目录C:

\dev\refer\LuaDemoProject\src作为前缀路径,也就是说,nginx
debug.conf配置文件中所用到的相对路径都加上这个前缀。

(5)-s:表示给Nginx进程发送信号,包含stop(停止)、reload(重写加载)。

//重启Nginx进程,发送reload信号
C:\dev\refer\LuaDemoProject\src> nginx -p ./ -c nginx-debug.conf -s reload
//停止Nginx进程,发送stop信号
C:\dev\refer\LuaDemoProject\src> nginx -p ./ -c nginx-debug.conf -s stop

Linux下OpenResty的启动、停止脚本

为什么要专门介绍Linux系统下OpenResty的启动和停止脚本呢?

(1)在Nginx/OpenResty发布包中并没有提供好用的启动、停止脚本。

(2)掌握一些基础的脚本指令并能编写基础的运行脚本是Java工程师必备的基础能力,很多面试场景都会出现“你使用过哪些Linux操作指令”的面试题。

作为参考,这里提供一份笔者常用的Linux下OpenResty/Nginx的启动脚本,它公布在疯狂创客圈社群网盘上,它的内容如下:

#!/bin/bash
#设置OpenResty的安装目录
OPENRESTRY_PATH="/usr/local/openresty"
#设置Nginx项目的工作目录
PROJECT_PATH="/work/develop/LuaDemoProject/src/"
#设置项目的配置文件
#PROJECT_CONF="nginx-location-demo.conf"
PROJECT_CONF="nginx.conf"
echo "OPENRESTRY_PATH:$OPENRESTRY_PATH"
echo "PROJECT_PATH:$PROJECT_PATH"
#查找Nginx所有的进程id
pid=$(ps -ef | grep -v 'grep' | egrep nginx| awk '{printf $2 " "}')
#echo "$pid"
if [ "$pid" != "" ]; then
 #如果已经在执行,就提示
 echo "openrestry/nginx is started already, and pid is $pid, operating failed!"
else
 #如果没有执行,就启动
 $OPENRESTRY_PATH/nginx/sbin/nginx -p ${PROJECT_PATH} \
 -c ${PROJECT_PATH}/conf/${PROJECT_CONF}
 pid=$(ps -ef | grep -v 'grep' | egrep nginx| awk '{printf $2 " "}')
 echo "openrestry/nginx starting succeeded!"
 echo "pid is $pid "

fi使用以上脚本之前,需要在脚本中配置OpenResty/Nginx的安装目录、项目的工作目录、项目的配置文件3个选项。配置完成后,在Linux的命令窗口执行openresty-start.sh启动脚本即可启动OpenResty。

[root@localhostlinux]#/work/develop/LuaDemoProject/sh/linux
/openresty-start.sh
OPENRESTRY_PATH:/usr/local/openresty
PROJECT_PATH:/work/develop/LuaDemoProject/src/
openrestry/nginx starting succeeded!
pid is 31403 31409

下面简单介绍上面的openresty-start.sh脚本中主要用到的指令:

(1)echo显示命令:用于显示信息到终端屏幕。

(2)ps进程列表:用于显示在本地机器上当前运行的进程列表。

(3)grep查找命令:用于查找文件里符合条件的字符串。

以上3个命令是经常用到的、非常基础的Linux命令。疯狂创客圈社群网盘中除了提供上面的openresty-start.sh脚本之外,还提供了另外3个有用的OpenResty操作脚本,具体如下:

(1)openresty-stop.sh用于停止OpenResty/Nginx。

(2)openresty-status.sh用于输出OpenResty/Nginx的运行状态和进程信息。

(3)openresty-restart.sh用于重启OpenResty/Nginx。

Windows下OpenResty的启动、停止脚本

除了提供Linux下的Shell脚本外,这里还为大家提供Windows脚本文件。Windows下的脚本通常叫作批处理脚本,批处理脚本扩展名为.bat,包含一系列DOS命令。

作为参考,这里提供一份Windows下OpenResty/Nginx的启动、停止、重启、查看状态的脚本,大家可以在疯狂创客圈社群网盘下载,其中启动脚本openresty-start.bat的具体内容如下:

@echo off
rem启动标志flag=0表示之前已经启动,flag=1表示现在立即启动
set flag=0
rem设置OpenResty/Nginx的安装目录
set installPath=E:/tool/openresty-1.13.6.2-win32
rem设置Nginx项目的工作目录
set projectPath=C:/dev/refer/LuaDemoProject/src
rem设置项目的配置文件
set PROJECT_CONF=nginx-location-demo.conf
rem set PROJECT_CONF=nginx.conf
echo installPath: %installPath%
echo project prefix path: %projectPath%
echo config file: %projectPath%/conf/%PROJECT_CONF%
echo openresty starting...
rem查找OpenResty/Nginx进程信息,然后设置flag标志位
tasklist|find /i "nginx.exe" > nul
if %errorlevel%==0 (
echo "OpenResty/Nginx already running ! "
rem exit /b
) else set flag=1
rem如果需要,就启动OpenResty/Nginx
cd /d %installPath%
if %flag%==1 (
start nginx.exe -p "%projectPath%" -c "%projectPath%/conf/%PROJECT_CONF%"
ping localhost -n 2 > nul
)

rem输出OpenResty/Nginx的进程信息

tasklist /fi "imagename eq nginx.exe"
tasklist|find /i "nginx.exe" > nul
if %errorlevel%==0 (
echo "OpenResty/Nginx starting succeeded!"
)

使用之前,在启动脚本openresty-start.bat中配置OpenResty/Nginx的安装目录、项目的工作目录、项目的配置文件这3个选项后,在Windows CMD命令窗口中执行openresty-start.bat启动脚本,即可启动OpenResty。

PS C:\dev\refer\LuaDemoProject\sh\windows> .\openresty-start.bat
installPath: E:/tool/openresty-1.13.6.2-win32
project prefix path: C:/dev/refer/LuaDemoProject/src
config file: C:/dev/refer/LuaDemoProject/src/conf/nginx-location-demo.conf
openresty starting...
"OpenResty/Nginx already running ! "
映像名称 PID会话名 会话# 内存使用
========================= ======== ================ =========== ============
nginx.exe 34264 Console 2 9,084 K
nginx.exe 25912 Console 2 8,992 K
"OpenResty/Nginx starting succeeded!"

上面的.bat批处理文件主要用到的指令简单介绍如下:

(1)rem注释命令:一般用来给程序加上注释,该命令后的内容不被执行。

(2)echo显示命令:用于显示信息到终端屏幕。

(3)cd目录切换:用于切换当前的目录。

(4)tasklist进程列表:用于显示在本地或远程机器上当前运行的进程列表。

除了上面的openresty-start.bat脚本外,针对Windows系统,本文的配套源码中还提供了3个有用的OpenResty操作批处理脚本,具体如下:

(1)openresty-stop.bat:用于停止OpenResty/Nginx。

(2)openresty-status.bat:用于输出OpenResty/Nginx的运行状态和进程信息。

(3)openresty-restart.bat:用于重启OpenResty/Nginx。

从提高效率的维度来说,这些脚本还是非常有用的。大家可从疯狂创客圈社群网盘自行下载、研究学习和定制使用。

本文给大家讲解的内容是Nginx/OpenResty详解,Nginx简介

  1. 下篇文章给大家讲解的是 Nginx/OpenResty详解,Nginx的核心原理;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: