源码安装Nginx

于2020年12月28日重新修正编辑。
于2021年8月3日重新修正编辑。

Nginx简介

是一款免费开源的高性能 HTTP 代理服务器及反向代理服务器软件。

常用于

  1. 反向代理
  2. 负载均衡
  3. 动静分离
  4. 高可用集群

参考资料:官方网站YSOcean博客b站课程

下载安装包

下载链接:官方下载

  • 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运维之道》第四章
posted @ 2020-04-28 21:50  努力吧阿团  阅读(236)  评论(0编辑  收藏  举报