一、初识nginx
nginx的优点
1.rps优秀
2.可扩展性好,丰富的生态圈,占用内存少,并发力强
3.高可靠性,运行在企业内网的边缘节点
4.热部署,可以在不停止服务的情况下升级nginx,nginx进程不能kill
5.bsd许可证,开源,免费,可以修改源代码然后运行在商业化场景下
nginx适用于那些场景?
1.搭建轻量级web服务器,类似于Apache、Tomcat
2.搭建web服务集群,类似于lvs
3.静态资源服务,通过本地文件系统提供服务
4.反向代理服务,指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。反向代理方式实际上就是一台负责转发的代理服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。我们让nginx监听一个端口,譬如80端口,但实际上我们转发给在8080端口的tomcat,由它来处理真正的请求,当请求完成后,tomcat返回,但数据此时没直接返回,而是直接给nginx,由nginx进行返回,这里,我们会以为是nginx进行了处理,但实际上进行处理的是tomcat。很多用到nginx的地方都是作为静态伺服器,这样可以方便缓存那些静态文件,比如CSS,JS,html,htm等文件。(https://blog.51cto.com/11601346/1908061)
5.API服务
左图,从红线开始,一个web请求,先经过nginx,然后到达应用服务或者数据库/缓存服务。应用服务一般要求开发效率高,但是运行效率低,qps、tps、或者并发都是受限的,所以需要将这些应用服务组成一个集群,向用户提供高可用性的服务。但是一旦很多应用服务组成集群,就需要nginx的反向代理,将动态请求传到给用户。当用户增多后,就需要动态扩容、容灾,所以反向代理需要有负载均衡功能。其次,在这样一个链路中,nginx是处于企业内网的边缘节点,随着网络链路的增长,用户体验到的时延会增加,所以这时候就需要把一段时间内看起来不变的动态内容缓存到nginx本地,由nginx直接向用户提供资源访问。所以反向代理就衍生出了缓存的功能。而静态资源,比如图片、css等是没必要通过应用服务来访问的,而是通过本地文件系统提供服务,直接由nginx提供访问就可以了。TODO:第三个使用场景,API服务
nginx的主要组成部分
1.二进制可执行文件,nginx怎么处理请求
2.配置文件,nginx处理请求的方式
3.访问日志
4.错误日志
nginx版本发布情况
2004年开发至今,稳定版本都是双数的。
如何选择nginx版本?
- 开源免费的nginx,商业收费的nginx plus,添加了运营监控,整合了第三方模块。
- 阿里巴巴的tengine是在nignx基础上开发的开源的web项目。
- 免费版openResty和商业版openResty。
编译合适自己的nginx?如何安装nginx?
yarn apt-get可以直接安装nginx
nginx的二进制文件,会把模块直接编译进来,如果要添加第三方模块,就必须自己重新编译nginx才能添加成功。
下载nginx: wget https://nginx.org/download/nginx-1.18.0.tar.gz
解压: tar -xzf nginx-1.18.0.tar.gz
本地vim支持nginx语法的配置(比如语法高亮功能),配置命令:cp -r contrib/vim/* ~/.vim/
查看配置help:➜ nginx-1.18.0 ./configure --help
编译步骤:
1.生成编译环境,指定安装目录等配置,怎么编译,比如:➜ nginx-1.18.0 ./configure --prefix=/Users/xiaohuochai/Desktop/nginx prefix指定了nginx的安装目录
结果,还可以通过--user --group添加用户和组:
Configuration summary + using system PCRE library + OpenSSL library is not used + using system zlib library nginx path prefix: "/Users/xiaohuochai/Desktop/nginx" nginx binary file: "/Users/xiaohuochai/Desktop/nginx/sbin/nginx" nginx modules path: "/Users/xiaohuochai/Desktop/nginx/modules" nginx configuration prefix: "/Users/xiaohuochai/Desktop/nginx/conf" nginx configuration file: "/Users/xiaohuochai/Desktop/nginx/conf/nginx.conf" nginx pid file: "/Users/xiaohuochai/Desktop/nginx/logs/nginx.pid" nginx error log file: "/Users/xiaohuochai/Desktop/nginx/logs/error.log" nginx http access log file: "/Users/xiaohuochai/Desktop/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp"
// 并且这个时候,nginx会出多一个objs的目录
➜ nginx-1.18.0 ll
total 1528
-rw-r--r--@ 1 xiaohuochai staff 296K 4 21 22:09 CHANGES
-rw-r--r--@ 1 xiaohuochai staff 451K 4 21 22:09 CHANGES.ru
-rw-r--r--@ 1 xiaohuochai staff 1.4K 4 21 22:09 LICENSE
-rw-r--r-- 1 xiaohuochai staff 432B 7 30 19:45 Makefile
-rw-r--r--@ 1 xiaohuochai staff 49B 4 21 22:09 README
drwxr-xr-x@ 25 xiaohuochai staff 800B 4 21 22:09 auto
drwxr-xr-x@ 11 xiaohuochai staff 352B 4 21 22:09 conf
-rwxr-xr-x@ 1 xiaohuochai staff 2.4K 4 21 22:09 configure
drwxr-xr-x@ 6 xiaohuochai staff 192B 4 21 22:09 contrib
drwxr-xr-x@ 4 xiaohuochai staff 128B 4 21 22:09 html
drwxr-xr-x@ 3 xiaohuochai staff 96B 4 21 22:09 man
drwxr-xr-x 8 xiaohuochai staff 256B 7 30 19:45 objs
drwxr-xr-x@ 9 xiaohuochai staff 288B 4 21 22:09 src
2.开始make编译,准备安装文件:➜ nginx-1.18.0 make
编译完成后,编译的文件也都放在了objs文件夹下。
3.编译安装: ➜ nginx-1.18.0 make install
这时候,打开之前prefix指定的安装目录,就可以看到安装文件了。
nginx每个文件都是干什么的?
auto目录:cc目录是用于编译的,os是用于操作系统判断的,libs就是一些库文件,其他文件都是用老辅助conf配置文件运行的
conf目录:示例文件,教大家如何配置nginx
contrib目录:提供vim工具和编码的脚本
html目录:index和50x的文件
man目录:linux对nginx的帮助文件
src目录:nginx源代码
nginx配置文件的通用语法介绍
http模块支持的指令块,非http模块是解析不了这些指令的:
这是淘宝出的《nginx开发从入门到精通》