当前位置: 首页 > backend >正文

Linux之Nginx安装及配置原理篇(一)

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等浏览器都可访问

请添加图片描述

http://www.xdnf.cn/news/6826.html

相关文章:

  • 设计模式 - 单例模式 - Tips
  • 面试真题 - 高并发场景下Nginx如何优化
  • 开源安全大模型Foundation-Sec-8B实操
  • C语言_动态内存管理
  • 18.自动化生成知识图谱的多维度质量评估方法论
  • (9)python开发经验
  • NDS3211HV单路H.264/HEVC/HD视频编码器
  • math toolkit for real-time development读书笔记一三角函数快速计算(1)
  • Guided Filtering相关记录
  • 牛客网NC22222:超半的数
  • 登高架设作业人员的职业发展方向有哪些?
  • Lazada测评补单系统搭建指南:从环境到账号的要点把控
  • 深入解析Shell脚本编程:从基础到实战的全面指南
  • L52.【LeetCode题解】二分法习题集1
  • BigemapPro小技巧:如何只显示特定区域内的点
  • Linux 内核版本详解
  • 数据中心末端配电监控产品
  • STM32F407VET6实战:CRC校验
  • Python-homework
  • 1Panel应用推荐:Beszel轻量级服务器监控平台
  • UE RPG游戏开发练手 第二十七课 普通攻击2
  • 使用Mathematica制作Lorenz吸引子的轨道追踪视频
  • 海盗王3.0的数据库3合1并库处理方案
  • 【全解析】EN18031标准下的SUM安全更新机制
  • VBA技术资料MF306:删除与正则表达式匹配的文件
  • 10 大医学数据集汇总:覆盖问答/推理/真实临床记录/超声图像/CT 影像……
  • 多网卡管理实战指南:原理、问题分析与实用工具推荐
  • vs2019及以后版本cmd指定编译环境文件的路径
  • Linux》Ubuntu》安装Harbor 私有仓库
  • Manim教程:第12章 函数,函数图像和文字的渲染