Nginx源码编译安装全过程
作者:姐姐,我还可以
Nginx是一个高性能的HTTP和反向代理服务器,具有异步非阻塞机制和轻量级的特点,它适用于多种场景,如Web网站服务、虚拟主机、反向代理、负载均衡和Web缓存服务器,Nginx的配置简洁,使用方便,具有较高的稳定性和抗并发能力
Nginx
Nginx的特点
最核心的区别在于Nginx 采用异步非阻塞机制 ,多个连接可以对应一个进程;Apache 采用的是同步阻塞+多进程/线程模型,一个连接对应一个进程
- Nginx 抗并发能力更高
- Nginx 更轻量,内存、CPU资源消耗更少
- Nginx 配置简洁,使用场景多,稳定性高
Nginx的使用场景
- 用作Web网站服务,处理http静态页面请求
- 用作虚拟主机,实现一个服务器用于做多个网站站点
- 用作反向代理、负载均衡,可以作为网关代理服务器接收客户端的请求转发给后端节点服务器集群
- 用作web缓存服务器
Nginx 有哪些进程
- master进程:管理worker进程,加载配置文件
- worker进程:处理请求连接
root 和 alias 指定路径的区别
root(根目录)
处理方式: root路径+location路径
例:
#nginx.conf 配置示例
location /abc {
root /var/www;
}
url访问:
http://<IP>/abc/kfc/test.html
test.html文件存放在
/var/www/abc/kfc/test.html
http://IP地址/abc/kfc/test.html ------>> /var/www/abc/kfc/test.html
alias(别名目录、虚拟目录)
alias路径替换location路径
例:
#nginx.conf 配置示例
location /abc {
alias /var/www;
}
url访问:
http://<IP>/abc/kfc/test.html
test.html文件存放在
/var/www/kfc/test.html
http://IP地址/abc/kfc/test.html ------>> /var/www/kfc/test.html
使用源码编译安装Nginx
准备工作
- 关闭安全防护系统
systemctl disable firewalld.service --now setenforce 0 SELINUX=enforcing --> SELINUX=0


- 下载源码安装包,并上传至/opt目录下
当前我选择 Nginx1.25.5,以便等会进行平滑升级到最新版本 Nginx1.26.0
使用XFTP进行文件传输——上传到/opt目录下

- 解压文件到当前目录
cd /opt tar xf nginx-1.25.5.tar.gz ll

- 创建运行用户、组
useradd -M -s /sbin/nologin nginx id nginx

安装依赖包
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

编译安装Nginx
cd /opt/nginx-1.25.5/ ./configure \ --prefix=/usr/local/nginx \ #指定nginx的安装路径 --user=nginx \ #指定用户名 --group=nginx \ #指定组名 --with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计 make && make install ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令



检查、启动、重启、停止 nginx服务
- 检查nginx服务配置
nginx -t #检查配置文件是否配置正确

- 启动nginx服务
/usr/local/nginx/sbin/nginx netstat -lntp | grep 80

- 查看PID进程号
cat /usr/local/nginx/logs/nginx.pid ##只有在运行时才能查看PID号

- 停止nginx服务
kill -3 <PID号> kill -s QUIT <PID号> killall -3 nginx killall -s QUIT nginx

- 重启nginx服务
kill -1 <PID号> kill -s HUP <PID号> killall -1 nginx killall -s HUP nginx
配置 Nginx 系统服务
方法一
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20
#description:Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$COM
;;
stop)
kill -s QUIT $(cat $PID)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PID)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
chmod +x /etc/init.d/nginx #添加执行权限
chkconfig --add nginx #添加为系统服务
systemctl start nginx
netstat -lntp | grep 80


方法二
vim /lib/systemd/system/nginx.service [Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target chmod 754 /lib/systemd/system/nginx.service systemctl start nginx.service systemctl enable nginx.service
说明
[Unit]:服务的说明 Description:描述服务 After:依赖,当依赖的服务启动之后再启动自定义的服务 [Service]服务运行参数的设置 Type=forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。 ExecStart为服务的具体运行命令 ExecReload为重启命令 ExecStop为停止命令 PrivateTmp=True表示给服务分配独立的临时空间 注意:启动、重启、停止命令全部要求使用绝对路径 [Install]服务安装的相关设置,可设置为多用户


访问Nginx页面
浏览器访问:
http://<本机IP>:80

平滑升级Nginx
准备工作
- 查看当前安装Nginx的版本及已模块
nginx -v #查看当前安装的Nginx版本 nginx -V #查看当前安装的Nginx已安装的模块

下载新版本源码安装包,并上传至/opt目录下

解压文件到当前目录
cd /opt tar xf nginx-1.26.0.tar.gz ll

编译安装新版本Nginx
cd /opt/nginx-1.26.0/ ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module --with-http_ssl_module make mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old #备份老版本Nginx cp objs/nginx /usr/local/nginx/sbin/nginx #将新版本的Nginx移动到安装目录 make upgrade #要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的,而不是通过查找环境变量中那个 nginx 命令启动的 #或者先 killall nginx ,再/usr/local/nginx/sbin/nginx




验证
- 查看Nginx是否正常启动
netstat -lntp | grep 80

- 检查当前Nginx的版本
nginx -v

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。




