Nginx 从0到1学习

学习nginx之前首先我需要了解目前主流的服务器的优缺点以及他的应用场景

  • Nginx优点:负载均衡、反向代理、处理静态文件优势。nginx处理静态请求的速度高于apache;
  •  Apache优点:相对于Tomcat服务器来说处理静态文件是它的优势,速度快。Apache是静态解析,适合静态HTML、图片等。
  • Tomcat:动态解析容器,处理动态请求,是编译JSP\Servlet的容器,Nginx有动态分离机制,静态请求直接就可以通过Nginx处理,动态请求才转发请求到后台交由Tomcat进行处理。

Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache较适合。

真的日常工作中,一般的项目还是用nginx+tomcat来做会多一点。

Nginx的编译安装

1.官网

www.nginx.net

下载所需要的nginx软件包

2.安装编译工具

yum install -y gcc gcc-c++ autoconf automake 

3.解压-编译-安装

1)解压

2)编译设置,在编译之前需要设置好,安装路径,可执行文件的路径,配置文件的路径,等等能想到的几乎都有,没有的话,自己开发也可以,因为nginx支持二次开发,模块拓展

互联网或者该命令可以查看你为什么需要该模块

 ./configure --help 
./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx/nginxpid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/

Nginx的启动,停止,平滑重启

1.nginx的启动

 /usr/sbin/nginx -c /etc/nginx/nginx.conf

-c是指定配置文件 

2.nginx的停止

使用nginx命令
[root@192 nginx-1.22.1]# /usr/sbin/nginx  -s  stop 
使用信号

kill -信号类型  `cat /var/run/nginx/nginx.pid`

一些Nginx支持的信号 

1)查看进程号:其中master是主进程,或者直接查看上边配置的nginx.pid

2.) 从容停止

从容是指,比较安全的停止nginx,比如未处理完成的连接,处理完成之后停止

[root@192 nginx-1.22.1]# kill -QUIT   ` cat /var/run/nginx/nginx.pid ` 

3)快速停止

[root@192 nginx-1.22.1]# kill -TERM   ` cat /var/run/nginx/nginx.pid ` 

4)强制停止

kill -9 进程号

5)平滑重启

1.重启之前,检查配置文件是否错误
[root@192 nginx-1.22.1]# /usr/sbin/nginx -t   -c /etc/nginx/nginx.conf
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
2.信号执行重新装载配置文件

修改配置文件

[root@192 nginx]# echo  this is a index2.html > /usr/html/index2.html
#我在此处运行的脚本的底层就是KILL -s HUP `cat PATH` 的指令 
[root@192 nginx]# ./auto-nginx.sh  rl
[root@192 nginx]# curl 127.0.0.1

自动启动停止脚本

#!/bin/bash 

NGINX="/usr/sbin/nginx"
PID="/var/run/nginx/nginx.pid"

restart()
{
        if [ -f $PID ]
        then
                echo "Nginx will be killed ! "
                stop
                sleep 1
        fi
        start
}

start()
{
        if [ -f $PID ]
        then
                echo "Nginx is already runing ! "
        else
                $NGINX
                echo "Nginx is  runing ! "
        fi
}

stop()
{
        if [ -f $PID ]
        then
                kill  -s QUIT ` cat $PID `
                echo "Nginx is stopped ! "
        else
                echo "Nginx is already stop ! "
        fi
}

reload()
{
        if [ -f $PID ]
        then
                kill -s HUP `cat $PID`
        fi
}
case $1 in
        "sr") start
        ;;
        "so") stop
        ;;
        "rl") reload
        ;;
        "rs") restart
        ;;
        *) echo "please entry the current word " 
                ;;
esac
       


平滑升级

这是说,当我使用Nginx某个模块的时候发现没有安装该模块,又不想停止该Nginx业务

这就起到作用了


1)备份之前的Nginx程序  

[root@192 nginx]# cp /usr/sbin/nginx /usr/sbin/nginx.bak

2)重新编译Nginx,覆盖原安装目录,执行安装

[root@192 nginx-1.22.1]# pwd
/root/nginx/nginx-1.22.1
[root@192 nginx-1.22.1]# ./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/test/error.log --pid-path=/var/run/nginx/nginxpid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/

和上一次编译的区别是我修改了日志文件的位置,这无关紧要

3)执行平滑升级可执行程序命令

[root@192 nginx-1.22.1]# kill -USR2  `cat /var/run/nginx/nginx.pid`
[root@192 nginx-1.22.1]# cd /var/run/
console/        faillock/       lock/           mount/          nginx/          setrans/        tmpfiles.d/     user/           
cryptsetup/     firewalld/      log/            netreport/      plymouth/       sudo/           tuned/          vmware/         
dbus/           initramfs/      lvm/            NetworkManager/ sepermit/       systemd/        udev/           
[root@192 nginx-1.22.1]# cd /var/run/nginx/
[root@192 nginx]# ls
nginx.pid  nginx.pid.oldbin

 可以看到旧版本的pid被命名为一个后缀为old的文件,并且此时会启动新的工作进程,他们共同处理事务

4)从容退出旧的进程

可以看到旧的work已经不再工作

5)决定使用新旧版本

完成平滑升级

6)检查是否更新成功

验证成功

问题:

启动显示: nginx: [emerg] open() "/var/run/nginx/nginxpid" failed (2: No such file or directory)

我手动创建了该目录,但是当我的虚拟机重启,该目录就消失了

解决方法: 在配置文件当中配置这样一项

pid        /var/run/nginx/nginx.pid;

然后再创建目录

 mkdir /var/run/nginx 
 chown  nginx:nginx /var/run/nginx/

在编写shell脚本的时候,restart()函数 的时候,前提条件是我的Nginx已经被关闭

然后我执行了三次脚本的restart

1.Nginx被启动,没什么问题

2.Nginx被关闭,关闭提示语,到了应该开启的部分他却直接显示已经运行而不是刚打开

针对于本次问题:我认为是刚刚结束掉进程需要一段时间完成,再去开启下一个指令,因此我加入了sleep 1 完成debug

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值