编译安装
安装依赖
gzip模块需要 zlib 库,提供gzip压缩
rewrite模块需要 pcre 库, 提供地址重写
ssl 功能需要openssl库, 提供 ssl 功能
使用yum工具安装 gcc 编译器以及相关工具
使用yum工具安装 gcc 编译器以及相关工具
1 | yum -y install gcc gcc-c++ automake autoconf libtool make |
安装zlib库
1 | # 安装zlib |
安装pcre库
1 | # 安装pcre |
安装openssl库
1 | # 安装ssl |
安装nginx
编译选项: 对于很多场景都适用:
–with-xxx 说明默认情况下是没有指定的。启用该功能。
–without-xxx 说明默认已经指定该选项。不启用该功能。
添加Nginx用户
1 | # 添加用户和组 |
下载解压
1 | # 指定目录解压 |
隐藏 nginx 版本信息
1 | # 进入解压目录, 隐藏 nginx 版本信息 |
默认安装
1 | # 可以按照默认选项 |
自定义安装
1 | # 也可以进行一些自定义 |
编译
1 | # make && make install |
其他模块
安装Tcmalloc(google perfect tool)优化性能
TCMalloc(Thread-Caching Malloc)是google开发的开源工具─“google-perftools”中的成员。与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多。
安装Tcmalloc
1 | # 下载解压 |
重新编译安装 nginx
1 | # 重新配置 |
配置
内核参数优化
在 /etc/sysctl.conf 末尾增加以下内容
1 | # vi /etc/sysctl.conf |
nginx 可执行文件减肥
减小nginx编译后的文件大小 (Reduce file size of nginx)
默认的nginx编译选项里居然是用debug模式(-g)的(debug模式会插入很多跟踪和ASSERT之类),编译以后一个nginx有好几兆。去掉nginx的debug模式编译,编译以后只有几百K
1 | # 在nginx解压目录:vi auto/cc/gcc,最后几行有: |
启动、停止等命令
命令行选项
不像许多其他开源软件,Nginx 仅有几个命令行参数,完全通过配置文件来配置,下面我们列举几个:
1 | -c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的。 |
启动
启动nginx
1 | /usr/local/nginx/sbin/nginx |
然后打开浏览器,访问此机器的IP,如果浏览器出现Welcome to nginx! 则表示Nginx已 经安装,并且已经成功启动,提供服务。 当然,如果开启iptables防火墙,我们要打开80端口:
1 | (1)iptables -I INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT |
停止
nginx从容停止命令,等所有请求结束后关闭服务
1 | ps -ef | grep nginx |
快速停止命令,立刻关闭nginx进程
1 | ps -ef |grep nginx |
平滑重启
如果改变了 nginx 的配置文件,需要nginx 重新读取配置文件才能生效。同样可以发送系统信号给nginx主进程,不过,重启之前要确认 nginx 配置文件的语法是否正确。否则nginx将不会加载新的配置文件。可以通过下面的命令来判断配置文件是否正确:
1 | # -t 选项可以检查配置文件的语法是否正确。 |
当nginx接收到 HUP 信号时,它会尝试先解析配置文件,如果成功,就应用新的配置文件(例如:重新打开日志文件或者监听的套接字)。之后,nginx运行新的work process并从容关闭旧的work process。通知work process关闭监听套接字,但是继续为当前已经连接的客户提供服务。所有的客户端服务完成后,旧的 work process 将被关闭。如果新的配置文件应用失败,nginx将继续使用旧的配置文件进行工作。
启动、关闭、重新加载配置
-s signal : send signal to a master process: stop, quit, reopen, reload
1 | # 启动 |
平滑升级
当需要将正在运行中的 nginx 升级、添加/删除服务器模块时,可以在不中断服务的情况下,使用新版本、重编译的 nginx 可执行程序替换旧版本的可执行程序。步骤如下:
(1) 使用新的可执行程序替换旧的可执行程序,对于编译安装的 nginx,可以将新版本编译安装到旧版本的 nginx 安装路径中。替换之前,最好备份一下旧的可执行文件。
1 | 1、获取旧版本的编译选项: /usr/local/nginx/sbin/nginx -V |
(2) 发送以下指令:
1 | kill -USR2 【旧版本的Nginx主进程号】 # `cat /var/run/nginx/nginx.pid` |
(3) 旧版本 nginx 的主进程将重命名它的 pid 文件为 .oldbin(例如:/var/run/nginx/nginx.pid.oldbin),然后执行新版本的 nginx 可执行程序,依次启动新的主进程和新的工作进程。
1 | root 23715 1 0 21:58 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx |
(4) 此时,新、旧版本的 nginx 实例会同时运行,共同处理输入的请求。要逐步停止旧版本的 nginx 实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭:
1 | kill -WINCH 【旧版本的Nginx主进程号】 # `cat /var/run/nginx/nginx.pid.oldbin` |
(5) 一段时间后,旧的工作进程(worker process)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了。
(6) 这时候,我们可以决定是使用新版本,还是恢复到旧版本:
1 | kill -HUP 【旧的主进程号】:nginx 将在不重载配置文件的情况下启动它的工作进程 |
加载动态模块
Nginx 1.9.11开始增加加载动态模块支持
1 | # 官方支持9个动态模块编译,需要增加第三方模块,使用参数--add-dynamic-module=即可 |
动态模块语法:
1 | load_module |
编译安装
添加
1 | ./configure --with-http_xslt_module=dynamic --with-stream=dynamic --add-dynamic-module=../nginx-rtmp-module |
为动态模块增加了一个新的编译选项,使用 –add-dynamic-module 代替 –add-module,例如
1 | $ ./configure --add-dynamic-module=/opt/source/ngx_my_module/ |
加载一个动态模块
模块可以使用新的 load_module 标识符载入到 NGINX 中,例如:
1 | load_module modules/ngx_my_module.so; |
注意 有一个强限制:一次只能加载 128 个动态模块。 这是在 NGINX 源码的 NGX_MAX_DYNAMIC_MODULES 常量中定义的,可以通过修改此常量放宽限制。
查看编译生成的模块
1 | tinywan@tinywan:/usr/local/nginx/modules$ ls |
配置文件
不加载模块配置文件nginx.conf 最末尾添加
1 | worker_processes 1; |
启动Nginx,提示错误,表示没有加载模块进去
安装编译选项说明指导说明
Nginx安装编译选项说明
make是用来编译的,它从Makefile中读取指令,然后编译。
make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
configure命令是用来检测你的安装平台的目标特征的。它定义了系统的各个方面,包括nginx的被允许使用的连接处理的方法,比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本,执行结束时,它会创建一个Makefile文件。nginx的configure命令支持以下参数:
1 | # 可以通过 ./configure --help 查看Nginx的编译选项。 |
典型实例(下面为了展示需要写在多行,执行时内容需要在同一行)
1 | ./configure \ |
安装过程中的常见错误
1、make 出错
1 | make: *** No rule to make target `build', needed by `default'. Stop. |
2、启动nginx报错
1 | # nginx: [emerg] getpwnam(“www”) failed 错误处理方法,原因: 启动nginx之前,需要添加nginx运行的用户和组 |