NGINX初识

0.引言

推荐老师:陶辉老师(大帅哥)


推荐视频:
陶辉老师 100讲+50讲(B站搜索)
B站的极客时间有很多分享从源码来解析

另有著书《深入理解Nginx模块开发与架构解析》


另春哥的非常棒!!
http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html

NGINX公开课录像和PPT下载 原文作者:Nginx 原文链接:https://www.nginx.org.cn/article/detail/216 转载来源:NGINX开源社区 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Nginx开源社区网址

Nginx实现反向代理

1.什么是NGINX

     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发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,
事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。


简述:
   Nginx是一各开源的,高性能的可靠的HTTP中间件,代理服务.
   开源:支持获取源码;
   高性能:支持海量并发.

2. 官方网站(开源)

http://nginx.org/
http://nginx.org/en/docs/--这里放的文档可供学习

3.常见HTTP服务

1.HTTPD(Apache基金会)
2.IIS(微软)
3.GWS(Google)
4.OpenResty(亦春大哥首发的Nginx+Lua,兼具高性能和开发效率高的特点--http://openresty.org/cn/,内含很多技术博客)
5.tengine(阿里修改后的Nginx--http://tengine.taobao.org/,内含很多技术文档)
6.lighthttpd

4.Nginx应用场景

1.静态处理
2.反向代理(代理了好多台)
3.正向代理(代理了一台)
4.负载均衡
5.资源缓存
6.安全防护
7.访问限制
8.访问认证

5.Nginx高效原因

1.多路复用技术(内核2.6及以后支持,复用指的是复用同一个线程);
2.CPU亲和性(CPU Affinity);
3.Sendfile的零拷贝技术;
...
待补充

CPU Affinity将CPU核心和特定进程绑定.Nginx中把每个worker进程固定在一个CPU上执行,减少CPU的cache miss,获得更好的性能.

6.Nginx的主要优点

1.高并发,高性能;
2.可扩展性号(模块化设计);
3.高可靠性(可持续不间断运行数年);
4.热部署(在不停机的情况下升级Nginx);
5.BSD许可证.

7.Nginx的组成

1.Nginx二进制可执行文件(由各模块源码编译出的一个文件)
2.Nginx.config配置文件(控制Nginx的行为)
3.access.log访问日志(记录每一条http请求信息)
5.error.log错误日志(定位问题)

8.Nginx版本发布情况

20041004 第一个版本0.1.0
2005     重构http反向代理
2009     0.7.52支持windows
2011     1.0 支持上游keepalive http长连接,nginx plus商业公司成立
2013     支持websocket,TFO等协议
2015     支持线程池,提供stream四层反向代理,支持reuseport特性,支持httpv2协议
2016     支持动态模块
2018     支持TLSv1.3

每次版本发布会有:
feature
bugfix
change
http://nginx.org/en/CHANGES文件可以看到以上feature,bugfix,change.


单号版本会新增很多功能,但不一定稳定,如1.15.5;
双号版本较稳定,如1.14.0.

9.选择哪个版本的Nginx

开源版本:nginx.org
商业版本:nginx.com
淘宝那个:tengine(千锤百炼,但对Nginx新模块支持有点费劲)
开源openresty:https://openresty.org(API或防火墙推荐使用)
商业openresty:https://openresty.com(API或防火墙推荐使用)

10.下载与安装

1.到http://nginx.org/en/download.html,选择一个版本右击复制链接;
2.进入linux虚拟机执行:wget http://nginx.org/download/nginx-1.18.0.tar.gz;
3.解压 tar -xvf nginx-1.18.0.tar.gz;
4.安装
./configure --prefix=/usr/local/nginx 
make
make install
5.启停服务
./nginx -c ./conf/nginx.conf  #启动
./nginx -s reload             #平滑重启
./nginx -s stop   #立即停止服务
./nginx -s quit   #优雅的停止服务
./nginx -s reload #重载配置文件
./nginx -s reopen #重新开始记录日志文件

停止:
ps -ef|grep nginx
kill -QUIT 2072 //停止,可以杀死多个worker进程
kill -TERM 2132 //停止,可以杀死多个worker进程
kill -9 nginx //强制停止

重启:
kill -HUP 进程号

11.源码目录结构

1.CHANGE文件              bug修复,特点与改变
2.CHANGE.ru文件           俄文版本CHANGE文件
3.conf目录下的nginx.conf   配置文件的示例文件
4.contrib                 提供了pl脚本和vim工具(可提供色彩,cp -r contrib/vim/* ~/.vim,如果没有~/.vim目录要先创建)
5.html文件目录             提供了50错误页面和欢迎页面
6.man文件目录              提供帮助文档(Linux中输入:man ./nginx.8)
7.auto                     一些判断操作系统支持,编译等相关的文件,
8.src                      源码目录
9.configure                配置文件参数查看程序(./configure --help| more )





补充:
./configure主要分三类:
1.指定一些目录,如:-- prefix=PATH 可以指定安装目录;
2.确定使用或者不适用哪些模块,如使用select模块:--with-select_module
                              不适用select模块:--without-select_module
  另外:其中–-with开头的说明默认不会编译进nginx如果需要该模块,需要加上该参数去编译进Nginx二进制文件,–-without开头
则说明默认会编译进去,如果不需要,需要指定进行移除
3.一些特殊的参数,比如说gcc编译时添加什么优化参数,打印日志时需要什么级别,和其他模块一起编译的时候需要加什么模块.


如果编译出现make:***没有规则来建立目标 build',这是default’所需要的。停止。
错误翻译过来就是:
./configure:错误:HTTP gzip模块需要zlib库。您可以使用–without-http_gzip_module选项禁用该模块,或者将zlib库安装到系统中,或者使用–with-zlib = 选项使用nginx从源代码静态构建zlib库。
make:***没有规则来建立目标 build',这是default’所需要的。停止。

解决方法:安装依赖库
安装依赖库,进入Nginx目录,重新编译

//安装依赖库
yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel
//编译参数
./configure
//生成Makefile
make && make install



12.我的编译安装

1.配置参数
(这里的prefix应该写成/usr/local/nginx,但暂时没有改)
./configure --prefix=/usr/local/niginx --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --with-http_secure_link_module --with-http_stub_status_module --with-stream --with-pcre=/home/muten/module/pcre-8.41 --with-zlib=/home/muten/module/zlib-1.2.11 --with-openssl=/home/muten/module/openssl-1.1.0g

执行之后生成/home/muten/module/nginx-1.13.7/objs/文件夹并产生一些中间文件,比如说ngx_modules.c等文件

/home/muten/module/nginx-1.13.7/objs/ngx_modules.c--这个文件中说明哪些模块被编译了,ngx_modules这个数组记录了哪些模块被编译


2.cd /home/muten/module/nginx-1.13.7
make编译
得到nginx的文件在
/home/muten/module/nginx-1.13.7/nginx中.

生成的中间文件都放在/home/muten/module/nginx-1.13.7/objs/src/目录下

3.首次编译安装
cd /home/muten/module/nginx-1.13.7/
make install



安装完成后可以到--prefix指定的安装目录中看到相关目录:
二进制文件在sbin目录下
决定Nginx功能的配置文件在conf下
accesslog和errlog在logs目录下



启动nginx,
cd /usr/local/niginx/sbin
./nginx 

13.Nginx配置示例及语法说明

 

1.配置文件由指令和指令块组成;
2.每条指令以;分好结尾,指令与参数见以空格符号分割;
3.指令以{}大括号将多条质量组织在意其;
4.include语句允许组合多个配置文件以提升可维护性;
5.使用#符号添加注释,提高可读性;
6.使用$符号使用变量;
7.部分指令的参数支持正则表达式,如location.


limit_req_zone --控制流控
upstream       --上游服务器
zone=one:10m   --每个进程给出10M内存大小的共享内存空间给不同的worker使用
expires 3m     -- expires表示缓存过期控制头,3m表示3分钟,整体表示资源会被浏览器缓存3分钟

配置参数的时间单位:
ms(milliseconds)
s(seconds)
m(minutes)
h(hours)
d(days)
w(weeks)
M(months,30days)
y(years,365days)

空间的单位:
不加默认 bytes
k/K     kilobytes
m/M     megabytes
g/G     gigabytes

nginx的Windows版本使用原生Win32 API(非Cygwin模拟层)。当前nginx/Windows只使用select作为通知方法,所以不要期待它有很高的性能和扩展性。鉴于这点和一些已知问题,nginx/Windows目前还处于beta阶段。nginx/Windows和Unix版本相比,功能几乎已经齐全,除了XSLT过滤器、图像过滤器、GeoIP模块和嵌入Perl语言支持以外。 安装nginx/Windows,需要下载最新的1.3.13开发版本,因为开发分支上包含了所有已知的问题修复,尤其是针对Windows版本的问题修复。解压缩下载得到的zip文件,进入nginx-1.3.13目录,运行nginx。下面给出一个在C盘根目录下安装的例子: cd c:\ unzip nginx-1.3.13.zip cd nginx-1.3.13 start nginx 可以在命令行运行tasklist命令来查看nginx进程: C:\nginx-1.3.13>tasklist /fi "imagename eq nginx.exe" Image Name PID Session Name Session# Mem Usage =============== ======== ============== ========== ============ nginx.exe 652 Console 0 2 780 K nginx.exe 1332 Console 0 3 112 K 其中一个是主进程,另一个是工作进程。如果nginx没有启动,请查看logs\error.log文件以寻找失败原因。如果日志文件不存在,那失败原因会记录在Windows事件日志中。如果某次请求没有展示预想的页面,而是展示了错误页面,也请查看logs\error.log文件。 nginx/Windows使用工作目录作为前缀将配置文件中设置的相对目录补齐。就上面安装的例子而言,工作目录应该是C:\nginx-1.3.13\(工作目录基本上与运行文件所在的目录相同)。配置文件中的目录请使用“/”,而不是“\”做目录分隔: access_log logs/site.log; root C:/web/html; nginx/Windows作为标准控制台应用运行,而不是系统服务。可以用下面的命令控制: nginx -s stop 快速退出 nginx -s quit 优雅退出 nginx -s reload 更换配置,启动新的工作进程,优雅的关闭以往的工作进程 nginx -s reopen 重新打开日志文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值