源码安装Nginx
于2020年12月28日重新修正编辑。
于2021年8月3日重新修正编辑。
Nginx简介
是一款免费开源的高性能 HTTP 代理服务器及反向代理服务器软件。
常用于
- 反向代理
- 负载均衡
- 动静分离
- 高可用集群
下载安装包
下载链接:官方下载
- Mainline version 开发版
- Stable version 稳定版
- Legacy version 以往版本
根据实际情况下载,我这里选择最新稳定版nginx-1.18.0版本
使用weget下载rz上传,这里建议使用迅雷下载,再上传到服务器,wget下载有时会很慢
#使用wget,-P指定路径
$ wget http://nginx.org/download/nginx-1.18.0.tar.gz -p ./soft/
#安装rz上传工具
$ yum install -y lrzsz
$ rz -eb #回车选择ningx安装包
安装依赖环境
依赖环境需要提前安装,否则编译时会报错。
#安装必要库
$ yum install -y gcc-c++ \
pcre pcre-devel \
zlib zlib-devel \
openssl openssl-devel \
gd gd-devel \
perl perl-ExtUtils-Embed
#查看是否安装
$ rpm -qa pcre pcre-devel
参考资料: 可能遇到的错误
编译安装
参考资料:功能模块介绍
#解压
$ tar -zxvf nginx-1.18.0.tar.gz
$ cd nginx-1.18.0
$ ./configure --prefix=/usr/local/nginx
#nginx基于模块化设计,每个模块代表一个功能,可以在编译时使用with开启模块功能
./configure --prefix=/usr/local/nginx \
--with-file-aio \
--with-http_auth_request_module \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-http_perl_module=dynamic \
--with-pcre \
--with-pcre-jit \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-mail \
--with-mail_ssl_module
#编译安装
$ make && make install
#查看版本
$ nginx -v
#查看版本以及开启的模块
$ nginx -V
加入全局变量
$ vim /etc/profile.d/nginx.sh
#我的nginx二进制文件在/usr/local/nginx/sbin,所以添加如下内容
export PATH=/usr/local/nginx/sbin:$PATH
#生效配置文件
$ source /etc/profile
服务操作命令
启动Nginx服务
#绝对路径启动主程序
$ /usr/local/nginx/sbin/nginx
#如果加入全局变量后可直接在任意目录启动程序
$ nginx
#指定配置文件启动主程序
$ nginx -c /usr/local/nginx/conf/nginx.conf
重启Nginx服务
Nginx没有重启命令,所谓重启就是先停止Nginx服务再启动服务。
#第一种方式
$ nginx -s stop
$ nginx
#第二种方式
$ killall nginx
$ nginx
#不重启服务,重新加载配置文件
$ nginx -s reload
关闭Nginx服务
这里的stop跟quit都是信号,关于信号后续会说明。
#强制关闭服务,不管是否有正在活动的连接,即不管是否有人正在访问nginx服务
$ nginx -s stop
#如当前有请求正在处理,那么处理完成后才关闭nginx服务,也叫优雅的关闭
$ nginx -s quit
#杀死所有nginx进程
$ killall nginx
检查配置文件命令
检查配置文件语法是否正确,不写路径默认检查nginx.conf配置文件
$ nginx -t -c /usr/local/nginx/conf/nginx.conf
$ nginx -t
-t等同于-T,但-T选项会在语法正确时,将配置文件中的内容输出到屏幕中,我们可以重定向到文件用于备份配置文件
$ nginx -T > nginx.conf.bak
访问Nginx服务
80端口会被防火墙拦截,需要关闭防火墙或者添加相应访问策略。
参考资料: firewall-cmd命令使用
#关闭防火墙即可访问
$ systemctl stop firewalld
#添加访问策略允许80端口被访问
$ firewall-cmd --add-service=http --permanent
$ firewall-cmd --add-port=80/tcp --permanent
$ firewall-cmd --reload
#查看防火墙状态
$ firewall-cmd --list-all
这里介绍两种本地访问的方式,一般在客户端使用浏览器访问即可。
#使用wget本地访问
$ wget 127.0.0.1
#使用curl本地访问
$ curl 127.0.0.1
查看服务是否运行
#查看服务是否运行
$ ps -ef | grep nginx
#查看默认80端口是否开放
$ netstat -lnt|grep 80
$ yum -y install lsof
$ lsof -i :80
查看Nginx使用到的文件和目录
$ rpm -ql nginx
高亮配置文件
#进入源码包解压目录
$ cd nginx-1.18.0
$ cp -r contrib/vim/* /usr/share/vim/vimfiles/
日志文件路径
这里有访问日志跟错误日志
#Nginx会将进程号保存在nginx.pid文件中
$ ls /usr/local/nginx/logs/
access.log error.log nginx.pid
Nginx信号
-s
选项是向运行的nginx进程发送信号。
Nginx有如下四种信号
-
quit信号
停止nginx服务,不再接收新的请求,但执行此命令之前接收到的请求还会处理。 -
reload信号
不停止服务的情况下重载配置文件。 -
reopen信号
用于实现日志分割。参考资料: 日志分割 -
stop信号:立即停止ningx服务。
也可使用kill信号来实现
附录
Nginx内置模块说明
常用kill信号
语法
#优雅关闭Nginx服务,等同于Nginx的quit信号
$ kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
#重新加载配置文件,等同于Nginx的reload信号
$ kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
#快速关闭Nginx服务,等同于Nginx的stop信号
$ kill -INT `cat /usr/local/nginx/logs/nginx.pid`
$ kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
#日志分割,等同于Nginx的reopen信号
$ kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
master进程是负责管理worker进程,我们向master进程发送信号时,master进程就会根据捕捉到的信号来管理worker进程。我们能向master进程发送如下信号:
TERM或者INT:表示立即停止nginx
QUIT:表示优雅的停止nginx
HUP:重载配置文件
USR1:重新打开日志文件
USR2:热升级nginx程序
WINCH:优雅的关闭相应的worker进程
我们也可以向worker进程发送信号,worker进程能接收的信号为:
TERM信号或INT信号
QUIT信号
USR1信号
WINCH信号
具体参考:朱老师博客-Nginx(9)
学习来自YSOcean博客, 朱老师博客-Nginx短篇(1)(3)(9),b站课程,《Linux运维之道》第四章