Nginx
什么是Nginx
Nginx是十分轻量级的HTTP服务器*。Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器*,同时也是一个IMAP/POP3/SMTP 代理服务器。
Nginx特点
- 稳定性高
- 系统资源消耗低
- 对http并发连接的处理能力高(对单台物理服务器可以支持30000~50000个并发请求)
Nginx与Apache的区别
| Nginx | Apache |
|---|---|
| 基于时间的web服务器 | 基于流程的服务器 |
| 所有请求由一个线程处理 | 单个线程处理单个请求 |
| 避免子进程的概念 | 基于子进程 |
| 内存消耗和可伸缩性不依赖于硬件 | 依赖于CPU核内存等硬件 |
| 支持热部署 | 不支持热部署 |
| 对于静态文件处理具有更高效率 | 相对一般 |
| 在反向代理场景具有明显优势 | 相对一般 |
Nginx应用场景
- 静态服务器(图片、视频服务、文本)
- 动态服务
- 反向代理,负载均衡
- 缓存服务
七层转发和四层转发的区别
-
七层用http,URL进行转发到网页传输(用应用)
通过外部去访问,通过浏览器
-
四层在系统内部进行转发数据(用内核转发)
直接内部就可以通信
- http、HTTPS、Nginx、Apache都是七层代理(应用层)
- Nginx在1.18版本上支持四层代理(传输层)
Nginx编译安装
环境
一台虚拟机
实验
关闭防火墙,上传软件包
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
nginx-1.12.0.tar.gz #安装包版本
安装依赖包
yum -y install \ #安装
pcre-devel \ #perl的接口开发包
zlib-devel \ #提供相应的库和头文件
gcc \ #c语言编译器
gcc-c++ \ #c++编译器
make #编译
创建运行的用户
Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限(如果不创建,在生产环境中是非法的)
useradd -M -s /sbin/nologin nginx
#创建一个nginx用户,不允许登录系统
-M #不生成家目录
-s #指定shell环境
编译安装nginx
tar zxvf nginx-1.12.0.tar.gz -C /opt/
#解压nginx压缩包到opt目录
-C #指定解压存放目录
cd /opt/nginx-1.12.0/
#进入nginx目录
./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
#开启
killall -3 nginx
#一开始不知道Nginx的pid号,就全部停止
可以使用
cat /usr/local/nginx/logs/nginx.pid
#查看nginx的PID号
扩展kill,默认是15(重要)
kill
#不写选项,默认是15,表示正常结束进程
kill -3 pid
#表示退出,实验完成后,退出
kill -9 pid
#表示强制杀死,不管实验做没做出来,直接杀死
| 信号编码 | 信号名 | 含义 |
|---|---|---|
| 0 | EXIT | 程序退出时收到该信息 |
| 1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。 |
| 2 | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。 |
| 3 | QUIT | 退出。 |
| 9 | KILL | 杀死进程,即强制结束进程。 |
| 11 | SEGV | 段错误。 |
| 15 | TERM | 正常结束进程,是 kill 命令的默认信号 |
升级Nginx版本
下载安装包,编译安装
tar zvxf nginx-1.22.0.tar.gz -C /opt
#将升级的版本包解压到opt目录下
cd /opt/nginx-1.12.2
#进入Nginx升级的目录
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
报错
在升级时,直接运行下面命令,可能会出错
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
错误信息为:
没有ssl这个环境,就需要安装一下环境
yum -y install openssl openssl-devel
安装Openssl等
安装之后在执行一下,就会成功
编译、备份
make
#编译
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
#将旧版本的程序,改名字,让系统识别不了
cd objs
#切换进入objs目录,里面有新版本的程序
cp nginx /usr/local/nginx/sbin
#将新版的程序,拷贝到存放主程序的目录里,让他生效
重启服务,查看版本
nginx
#直接打Nginx局可以重启服务
nginx -V
#查看版本
添加Nginx系统服务
方法一
脚本
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: 35 99 20 // 这是固定格式,2345表示运行级别,之后为开机执行顺序和关机执行顺序
#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 stop nginx
systemctl start nginx
service nginx start|stop|restart|reload
系统服务 服务名称 启动模式
方法二
在生产中,先复制一份模板到
cd /lib/systemd/system/
#进入系统目录
cp sshd.service /lib/systemd/system/nginx.service
#复制模板文件(复制的模板文件,要是某程序的.service)
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
将Nginx加入system服务控制里面,这样就可以使用systemctl去控制它
-------------------------------------------------------------------
说明
[Unit]:服务的说明
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务
[Service]服务运行参数的设置
Type=forking是后台运行的形式,使用此启动类型应同时指定
PIDFile以便systemd能够跟踪服务的主进程。
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
[Install]服务安装的相关设置,可设置为多用户
chmod 754 /lib/systemd/system/nginx.service
#给权限
systemctl start nginx.service
#开启nginx服务
systemctl enable nginx.service
#设置开机自启
报错
在配置nginx配置服务时候(不是脚本的情况下)
配置完成后
在开启nginx服务时候,可能会出现报错
报错信息是,80端口被占用
这个时候关闭一下nginx服务
killall -3 nginx
在去使用systemctl命令开启服务,这样就会开启成功