Nginx系列--01基本架构及其安装

前言

早期Nginx 的诞生是为了解决Web中出现的C10K 问题,即服务器如何承受一万的并发量。当时流行的Web server为Apache Httpd,而Httpd的IO模型使用的select()模型,这种IO模型为端口复用模型,他的并发量只能达到1024。而Nginx的使用了一种epoll的IO模型,这种模型使用事件驱动机制极大的提高了并发量。当然到现今为止,Nginx的功能不仅仅提供web服务。

一. Nginx架构

1. Nginx进程架构

由上图可知,nginx的进程模型分为两级,一个master进程和多个工作进程。master进程用于负载加载和分析配置文件、管理worker进程、平滑升级。woker进程处理并响应用户请求,worker进程在响应用户请求可以通过异步、事件驱动和非阻塞多种方式;与缓存相关的进程用于加载,管理缓存对象。

2. Nginx高度模块

Nginx的每个功能由具体模块提供,是高度模块化的,但其模块早期不支持DSO机制;近期版本(1.10及其以上)支持动态装载和卸载。Nginx模块主要分为分类:
1). 核心模块:core module
2). 标准模块:根据功能不同分为三类

  • HTTP modules:用于配置HTTP服务,这里面的模块分为Standard HTTP modules和Optional HTTP modules,Standard modules本身就有有,而Optional模块需要我们在编译时指定参数才会有。而第三方模块在编译时要指向引用此模块。
  • Mail modules:用于Mail相关配置
  • Stream modules:用于Stream相关配置

3). 第三方模块:用于扩展Nginx https://www.nginx.com/resources/wiki/modules/ 此连接可以看到目前支持的第三方模块。

3. Nginx功能

1). 静态的web资源服务器:图片服务器或js/css/html/txt等静态资源服务器
2). 结合FastCGI/uwSGI/SCGI等协议反代动态资源请求
3). http/https协议的反向代理
4). imap4/pop3协议的反向代理:用于处理邮件协议,此处不涉及
5). tcp/udp协议的请求转发: 使用stream模块

这些功能除了imap4/pop3协议的反向代理其他的都会通过模块的方式在后续的文章中一一介绍。

二. Nginx的安装

我们将会使用两种方式来安装Nginx,一种是通过yum安装,一种使用源码安装。
操作系统版本:

  1. CentOS7.2 处于最小化安装。
  2. IP为 192.168.239.131
  3. 清空iptables规则:~]# iptables -F
  4. 禁用selinux:~]# setenforce 0

1. YUM源安装Nginx

一般没有什么特许要求我们都是通过信任的yum源进行安装

1)配置yum源

Nginx在EPEL源中,我们使用的是阿里的镜像。
~]# vim /etc/yum.repos.d/epel.repo

[epel]
name=CentOS-$releasever EPEL
baseurl=http://mirrors.aliyun.com/epel/$releasever/$basearch
gpgcheck=0

2)yum安装Nginx

~]# yum install -y nginx
查看安装包安装了哪些文件
~]# rpm -ql nginx | less

启动nginx服务
~]# systemctl restart nginx

访问nginx服务

看到此页面说明nginx启动成功

2. 源码编译Nginx

一般我们都会使用yum安装,因为它更便于升级管理。而我们之所以对源码进行编译是因为版本出现了大的漏洞,或者我们需要第三方模块提供的功能。

1)安装编译开发工具(包组)

~]# yum groupinstall -y "Desktop Platform Development" "Server Platform Development" "Development Tools"
查看yum源中的包组可以使用 yum grouplist 命令,如果使用此命令查看的包组名是中文那么在安装是要使用中文安装。

2)安装依赖的包

~]# yum install -y install pcre-devel zlib-devel openssl-devel
pcre:perl 兼容的正则表达式库,他为nginx 的核心和rewrite模块提供正则表达式功能
zlib:用于Nginx为Gzip模块提供头部压缩功能
openssl:为Nginx SSL模块提供HTTPS协议支持

3)下载源码包

我们编译最新Nginx版本
~]# wget http://nginx.org/download/nginx-1.13.8.tar.gz (如果没有安装wget可以使用 yum install -y wget 安装)
~]# tar xf nginx-1.13.8.tar.gz -C /opt
~]# cd /opt
opt]# ln -sv nginx-1.13.8 nginx
~]# cd nginx

说明: 之所以创建软连接是因为后期版本的升级时,我们只需要修改软连接即可。而且一旦新版本有问题我们只需修改软连接指向就可以回退到老版本。

4)编译之普通版

C语言编写的程序是有多个原文件组成的,而且文件与文件之间具有依赖关系。所以我们需要特定的项目管理工具对其进行管理,使得程序在编译的时候可以根据依赖关系依次进行。在Linux平台上常用的项目管理工具为GUN make,make在编译时会根据其makefile配置文件中定义的次序对其进行编译。
makefile文件如何生成: 在程序编写完成后,会使用autoconf为程序代码生成一个脚本文件configure,这个脚本文件会收集当前系统的开发环境中所依赖的各组件的版本,和其依赖的环境是否满足,最后会更具makefile.in生成makefile文件
makefile.in文件如何生成: 在程序编写完成后,会使用autoconf为程序代码生成一个makefile模板文件makefile.in

  • ./configure
    运行configure命令时一定要处于其所在的父目录下。
    ~]# cd /opt/nginx
    ~]# ./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/etc/nginx.conf --pid-path=/usr/local/nginx/run/nginx.pid --lock-path=/usr/local/nginx/run/nginx.lock --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-http_dav_module --with-threads --with-file-aio

