CentOS 下编译安装 Nginx

yum rpm 安装 Nginx 真的 so easy 现在我来教你如何编译安装 nginx 其实也很简单

1. 下载解压#

cd /usr/local/src
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar zxvf nginx-1.16.1.tar.gz
cd nginx-1.16.1/

2. 执行编译安装命令:#

./configure --prefix=/usr/local/nginx
错误信息:
checking for OS
+ Linux 3.10.0-327.el7.x86_64 x86_64
checking for C compiler ... not found
./configure: error: C compiler cc is not found
解决方法:安装gcc
yum -y install gcc

错误信息:
./configure: error: the HTTP rewrite module requires the PCRE library.
解决方法:安装pcre-devel
yum install pcre-devel

错误信息:
./configure: error: the HTTP gzip module requires the zlib library.
解决方法:安装zlib-devel
yum install zlib-devel

再次执行
./configure --prefix=/usr/local/nginx

正确的结果显示:

CentOS 下编译安装 Nginx

3. 执行 make && make install#

make && make install

现在在 /usr/local 下就有了 nginx 安装目录

4. 如何启动 Nginx#

cd /usr/local/nignx
启动nginx:
./sbin/nginx

5.Nginx 目录介绍:#

cd /usr/local/nignx
会发现 nginx 安装目录下会发现有四个目录其中
conf: 配置目录
html 网页文件
logs 日志文件
sbin 主要的二进制程序文件
启动 nginx 的时候可能会遇到很多问题 比如 80 端口被占用 可以通过:
netstat -antp 查看是哪个程序占用了 80
然后
kill -9 进程 PID 杀死进程 或者
pkill -9 httpd 杀死该程序的所有进程 我这里模拟的杀死 httpd 的所有进程
也有可能出现 80 端口没有开放的事情 如何查看 80 是否开放?
firewall-cmd –query-port=80/tcp 返回 no 说明 80 端口没开放
firewall-cmd –add-port=80/tcp 开放 80 端口号

6.Nginx 的关闭和重启#

如何重启 nginx 呢? ps aux | grep nginx // 首先查看一下 nginx 的进程有哪些

CentOS 下编译安装 Nginx

你会发现怎么两个 nginx 第一个是 master 主进程 第二个是子进程 真正干活的是第二个 worker 子进程
master 负责管理这些子进程!

重启 nginx 我们可以使用 nginx 当中的信号量#

第一种:-INT
ps aux | grep nginx

CentOS 下编译安装 Nginx
可以看到 nginx 的主进程的 PID

kill -INT 7450 //直接干死nginx主进程 直截了当

然后进入到

cd /usr/local/nginx
./sbin/nginx

完成 nginx 的重启工作!

这种方式很暴力 万一用户在下单 刚付完钱 但是数据没入库 就歇菜了!太暴力了!

第二种:quit
优雅的关闭进程 即等请求结束后再关闭
ps aux | grep nginx

CentOS 下编译安装 Nginx
可以看到 nginx 的主进程 PID

kill -quit 7450 //优雅的杀掉主进程 等到请求结束再关闭

然后进入到

cd usr/local/nginx
./sbin/nginx

完成 nginx 的重启工作

这种方式比较优雅!等请求结束后再杀死 nginx 的主进程!

第三种:hup
hup 是你改了 nginx 的配置文件 重读配置文件 它会实现平滑重启
假设 nginx 的主进程还是 7450
这个时候你修改了配置文件 需要重新启动
只需执行:

kill -hup 7450 //会平滑重启 在完成前边请求的前提下重新取读取配置文件 完成平滑重启 客户无感知!

整个过程不断线 nginx 的主进程 PID 不变 因为没杀死进程啊!平滑的去重读了 nginx 的配置文件而已整个过程不断线 nginx 的主进程 PID 不变 因为没杀死进程啊!平滑的去重读了 nginx 的配置文件而已

其他的重启 关闭 nginx 的方式:

CentOS 下编译安装 Nginx

进入 nginx 的安装目录

cd /usr/local/nginx 
./sbin/nginx -s stop //关闭nginx服务
./sbin/nginx -s reload //相当于重读配置文件 其他类似 自己去试试吧!

总结一下:

1.检测配置语法
/usr/local/nginx/sbin/nginx -t

2.启动服务
/usr/local/nginx/sbin/nginx

3.重载服务
/usr/local/nginx/sbin/nginx -s reload
pkill -HUP nginx

4.关闭服务
/usr/local/nginx/sbin/nginx -s stop
pkill nginx

7.Nginx 的排查错误机制:#

./sbin/nginx -t  //这条命令会告诉你 你的nginx配置文件是否配置正确  不正确又错在了哪里

8. 设置开机启动 Nginx

cd /lib/systemd/system/
vim nginx.service    //没有就是新建
[Unit]
Description=nginx service
After=network.target 

[Service] 
Type=forking 
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true 

[Install] 
WantedBy=multi-user.target

[Unit]:服务的说明

Description:描述服务
After:描述服务类别
[Service]:服务运行参数的设置

Type=forking:后台运行的形式
ExecStart:服务的具体运行命令
ExecReload:重启命令
ExecStop:停止命令
PrivateTmp=True:表示给服务分配独立的临时空间
注意:[Service] 的启动、重启、停止命令全部要求使用绝对路径。
[Install]:
运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为 3。

设置开机启动:设置开机启动:#
systemctl enable nginx

重启测试

init 6 
systemctl status nginx.service

访问浏览器,成功!
可能会用到的命令:

systemctl start nginx.service          //启动
systemctl stop nginx.service           //停止
systemctl restart nginx.service        //重新启动
systemctl status nginx.service         //查看状态
systemctl enable nginx.service         //设置开机启动
systemctl disable nginx.service        //停止开机启动
systemctl list-units --type=service    //查看所有已启动的

访问 ip 地址出现如图所示就成功啦:
CentOS 下编译安装 Nginx

声明一点:
php 和 nginx 的集合的时候容易出错的地方:
如图所示 红线处写成你 php 文件所在的位置 不要用系统默认的 $script 哈!如果你想知道 $script 是啥东西 你自己去百度 nginx 下如何支持 echo 语法!

CentOS 下编译安装 Nginx

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军