搭错车的小火柴

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一、初识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每个文件都是干什么的?

https://tengine.taobao.org/book/chapter_09.html#nginx-100

├── auto 自动检测系统环境以及编译相关的脚本

│   ├── cc          关于编译器相关的编译选项的检测脚本
│   ├── lib         nginx编译所需要的一些库的检测脚本
│   ├── os          与平台相关的一些系统参数与系统调用相关的检测
│   └── types       与数据类型相关的一些辅助脚本
├── conf            存放默认配置文件,在make install后,会拷贝到安装目录中去
├── contrib         存放一些实用工具,如geo配置生成工具(geo2nginx.pl)、提供vim工具和编码的脚本
├── html            存放默认的网页文件,在make install后,会拷贝到安装目录中去
├── man             nginx的man手册
└── src             存放nginx的源代码
    ├── core        nginx的核心源代码,包括常用数据结构的定义,以及nginx初始化运行的核心代码如main函数
    ├── event       对系统事件处理机制的封装,以及定时器的实现相关代码
    │   └── modules 不同事件处理方式的模块化,如select、poll、epoll、kqueue等
    ├── http        nginx作为http服务器相关的代码
    │   └── modules 包含http的各种功能模块
    ├── mail        nginx作为邮件代理服务器相关的代码
    ├── misc        一些辅助代码,测试c++头的兼容性,以及对google_perftools的支持
    └── os          主要是对各种不同体系统结构所提供的系统函数的封装,对外提供统一的系统调用接口

 

 

nginx配置文件的通用语法介绍

 

 

 

 http模块支持的指令块,非http模块是解析不了这些指令的:

这是淘宝出的《nginx开发从入门到精通》 

 https://tengine.taobao.org/book/

posted on 2020-07-29 21:22  搭错车的小火柴  阅读(98)  评论(0编辑  收藏