--prefix:编译完成后,程序的安装目录。默认在/usr/local
--conf-path: 指明配置文件的安装文件路径,如果不指明则在--prefix 指明的目录下
--pid-path:主程序的pid文件路径,如果不指明则在--prefix 指明的目录下
--lock-path:锁文件路径,如果不指明则在--prefix 指明的目录下
--error-log-path:nginx错误日志文件路径,如果不指明则在--prefix 指明的目录下
--http-log-path:nginx访问日志路径,如果不指明则在--prefix 指明的目录下
--user,--group:指明程序运行的用户,默认是nobody,配置文件中使用user指令指明
--with-http_ssl_module,--with-http_v2_module, --with-http_stub_status_module,--with-dav-module:启动对应的模块功能,使用--with-XXX_module的说明默认没有编译,需要显示说明编译。使用--without-XXX_module的表明默认会编译,但如果你不想使用此功能模块,可以使用此选项显示表明不编译。可以使用--help查看有哪些选项。

--with-threads:使用线程池功能
--with-file-aio:启用文件一步IO功能

下图为configure运行结果

可以看到没有报任何错,在configure当前目录下我们看到生成了一个Makefile文件。

  • 使用make工具编译源码
    make命令会根据生成的Makefile文件编译源码,运行此命令是处于makefile的父目录下。
    nginx]# make
  • 将编译好的文件安装到指定目录
    nginx]# make install
    在configure时我们通过--prefix指明安装在/usr/local/nginx目录下。有些文件是在nginx启动后才生成的,所以此处看不到。如下图:
  • 运行nginx

    运行nginx程序时发现报错,查找资料发现是因为没有启动程序使用的用户,我们指定运行work进程的用户为nginx。

    我们发现80端口已经监听,访问nginx页面

    由上图可知nginx使用正常。

5)编译之添加第三方模块

https://www.nginx.com/resources/wiki/modules/ 可以看到可用的第三方模块。此次我们会使用阿里巴巴的nginx-http-footer-filter模块进行

  • 下载nginx-http-footer-filter
    ~]# wget https://github.com/alibaba/nginx-http-footer-filter/archive/1.2.2.zip
    ~]# cp 1.2.2.zip /opt
    opt]# unzip 1.2.2.zip
    目录结构为:

    opt]# cd nginx
  • 编译
    记得清楚原有编译结果,在重新展开nginx tarball
    ~]# rm -rf /usr/local/nginx
    ~]# rm -rf /opt/nginx*
    ~]# tar xf nginx-1.13.8.tar.gz -C /opt
    ~]# cd /opt
    opt]# ln -sv nginx-1.13.8 nginx
    ~]# cd nginx
    正式编译:
    nginx]# ./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/etc/nginx.conf --pid-path=/usr/local/nginx/run/nginx.pid --lock-path=/usr/local/nginx/run/nginx.lock --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-http_dav_module --with-threads --with-file-aio --add-module=../nginx-http-footer-filter-1.2.2
  • 修改配置文件
    ~]# vim /usr/local/nginx/etc/nginx.conf
  • 启动服务
    ~]# /usr/local/nginx/sbin/nginx start
  • 页面访问nginx服务

可以看到配置生效了。
此模块的详细用法请看链接https://github.com/alibaba/nginx-http-footer-filter/tree/1.2.2

5)编译之支持动态装卸在模块

前期的一些步骤就省略了
~]# ./configure --help

~]# ./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/etc/nginx.conf --pid-path=/usr/local/nginx/run/nginx.pid --lock-path=/usr/local/nginx/run/nginx.lock --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-http_dav_module --with-threads --with-file-aio --with-stream=dynamic

查看生成的目录

我们如果要想使用此模块就要使用load_module加载对应模块,才能使用其模块中的指令。如果我们想要将第三方库编译成动态装卸载怎么办?只需将--add-module 改为--add-dynamic-module即可

后记

接下来将会整理Nginx的配置文件的使用,以及常用模块的使用。

参考资料

https://www.nginx.com/resources/admin-guide/installing-nginx-open-source/

原文地址:http://blog.51cto.com/13589448/2070319

时间: 2024-10-08 04:42:40

Nginx系列--01基本架构及其安装的相关文章

redis系列01:源码安装redis-3.2.10

前段时间安装好的redis,今天用脚本安装的时候突然出现版本异常的问题,所以更新一篇为大家提供参考 本次安装在CentOS6.5,采用的redis-3.2.10,最新的redis-4.0.1安装同样适用,不过由于4.0.1版本的redis改动较大,大家自己选择即可., 1.基础环境配置,上传安装包 useradd redis -s /sbin/nologin -M mkdir -p /server/tools/ cd /server/tools/ 2.安装redis,配置开机自启动 # 解压,编

