Nginx安装及配置
前情回顾
-
首先针对Nginx进程模型,我们回顾一下它的原理机制,我们知道它是通过Master通过fork分发任务节点给予
work节点
,然后work节点触发了event
事件,之后通过一个access_muttex互斥锁
,来单线程
调用我们的资源,之后就完成了服务间资源的调度和分配了 -
在Nginx模型中有很多服务模块供我们使用,比如
核心模块
HTTP模块、EVENT模块、MAIL模块,还有一些常用模块及其一些第三方模块HTTP fastcgi、HTTP Proxy等模块 -
关于这些模块我们可以按功能可以分为三大类
handler处理模块、Filters模块以及Proxy代理模块
,Handler用于处理请求,Filters对请求进行过滤,Proxy用做代理服务器,使用应用场景可以参考下图:
Nginx安装流程
首先检查外网环境是否能正常使用和检查yum是否能正常使用
- 检测网络能否正常连接
若网络无法正常使用:建议检查DNS服务、网卡信息以及yum国内源是否已经配置,防火墙是否正常关闭,然后重启网卡
- 安装Nginx依赖环境
# PCRE库安装
yum -y install pcre-devel.x86_64
# 切换安装路径
cd /usr/src
# 这里以Nginx1.26.1版本为例,首先进行源码的安装
wget -c http://nginx.org/download/nginx-1.26.1.tar.gz
# 解压tar.gz包
tar -xzf nginx-1.26.1.tar.gz
# 进入Nginx解压目录,修改Nginx版本信息为JWS(预防机型兼容问题)
cd nginx-1.26.1
sed -i -e 's/1.26.1//g' -e 's/nginx\//JWS/g' -e 's/"NGINX"/"JWS"/g' src/core/nginx.h
# 预编译
useradd www # 创建用户
userdel -r www 2>/dev/null || true; # 若存在重复用户,予以删除
# 编译依赖环境说明:这一部分表示创建用户(useradd -r -s /sbin/nologin www),http_stub_status_module(用于检查Nginx是否为运行状态)、 http_ssl_module(启用http和ssl支持),http_realip_module(如果有cdn或负载均衡,此模块能记录真实的ip),http_gzip_static_module(使用gzip对模块进行压缩)
useradd -r -s /sbin/nologin www && ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module
# 编译并安装
make&&make install
#检查是否安装成功,看到ok就安装成功啦!
/usr/local/nginx/sbin/nginx -t
#启动Nginx并检查后台进程运行状态
/usr/local/nginx/sbin/nginx #启动命令
ps -ef | grep nginx #检查后台进程是否运行(需要看到master,worker)
############ 至此Nginx就安装成功了 ############
我们看到运行能成功运行后的进程使用情况如下:
并且此时我们就可以通过访问我们本机网卡本机ip就可以访问了我们的Ngixn服务了
Nginx服务无法正常使用如何排查解决方案
- 首先检查服务状态是否正常
/usr/local/nginx/sbin/nginx -s reload #修改Nginx配置需要使用该配置文件加载Nginx配置
/usr/local/nginx/sbin/nginx -s stop #暂停Nginx服务
/usr/local/nginx/sbin/nginx #启动Nginx服务
关闭了Nginx服务
- 如果Nginx服务在关闭时出现报错,有进程和端口占用的情况
ps -ef | grep nginx #排查Nginx进程占用情况
- 使用kill命令杀进程
## 第一种方式 直接通过服务名删除
pkill -9 nginx
## 第二种方式(我是根据我的图片哈,大家只需要看自己占用的进程号即可) 通过ps命令查看后,选择占用的进程号进行杀死
kill -9 5182 && kill -9 5183
- 然后通过该命令继续排查,若没有输出内容,则表示无Nginx服务在运行
netstat -tnlp | grep nginx ## 检查服务
netstat -tnlp | grep -E "80|443" ##检查服务是否有端口占用
检查端口是否还在正在运行
【处于运行状态】
【处于非运行状态】
- 上述问题排查后发现还有问题,可以检查一次防火墙状态,观察是否开放端口或者保持关闭防火墙
# 防火墙状态
systemctl status firewalld.service
# 防火墙打开
systemctl start firewalld.service
# 防火墙关闭
systemctl stop firewalld.service
# 防火墙重启
systemctl restart firewalld.service
防火墙打开,我们就需要开放80端口
# 开放端口使用命令
firewall-cmd --zone=public --add-port=80/tcp --permanent
开放80端口
,之后重启防火墙,让配置生效
防火墙关闭
Nginx配置文件详解
我们安装完Nginx服务器之后,就让我们一起来聊聊Nginx服务器以便于我们后期更好的运维和管理Nginx服务器
首先Nginx服务器是存放在/usr/local/nginx/conf/nginx.conf
路径下,下面我们就来分析一下nginx.conf这个配置文件相关信息吧!!!
- 首先来查询一下Ngixn中worker进程使用情况(
监测worker状态
)
ps -eo psr,pid,args | grep nginx
-
监测Nginx占用cpu利用率
top -p $(pgrep -d ',' nginx)
下面我们进入这个文件来分析一下这个文件
user nobody
这里代表Ngiinx指定运行的用户和用户组worker_processes
则负责cpu内核进程数的调整events
则代表事件处理模块error_log代表错误日志存放位置
,后面的notice、info
错误日志优先级(notice>info)pid
代表Nginx主进程id路径地events
代表事件处理模块忙着里面用worker_connectin
设置了worker线程的最大连接数,当然我们也还可以在这里面设置其他属性设置worker进程,比如说multi-accept on
加上这个属性可以让worker进程一次接收多个连接
HTTP模块之虚拟服务器配置
- Http属性配置部分
在Http模块中,include
里面包含中其他配置文件,senfile
用于高效文件传输,keepalive_timeout
代表保持连接超时的时间,gzip
用于压缩.
- Server定义的虚拟机部分
- 在Server模块中的配置通常会设置
listen监听端口
、定义server_name
,以及根据设置location
的值设置网页所在的根目录
,以及在该目录下要查找的页面索引
- 在设置
location
属性时,如果我们单个的将页面都填入index
索引,显然会显得十分繁琐,为此我们引入了URL匹配规则和处理方式精准匹配(=)、前缀匹配(^~)、正则匹配(~或~*)
- 在
location
中可以设置属性设置root文件系统路径,try_file
来设置顺序查找文件,通过expires
来设置缓存
Nginx虚拟主机实战
5.1虚拟主机
好比虚拟服务克隆技术,针对同一个WEB服务端部署多个网页,这也是我们俗称的一台服务多个站点
5.2 实现步骤:创建两个WEB网页目录,并且分别部署到不同的index.html页面,然后我在我的nginx服务器上部署两个不同的Web站点,端口位于同一端口
虚拟服务server组成(listen、server_name、location
)
# 1. 打开nginx.conf文件
vim /usr/local/nginx/conf/nginx.conf
# 2.在HTTP模块中增加server模块(增加2个虚拟服务)
server{
listen 80;
server_name www.111.com;
access_log logs/exp.access.log; #日志文件
location /{
root html/tt1; #web系统目录
index index.html index.htm; #索引
}
}
server{
listen 80;
server_name www.666.com;
access_log logs/exp2.access.log; #日志文件
location /{
root html/tt2; #web系统目录
index index.html index.htm; #索引
}
}
# 3.dns域名服务加载,修改hosts文件目录c://windows/system32/divers/hosts,这里将www.111.com和www.666.com放在本地hosts路径实现ip路径映射(host 文件加入内容---->主机IP 映射域名 例如:10.2.53.5 www.666.com)
# 5.切换目录,创建网页
cd /usr/local/nginx/html/
mkdir {tt1,tt2}
# 将index.html拷贝一份用户查看虚拟主机创建效果
cp index.html tt1/
cp index.html tt2/
#可以尝试改变index.html内容后面访问域名可以加以区分
# 4.重启nginx-reload服务
/usr/local/nginx/sbin/nginx -s reload
``
注意不要用谷歌浏览器
进行访问可以用IE、Firefox等浏览器都可访问