目录
1.nginx的安装:
1.将压缩包上传到 centos的 /home/software 目录下(目录可以更改)
2.安装依赖环境:
2.1 安装 gcc环境:
yum install gcc-c++
2.2 安装PCRE库,用于解析正则表达式;
yum install -y pcre pcre-devel
2.3 zlib压缩和解压缩依赖:
yum install -y zlib zlib-devel
2.4 SSL 安全的加密的套接字协议层,用于 HTTP安全传输,也就是https
yum install -y openssl openssl-devel
3.解压:解压后得到的是源码,源码需要编译后,才能安装
tar -zxvf nginx-1.18.0.tar.gz 【注意:下载的版本号】
4. 编译之前,先创建nginx的临时目录,若不创建,在启动 nginx时会报错:
mkdir /var/temp/nginx -p
5. 在nginx目录,输入如下命令进行配置【注意:是一次性输入,不是一行一行的输入】,目的是为了创建makefile文件
【注意:进入到nginx 中直接 将下面的命令复制即可,我的是nginx ,是因为改名字了,原来是 nginx-1.18.0 】
======================================================================
-
./configure \
-
--prefix=/usr/local/nginx \
-
--pid-path=/var/run/nginx/nginx.pid \
-
--lock-path=/var/lock/nginx.lock \
-
--error-log-path=/var/log/nginx/error.log \
-
--http-log-path=/var/log/nginx/access.log \
-
--with-http_gzip_static_module \
-
--http-client-body-temp-path=/var/temp/nginx/client \
-
--http-proxy-temp-path=/var/temp/nginx/proxy \
-
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
-
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
-
--http-scgi-temp-path=/var/temp/nginx/scgi
======================================================================
但是在我的Linux上创建不了,显示找不到目录,所以使用第二种方法:
在/home/software/nginx目录下 执行:
./configure
6. make编译:【在nginx目录下输入】
make
7.安装:
make install
7.1 通过命令找nginx是否安装成功
whereis nginx
8.进入 /usr/local/nginx/sbin目录启动nginx:
9.打开浏览器,
9.1 若是在虚拟机上,则访问虚拟机所处内网ip即可打开nginx默认页面,
9.2 若是在云服务器上,则则访问公网ip即可打开nginx默认页面,
如果nginx启动,但是在浏览器上打不开,参考一下:https://www.cnblogs.com/chenleideblog/p/10499807.html 。
2.Nginx显示默认首页过程解析:
192.168.1.172 是虚拟机所处内网ip,80是端口号
在 /usr/local/nginx/conf 目录下:
打开 nginx.conf.default 文件:
1. listen:监听的端口号: 默认的是80,也可以更改为88或其他。【当端口是80时,可以省略】
2.server_name:是请求时的IP。(我的是 虚拟机所以是localhost,也可以是备案好的域名)
当 IP和端口号都符合时,就会映射到 root(根目录), html是个文件夹,和conf同一级别
在html文件夹中有 index.html
所以当IP 和端口都符合时,就会默认打开 index.html(注意:是 index 的第一个 index.html,不是第二个,如果想要更改,也是修改第一个 )
3. nginx的进程模型:
默认情况下:worker 和 master进程数量 都只有一个
1. 配置 worker 进程数量:
进入 /usr/local/nginx/conf目录
vi nginx.conf
修改 worker_processes 的值 ,我改为 2
保存退出 ,
先检测一下配置文件是否有错:
../sbin/nginx -t 【注意:目前我在conf目录下所以用了 ../sbin ,转到了conf同级目录的sbin下】
没有报错
然后重新加载:
../sbin/nginx -s reload
最后再次查看进程:
ps -ef|grep nginx
现在是 一个 master进程,两个 worker进程
master接收外界的信号,进行分析,然后传递给worker进行。
master会监控worker,若worker因为异常退出,master会重新启动新的worker。
4. Nginx处理web请求机制解析:
1.worker的抢占机制:
假设 有 一个 master 和三个 worker
有一个请求,三个worker通过争抢 accept_mutex 来决定谁来处理请求
worker1发现 Client1阻塞,会处理 Client2,若Client2也阻塞,则处理Client3
5. Nginx.conf 配置结构:
6. nginx.conf 配置文件详解:
6.1.worker进程用户:
查看进程:
也可以设置为:user root;
6.2. worker进程数量:
worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行,目前我设置为2个
6.3. nginx 日志:
nginx 日志级别 debug | info | notice | warn | error | crit | alert | emerg ,错误级别从左到右越来越大 。【级别越大,信息显示越少】
在安装nginx时,就设置日志路径:
6.4. events
用的Linux系统,默认就使用epoll,要是Mac,就要更换,
worker的连接数不能太高(硬件配置高一些,2万-3万也可以,配置低的话,就默认的就可以:1024)
6.5.keepalive
客户端连接服务器的一个超时时间(单位是秒):
在处理完客户端请求后,保持一个超时时间,在此期间,若有其他请求进来,会直接处理,而不是重新创建一个连接来处理,
就很大程度节约开销,但是 keepalive 也占用资源,不宜过多。
7.解决 nginx.pid 打开失败:
原因有两个:1./var/run/nginx 目录不存在 。 或 2. nginx.pid 文件不存在。
首先查看 目录是否存在,若不存在,则创建:
cd /var/run/nginx
mkdir /var/run/nginx
目录创建好了,再次回到 sbin目录下,重新加载,失败,显示 PID有些问题
重新 指定 nginx.conf
命令(在sbin目录下): ./nginx -c /usr/local/nginx/nginx.conf
8.Nginx常用命令解析:
1.关闭nginx:
1.1 在sbin目录下: ./nginx -s stop 这是暴力 关闭nginx,使用此命令,即使有用户正在访问,也会立即停止。
1.2 在sbin目录下: ./nginx -s quit 有用户正在请求,会维持这个连接,直至请求完成才会终止关闭。
2.检测配置是否正确:
./nginx -t
当配置文件发生更改,要检测配置文件是否正确。
3.查看版本号:
./nginx -v 【v是小写的】
9. Nginx日志切割:
nginx日志的存放目录是在安装时就设置好的,但是每天的日志都放在一起,一年以后文件就会非常大,所以按照每天进行切割。
1.先进入 : cd /usr/local/nginx/sbin 目录,
2.创建一个shell可执行文件: cut_my_log.sh ,内容为:
创建命令: vi cut_my_log.sh
内容为:
======================================================
======================================================
3.保存关闭
4. 赋给操作权限: chmod +x cut_my_log.sh
赋给权限 前后 文件名颜色对比
5. ./cut_my_log.sh
6.查看:
执行: /usr/local/nginx/sbin/cut_my_log.sh
就会生成新的日志
在 /usr/local/nginx/logs 目录下查看
10. Nginx日志定时切割:
1.安装定时任务(在本地虚拟机中不需要安装,在云服务器上需要安装):
2.查看定时任务列表:
crontab -l
目前没有
3. crontab -e (编辑并且添加一行新的任务:)
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
4.再次查看:
crontab -l
5.重启定时任务:
server{
#90是一个新的端口号 ,和80区分开
listen 90 ;
# localhost 是因为我是在本地虚拟机上配置的,要是云服务,就公网 ip地址
server_name localhost ;
location / {
# /home/foodie-shop 是我项目所在目录,foodie-shop 是项目名
root /home/foodie-shop;
index index.html ;
}
}
============================================================
3. 编辑 nginx.conf 文件:
vi nginx.conf
在 server 上方 添加:
include imooc.conf ;
4. 在 conf目录下 进行检测:
../sbin/nginx -t