SpagoBI系列----------[01]SpagoBI简介及安装步骤

商务智能套件SpagoBI提供一个基于J2EE的框架用于管理BI对象如报表.OLAP分析.仪表盘.记分卡以及数据挖掘模型等的开源BI产品.它提供的BI管理器能 够控制.校验.验证与分发这些BI对象. SpagoBI特性包括支持Portal.report.OLAP.QbE.ETL.dashboard.文档管理.元数据管理.数据挖掘与地理信息分析. 1.安装JDK并配置JAVA环境变量 http://www.oracle.com/technetwork/java/javase/downloads/j

Nginx系列-1.Linux下安装Nginx

Nginx系列-1.Linux下安装Nginx 目录 - Nginx系列 Nginx系列-1.Linux下安装Nginx Nginx系列-2.配置LNMP(Linux.Nginx.MySQL.PHP)架构 Nginx系列-3.配置Nginx虚拟主机 Nginx系列-4.Nginx日志配置及日志切割 Nginx系列-5.配置Nginx的防盗链 Nginx系列-6.配置Nginx的HTTPS Nginx系列-7.配置Nginx使用uwsgi支持web.py框架 Nginx系列-8.配置Nginx+A

Nginx系列-2.配置LNMP(Linux、Nginx、MySQL、PHP)架构

Nginx系列-2.配置LNMP(Linux.Nginx.MySQL.PHP)架构 目录 - Nginx系列 Nginx系列-1.Linux下安装Nginx Nginx系列-2.配置LNMP(Linux.Nginx.MySQL.PHP)架构 Nginx系列-3.配置Nginx虚拟主机 Nginx系列-4.Nginx日志配置及日志切割 Nginx系列-5.配置Nginx的防盗链 Nginx系列-6.配置Nginx的HTTPS Nginx系列-7.配置Nginx使用uwsgi支持web.py框架 N

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理

作者:JackTian 微信公众号:杰哥的IT之旅(ID:Jake_Internet) LAMP 系列导读 01. LAMP 系列教程(一)| 详解 Linux 环境下部署 HTTPD 服务 02. LAMP 系列教程(二)| 如何在 Linux 环境下部署 AWStats 分析系统来监控 Web 站点? 03. LAMP 系列教程(三)| 一文读懂 HTTPD 服务的访问控制 04. LAMP 系列教程(四)| MySQL 数据库系统(一) 05. LAMP 系列教程(五)| MySQL 数据

Nginx系列教程(三)| 一文带你读懂 Nginx 的负载均衡

作者:JackTian 微信公众号:杰哥的IT之旅(ID:Jake_Internet) LAMP 系列导读 01. LAMP 系列教程(一)| 详解 Linux 环境下部署 HTTPD 服务 02. LAMP 系列教程(二)| 如何在 Linux 环境下部署 AWStats 分析系统来监控 Web 站点? 03. LAMP 系列教程(三)| 一文读懂 HTTPD 服务的访问控制 04. LAMP 系列教程(四)| MySQL 数据库系统(一) 05. LAMP 系列教程(五)| MySQL 数据

Nginx系列教程之四:Nginx常用变量汇总及测试

Nginx系列教程之:Nginx内置变量的收集及使用 前言:     各位小伙伴,前两天忙着测试openstack Icehouse,撰写openstack技术文档,导致nginx剩下的几篇博文没来得及整理,你是不是等着急啦?哈哈,抱歉,今天继续来聊一聊nginx常用的内置变量及其相关的使用. Nginx的变量在nginx的使用中还是占了一定的重要性,尤其是在日志和rewrite中,必须对各种变量的含义有所了解,才能组合出适合自己的日志格式和更高级的rewrite规则.其次了解nginx的变量含

Nginx系列-5.配置Nginx的防盗链

Nginx系列-5.配置Nginx的防盗链 目录 - Nginx系列 Nginx系列-1.Linux下安装Nginx Nginx系列-2.配置LNMP(Linux.Nginx.MySQL.PHP)架构 Nginx系列-3.配置Nginx虚拟主机 Nginx系列-4.Nginx日志配置及日志切割 Nginx系列-5.配置Nginx的防盗链 Nginx系列-6.配置Nginx的HTTPS Nginx系列-7.配置Nginx使用uwsgi支持web.py框架 Nginx系列-8.配置Nginx+Apa

Nginx系列-4.Nginx日志配置及日志切割

Nginx系列-4.Nginx日志配置及日志切割 目录 - Nginx系列 Nginx系列-1.Linux下安装Nginx Nginx系列-2.配置LNMP(Linux.Nginx.MySQL.PHP)架构 Nginx系列-3.配置Nginx虚拟主机 Nginx系列-4.Nginx日志配置及日志切割 Nginx系列-5.配置Nginx的防盗链 Nginx系列-6.配置Nginx的HTTPS Nginx系列-7.配置Nginx使用uwsgi支持web.py框架 Nginx系列-8.配置Nginx+