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

news2025/5/18 19:32:09

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.coloradmin.cn/o/2378716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux网络】NAT和代理服务

NAT 之前我们讨论了,IPv4协议中,IP地址数量不充足的问题。 原始报文途径路由器WAN口时,对报文中的源IP进行替换的过程,叫做NAT。 NAT技术当前解决IP地址不够用的主要手段,是路由器的一个重要功能: NAT能…

中药药效成分群的合成生物学研究进展-文献精读130

Advances in synthetic biology for producing potent pharmaceutical ingredients of traditional Chinese medicine 中药药效成分群的合成生物学研究进展 摘要 中药是中华民族的文化瑰宝,也是我国在新药创制领域的重要驱动力。许多中药材来源于稀缺物种&#xf…

【消息队列】RabbitMQ基本认识

目录 一、基本概念 1. 生产者(Producer) 2. 消费者(Consumer) 3. 队列(Queue) 4. 交换器(Exchange) 5. 绑定(Binding) 6. 路由键(Routing …

1T 服务器租用价格解析

服务器作为数据存储与处理的核心设备,对于企业和个人开发者而言至关重要。当涉及到租用 1T 服务器时,价格是大家很为关注的要点。然而,1T 服务器租用一个月的费用并非固定不变,而是受到诸多因素的综合影响。​ 影响 1T 服务器租用…

【JavaWeb】Maven(下)

1 依赖管理 1.1 依赖配置 1.1.1 基本配置 依赖:指当前项目运行所需要的jar包。 一个项目中可以引入多个依赖: 例如:在当前工程中,我们需要用到logback来记录日志,此时就可以在maven工程的pom.xml文件中,引…

openEuler24.03 LTS下安装MySQL8.0.42

目录 前提步骤 删除原有mysql及maridb数据库 安装MySQL 启动MySQL 启动查看MySQL状态 设置MySQL开机自启动 查看登录密码 登录MySQL 修改密码及支持远程连接 远程连接MySQL 前提步骤 拥有openEuler24.03 LTS环境,可参考:Vmware下安装openEule…

gflags 安装及使用

目录 引言 安装 如何用 gflags 库写代码 如何用命令行使用 gflags 库 gflags 库的其他命令行参数 引言 gflags 是 Google 开发的一个开源库,用于 C 应用程序中命令行参数的声明、定义 和解析。 gflags 库提供了一种简单的方式来添加、解析和文档化命令行标…

Linux面试题集合(2)

查看系统磁盘使用,当前目录下所有文件夹的使用情况 df -h du -h 更改目录所有人和所有组,包括里面的文件夹下的文件,递归更改 chown -R newowner:newgroup 目录名 只更改文件所有人或者只更改文件所有组 chown newowner file chgrp newgroup …

致敬经典 << KR C >> 之打印输入单词水平直方图和以每行一个单词打印输入 (练习1-12和练习1-13)

1. 前言 不知道有多少同学正在自学C/C, 无论你是一个在校学生, 还是已经是上班族. 如果你想从事或即将从事软件开发这个行业, C/C都是一个几乎必须要接触的系统级程序开发语言. 虽然现在有Rust更安全的系统级编程语言作为C/C的替代, 但作为入门, C应该还是要好好学的. C最早由B…

基于Llama3的开发应用(二):大语言模型的工业部署

大语言模型的工业部署 0 前言1 ollama部署大模型1.1 ollama简介1.2 ollama的安装1.3 启动ollama服务1.4 下载模型1.5 通过API调用模型 2 vllm部署大模型2.1 vllm简介2.2 vllm的安装2.3 启动vllm模型服务2.4 API调用 3 LMDeploy部署大模型3.1 LMDeploy简介3.2 LMDeploy的安装3.3…

windows 10 做服务器 其他电脑无法访问,怎么回事?

一般我们会先打开win10自己的防火墙策略,但是容易忽略 电脑之间 路由器上的防火墙,此时也需要查看一下,可以尝试先关闭路由器防火墙,如果可以了,再 设置路由器上的防火墙规则。 将路由器的上网设置 改成 路由模式 &a…

Linux进程信号处理(26)

文章目录 前言一、信号的处理时机处理情况“合适”的时机 二、用户态与内核态概念重谈进程地址空间信号的处理过程 三、信号的捕捉内核如何实现信号的捕捉?sigaction 四、信号部分小结五、可重入函数六、volatile七、SIGCHLD 信号总结 前言 这篇就是我们关于信号的最…

报表控件stimulsoft教程:如何在报表和仪表板中创建热图

Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能,Stimulsoft Ultimate包含了…

win32相关(字符编码)

字符编码 ASCII编码 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是最基础的字符编码标准,用于在计算机和其他设备中表示文本 基本概念 7位编码: ASCII使用7位二进制数&#x…

使用Langfuse和RAGAS,搭建高可靠RAG应用

大家好,在人工智能领域,RAG系统融合了检索方法与生成式AI模型,相比纯大语言模型,提升了准确性、减少幻觉且更具可审计性。不过,在实际应用中,当建好RAG系统投入使用时,如何判断接收信息是否正确…

android studio导入项目

如果 gradle-8.0-bin.zip 没有下载成功 可以点击进入这个网站:https://services.gradle.org/distributions/ 找到和自己本版相同的gradle-8.0-bin.zip文件找到自己版本进行下载; 如果下载依赖失败, 可以手动下载依赖编译过程中的jar https://repo.maven.apache.org/…

Autosar Nvm下电存储实现方式-基于ETAS工具

文章目录 前言Autosar Nvm相关定义Nvm Ram Block States状态切换Nvm_WriteAll函数NvBlock配置生成代码分析及使用总结前言 Nvm中存储的数据,一般有两种存储方式,一个是立即存,一个是下电存,之前介绍过立即存的配置,本文介绍下电存的配置及实现 Autosar Nvm相关定义 Nvm…

c# 数据结构 树篇 入门树与二叉树的一切

事先声明,本文不适合对数据结构完全不懂的小白 请至少学会链表再阅读 c# 数据结构 链表篇 有关单链表的一切_c# 链表-CSDN博客 数据结构理论先导:《数据结构(C 语言描述)》也许是全站最良心最通俗易懂最好看的数据结构课(最迟每周五更新~~&am…

Python Bug 修复案例分析:asyncio 事件循环异常引发的程序崩溃 两种修复方法

在 Python 异步编程的工作中,asyncio库为我们提供了高效处理并发任务的强大工具。然而,asyncio在使用过程中也可能因为一些细节处理不当而引发 Bug。下面,我们就来深入分析一个因asyncio事件循环异常导致程序崩溃的典型案例。兴趣的友友可以借…

题单:递归求和

宣布一个重要的事情,我的洛谷有个号叫 题目描述 给一个数组 a:a[0],a[1],...,a[n−1]a:a[0],a[1],...,a[n−1] 请用递归的方式出数组的所有数之和。 提示:递推方程 f(x)f(x−1)a[x]f(x)f(x−1)a[x]; 输入格式 第一行一个正整数 n (n≤100)n (n≤100)…