标签:程序编写 stat nginx服务 min 源码安装 核心 log 相关 配置yum源
前言早期Nginx 的诞生是为了解决Web中出现的C10K 问题,即服务器如何承受一万的并发量。当时流行的Web server为Apache Httpd,而Httpd的IO模型使用的select()模型,这种IO模型为端口复用模型,他的并发量只能达到1024。而Nginx的使用了一种epoll的IO模型,这种模型使用事件驱动机制极大的提高了并发量。当然到现今为止,Nginx的功能不仅仅提供web服务。
由上图可知,nginx的进程模型分为两级,一个master进程和多个工作进程。master进程用于负载加载和分析配置文件、管理worker进程、平滑升级。woker进程处理并响应用户请求,worker进程在响应用户请求可以通过异步、事件驱动和非阻塞多种方式;与缓存相关的进程用于加载,管理缓存对象。
Nginx的每个功能由具体模块提供,是高度模块化的,但其模块早期不支持DSO机制;近期版本(1.10及其以上)支持动态装载和卸载。Nginx模块主要分为分类:
1). 核心模块:core module
2). 标准模块:根据功能不同分为三类
3). 第三方模块:用于扩展Nginx https://www.nginx.com/resources/wiki/modules/ 此连接可以看到目前支持的第三方模块。
1). 静态的web资源服务器:图片服务器或js/css/html/txt等静态资源服务器
2). 结合FastCGI/uwSGI/SCGI等协议反代动态资源请求
3). http/https协议的反向代理
4). imap4/pop3协议的反向代理:用于处理邮件协议,此处不涉及
5). tcp/udp协议的请求转发: 使用stream模块
这些功能除了imap4/pop3协议的反向代理其他的都会通过模块的方式在后续的文章中一一介绍。
我们将会使用两种方式来安装Nginx,一种是通过yum安装,一种使用源码安装。
操作系统版本:
一般没有什么特许要求我们都是通过信任的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
~]# yum install -y nginx
查看安装包安装了哪些文件
~]# rpm -ql nginx | less
启动nginx服务
~]# systemctl restart nginx
访问nginx服务
看到此页面说明nginx启动成功
一般我们都会使用yum安装,因为它更便于升级管理。而我们之所以对源码进行编译是因为版本出现了大的漏洞,或者我们需要第三方模块提供的功能。
~]# yum groupinstall -y "Desktop Platform Development" "Server Platform Development" "Development Tools"
查看yum源中的包组可以使用 yum grouplist 命令,如果使用此命令查看的包组名是中文那么在安装是要使用中文安装。
~]# yum install -y install pcre-devel zlib-devel openssl-devel
pcre:perl 兼容的正则表达式库,他为nginx 的核心和rewrite模块提供正则表达式功能
zlib:用于Nginx为Gzip模块提供头部压缩功能
openssl:为Nginx SSL模块提供HTTPS协议支持
我们编译最新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
说明: 之所以创建软连接是因为后期版本的升级时,我们只需要修改软连接即可。而且一旦新版本有问题我们只需修改软连接指向就可以回退到老版本。
C语言编写的程序是有多个原文件组成的,而且文件与文件之间具有依赖关系。所以我们需要特定的项目管理工具对其进行管理,使得程序在编译的时候可以根据依赖关系依次进行。在Linux平台上常用的项目管理工具为GUN make,make在编译时会根据其makefile配置文件中定义的次序对其进行编译。
makefile文件如何生成: 在程序编写完成后,会使用autoconf为程序代码生成一个脚本文件configure,这个脚本文件会收集当前系统的开发环境中所依赖的各组件的版本,和其依赖的环境是否满足,最后会更具makefile.in生成makefile文件
makefile.in文件如何生成: 在程序编写完成后,会使用autoconf为程序代码生成一个makefile模板文件makefile.in
--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启动后才生成的,所以此处看不到。如下图:
https://www.nginx.com/resources/wiki/modules/ 可以看到可用的第三方模块。此次我们会使用阿里巴巴的nginx-http-footer-filter模块进行
编译
记得清楚原有编译结果,在重新展开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
启动服务
~]# /usr/local/nginx/sbin/nginx start
可以看到配置生效了。
此模块的详细用法请看链接https://github.com/alibaba/nginx-http-footer-filter/tree/1.2.2
前期的一些步骤就省略了
~]# ./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/
标签:程序编写 stat nginx服务 min 源码安装 核心 log 相关 配置yum源
原文地址:http://blog.51cto.com/13589448/2070319