Nginx快速入门:安装目录结构详解及核心配置解读(二)
0. 引言
上节我们讲解了nginx的应用场景和安装,本节继续针对nginx的各个目录文件进行讲解,让大家更加深入的认识nginx。并通过一个实操案例,带大家来实际认知nginx的核心配置
1. nginx安装目录结构
首先nginx的默认安装目录为:/etc/nginx
,默认日志目录为:/var/log/nginx
我们在安装目录下可以看到如下文件:
可以通过tree
指令查看树形目录结构
# 注意提前安装tree工具
yum install tree -y
# 查看目录树形结构
tree /etc/nginx
或者大家可以通过rpm -ql nginx
指令,查询到nginx的相关目录
下面我们首先针对nginx的安装目录做详细讲解:
- nginx.conf
nginx的主配置文件
- conf.d
nginx的自定义配置文件存放路径,默认在nginx.conf最后指定了加载conf.d中的所有.conf文件,后续我们自定义配置的转发配置都会存放在该文件夹中
- modules
Nginx的一个重要特性就是支持高拓展性,可以通过灵活的加载各类拓展模块,从而丰富nginx的功能
Nginx的modules文件夹包含了Nginx的各种功能模块。这些模块可以通过配置文件进行加载和启用,以扩展Nginx的功能。modules文件夹中的每个模块都有一个对应的配置文件,这些配置文件定义了模块的具体行为。
- mime.types
Nginx的mime.types文件用于指定不同文件类型的MIME类型。MIME(Multipurpose Internet Mail Extensions)类型是一种用于标识互联网上传输的文件类型的标准。当浏览器或其他客户端请求某个文件时,Nginx会根据文件的扩展名和mime.types文件中定义的规则返回相应的MIME类型。
在这个文件中,你可以定义各种文件类型及其对应的MIME类型。例如,可以将.jpg文件类型定义为image/jpeg,将.html文件类型定义为text/html等
- fastcgi_params
fastcgi配置参数,fastcgi是由CGI(common gateway interface 通用网关接口)发展而来,是nginx和php脚本语言之间的通信接口
- scgi_params
用于处理SCGI(Simple Common Gateway Interface)请求。SCGI是一种简单的CGI实现,它允许Nginx与Python等语言的处理程序进行通信
- uwsgi_params
用于处理uWSGI请求。uWSGI是一种高性能的Python应用Web服务器,它允许Nginx与Python应用程序进行高效交互
其他常用目录或文件解析:
- /usr/share/nginx/html
nginx默认存放静态html页面的目录位置,自带了50x错误码页面和nginx首页
- /var/log/nginx
nginx的日志文件目录,包括error.log和access.log
error.log为nginx报错日志,access.log为nginx访问日志目录,包括了详细的转发请求日志,可以记录请求的来源ip、客户端设备、目标ip、耗时、请求头、请求方式等,该日志在企业生产中非常常用,能够为我们排查接口请求问题和分析请求耗时提供有力的帮助。下一节我们将详细介绍如何自定义该日志文件格式
- /usr/sbin/nginx
nginx的二进制脚本,包括启动、停止、重启等指令
2. nginx核心配置项
nginx的默认核心配置文件nginx.conf,nginx的配置项总共可分成6个模块:
- 全局段:全局配置,对全局生效;
- events段:配置影响 Nginx 服务器与用户的网络连接;
- http段:配置代理、缓存、日志等功能和第三方模块的配置,基本是nginx中最常用的配置;
- server段:配置虚拟主机的相关参数,一个 http 块中可以有多个server 块;
- location段:用于配置匹配的uri
- upstream段:配置后端服务器具体地址,负载均衡配置
下面详细讲解6个部分:
- 1、全局段核心参数
user nginx; # 指定我们Nginx服务的运行用户
worker_processes 1; # 定义Nginx的worker进程数量,一般与服务器CPU核数保持一致
worker_processes auto; # 与当前cpu物理核心数一致
error_log /var/log/nginx/error.log warn; # 指定Nginx错误日志
pid /var/run/nginx.pid; # 指定Nginx PID进程号文件
daemon off ; 指定 Nginx 的运行方式,默认是on,后台运行模式;前台用于调试,后台用于生产
- 2、events段核心参数
worker_connections 1024; # 指定Nginx当前一个worker进程的最大并发连接数,即并发能力
- 3、http段核心参数
include /etc/nginx/mime.types; # 应用文件拓展名和文件类型映射文件
default_type application/octet-stream; # 默认文件类型,当Nginx无法识别当前访问页面内容时,触发下载动作
log_format main
'$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
# 指定Nginx访问日志格式,下节详细讲解
access_log /var/log/nginx/access.log main; # 定义Nginx访问日志的位置
sendfile on; # 开启文件传输模式
keepalive_timeout 65; # 连接保持超时时间,单位秒,值为0时表示不超时,当Nginx建立TCP连接之后,多长时间没有动作,自动断开
include /etc/nginx/conf.d/*.conf; # 加载自定义的配置文件
#tcp_nopush on; # 减少网络报文段的数量
send_timeout 60s; # 如果在设置的时间内 Nginx 还没有将响应完全发送出去,则会返回 “408 Request Time-out” 错误,默认为60s
keepalive_timeout 60s; # 用于设置 Nginx 保持连接的超时时间。当浏览器发送请求时,如果它已经与 Nginx 建立了连接,则可以直接使用该连接发送请求,而不需要再次建立连接。这样就可以减少建立连接的开销,提高性能
gzip on; # 开启 gzip 文件压缩,浏览器加载的包大概能节约一半的空间,能够很好的提升浏览速度。gzip压缩的详细参数见下文
gzip_vary on; #设置使用Gzip进行压缩发送是否携带“Vary:Accept-Encoding”头域的响应头部
gzip_comp_level 6; #设置Gzip压缩程度,级别从1-9,1表示程度最低,效率最高,9压缩程度最高,效率最低最费时间
gzip_min_length 1k; #设置允许压缩的页面最小字节数
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss; #压缩的文件类型
我们在conf.d/default.conf
可以看到默认的转发配置,我们借此解读下server段、location段配置
- 4、server段核心参数:
listen 80; # 监听的端口
server_name www.xxx.com; # 通过什么网址、域名请求过来的;可以设置多个,用英文逗号隔开
#error_page 404 /404.html; # 访问路径不存在时的显示页面
error_page 500 502 503 504 /50x.html; # 内部报错的显示页面
- 5、location段核心参数
location / { # 根路径 uri
root /html/xxx; # 网站的根目录位置,即静态页面目录
index index.html; # 指定首页文件
}
proxy_pass http://127.0.0.1/xxx/; # 配置转发的路径或负载均衡upstream别名,后文详细讲解
proxy_connect_timeout 3s; # 连接后台服务器的超时时间
proxy_read_timeout 3s; # 从后台服务器读取数据的超时时间
proxy_send_timeout 3s; # 向后台服务器发送数据的超时时间
- 6、upstream段核心参数
upstream test { # 负载均衡配置别名,一般配合proxy_pass使用,比如proxy_pass http://test/;
server 192.168.0.1 weight=1; # 以权重1:2转发至两个服务
server 192.168.0.2 weight=2;
}
3. 配置案例
实现需求:
配置nginx,实现当访问nginx时轮询转发至后台的两个tomcat服务
实现步骤:
1、准备两个tomcat服务,充当后台服务,将其中一个tomcat的端口修改为8081,并且调整两个tomcat的首页,显示其对应的端口号,后续好区分对应的服务
tomcat安装包下载:https://tomcat.apache.org/download-80.cgi
vim /data/tomcat1/webapps/ROOT/index.jsp
2、注意虚拟机放开8080,8081端口、或者关闭防火墙,访问tomcat验证下
3、修改conf.d/default.conf
中的配置
# 后台服务地址,自定义一个负载均衡别名tomcat
upstream tomcat {server 192.168.244.41:8080;server 192.168.244.41:8081;
}server {listen 80;server_name localhost;location / {proxy_pass http://tomcat; # 通过别名实现负载均衡转发proxy_set_header HOST $host; # 代理过程中添加host头部信息,防止通过ip访问时域名解析不到,不能被server_name解析到proxy_http_version 1.1; # 指定http协议版本}
}
如果转发的后台服务只有一个,那么proxy_pass
就可以直接配置转发的服务地址,也不用配置upstream负载均衡了
4、检测nginx配置并重启服务
# 检测nginx配置,如果输出 success 字样则表示检测成功,nginx配置无语法错误
nginx -t
# 热加载重启,nginx采取热部署的方式,重启期间不会中断服务
nginx -s reload
5、配置好后我们访问虚拟机ip,通过刷新可以看到可以轮询访问到两个不同的后台tomcat
总结:
如上,我们通过upstream定义了要转发的后台tomcat服务的列表,如果不做特殊定义,默认的负载均衡算法就是轮询算法,后续我们会单独开一章来详细说明nginx的负载均衡配置。
然后在server中定义了监听的端口是80端口,这样当我们通过80端口进来的访问就会进入到这个转发配置中
因为这里没有什么特殊的域名,所以server_name就定义了一个localhost
location后指定了/
, 表示对所有路径生效,如果我配置的是/xxx
,则只有当我们访问192.168.244.41/xxx
开头的链接时才会走该转发配置
proxy_set_header
参数的作用是可以设置指定的header给后台服务,这里配置了Host header, 即转发了用户访问的真正域名,否则后端服务得到的是nginx的ip, 这样对于一些动态拼接的地址,后端服务可以在服务器正确返回
proxy_http_version 1.1
指定了http协议的版本,nginx代理默认http协议版本是1.0,而http1.0不支持长连接,所以这里指定了协议版本
相关文章:

Nginx快速入门:安装目录结构详解及核心配置解读(二)
0. 引言 上节我们讲解了nginx的应用场景和安装,本节继续针对nginx的各个目录文件进行讲解,让大家更加深入的认识nginx。并通过一个实操案例,带大家来实际认知nginx的核心配置 1. nginx安装目录结构 首先nginx的默认安装目录为:…...
测试TensorFlow/PyTorch的GPU版本是否启用
文章目录 1. Pytorch测试代码2. TensorFlow测试代码 后续遇到好的会不断更新。。。 1. Pytorch测试代码 import torch def gpu_is_available():print(\nGPU details:)print(f gpu_is_available : , torch.cuda.is_available())print(f cuda_device_count : , t…...

字符串逆序输出
逆序输出就是本来abc输出的,然后我想让他输出成cba,那么我们还是要用到for循环,只不过原先是从零开始往上加,这回呢,是从上面往下减 我们观察上面这个图片,我们想要输出olleh,那么我们就要从4开…...

期货平仓日历(期货平仓日期汇总)
什么是期货平仓日历? 期货是一种高风险高收益的投资品种。而期货交易不同于股票等其他投资品种的交易,期货交易需要在一定时间内才能买卖。而期货平仓日历就是指期货交易中规定的所有合约的平仓日期汇总。 常见期货平仓日期和时间? 不同的…...

计算机网络-进阶
目录 易混淆物理层数据链路层网络层nat如何实现私有ip通信IP数据报 格式解析tcp 连接tcp流量控制滑动窗口拥塞控制 报文捕获 wireshark路由模拟器 enspcdn代理服务器 VS cdn VS web cache 计算机有了物理地址,为什么还要有ip地址?单播 多播 广播 传输层会…...

LED恒流驱动芯片SM2188EN:满足LED灯具出口欧盟所需的ERP能效认证标准和要求
LED灯具是一种节能环保的照明产品,因其高效节能、长寿命等优点而备受消费者青睐,成为照明市场的主流产品。作为LED灯具出口欧盟市场的必备条件,ERP能效认证标准和要求对LED灯具的能效性能提出了严格的要求。 首先,ERP能效认证标准…...

RocketMQ系统性学习-RocketMQ原理分析之消费者的接收消息流程
🌈🌈🌈🌈🌈🌈🌈🌈 【11来了】文章导读地址:点击查看文章导读! 🍁🍁🍁🍁🍁🍁dz…...

butterfly蝴蝶分类
一、分类原因 由于植物分类所使用的数据集存在一定问题,修改起来比较麻烦,本次采用kaggle的ButterflyMothsImageClassification数据集,对100这种蝴蝶进行分类。 二、100中蝴蝶类别 ‘ADONIS’,‘AFRICAN GIANT SWALLOWTAIL’,‘AMERICAN S…...

计算机基础:网络基础
目录 一.网线制作 1.制作所需要工具 网线制作标准 编辑 2.水晶头使用 3.网线钳使用 4.视频教学 二.集线器、交换机介绍 1.OSI七层模型 2.TCP/IP四层参考模型 3.集线器、交换机。路由器介绍 集线器 交换机 路由器 区别 三.路由器的配置 1.路由器设置 说明书 设…...
[原创][R语言]股票分析实战[3]:周级别涨幅趋势的相关性
[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…...

MSVC编译 openssl windows 库
开发需要在windows下集成 openssl 库,参考官方指导完成了编译:openssl/NOTES-WINDOWS.md at master openssl/openssl 不过,最后还是走了直接下载的捷径。 1. 安装 ActivePerl 需要在 ActiveState 注册账户,之后彼会提供具体的…...
electron兼容统信UOS系统过程中的坑
这里写目录标题 找统信支持人员咨询过,他们说不对electron提供支持,如果需要兼容统信UOS还是建议换个开发技术gbm_bo_map--no-sandboxNo protocol specified任务栏图标总结 找统信支持人员咨询过,他们说不对electron提供支持,如果…...
Flink系列之:Apache Kafka SQL 连接器
Flink系列之:Apache Kafka SQL 连接器 一、Apache Kafka SQL 连接器二、依赖三、创建Kafka 表四、可用的元数据五、连接器参数六、特性七、Topic 和 Partition 的探测八、起始消费位点九、有界结束位置十、CDC 变更日志(Changelog) Source十一…...

灰盒测试简要学习指南!
在本文中,我们将了解什么是灰盒测试、以及为什么要使用它,以及它的优缺点。 在软件测试中,灰盒测试是一种有用的技术,可以确保发布的软件是高性能的、安全的并满足预期用户的需求。这是一种从外部测试应用程序同时跟踪其内部操作…...

【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 快慢指针 移动零 class…...

springboot解决XSS存储型漏洞
springboot解决XSS存储型漏洞 XSS攻击 XSS 攻击:跨站脚本攻击(Cross Site Scripting),为不和 前端层叠样式表(Cascading Style Sheets)CSS 混淆,故将跨站脚本攻击缩写为 XSS。 XSS(跨站脚本攻击):是指恶意攻击者往 Web 页面里插…...

I.MX6ULL_Linux_驱动篇(47)linux RTC驱动
RTC 也就是实时时钟,用于记录当前系统时间,对于 Linux 系统而言时间是非常重要的,就和我们使用 Windows 电脑或手机查看时间一样,我们在使用 Linux 设备的时候也需要查看时间。本章我们就来学习一下如何编写 Linux 下的 RTC 驱动程…...

详解IBM企业架构框架模型CBM
(一):什么是CBM IBM的CBM是组件化业务模型(Component Business Model),是IBM在2003年提出的一种业务架构方法论。 目的是通过将企业的业务活动划分为一些独立、模块化、可重用的业务组件,来识…...

宝塔面板安装MySQL数据库并通过内网穿透工具实现公网远程访问
文章目录 前言1.Mysql 服务安装2.创建数据库3.安装 cpolar3.2 创建 HTTP 隧道 4.远程连接5.固定 TCP 地址5.1 保留一个固定的公网 TCP 端口地址5.2 配置固定公网 TCP 端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了 Linux 命令行进行繁琐的配置,下面简单几步,通…...

Elasticsearch 性能调优基础知识
Elastic Stack 已成为监控任何环境或应用程序的实际解决方案。 从日志、指标和正常运行时间到性能监控甚至安全,Elastic Stack 已成为满足几乎所有监控需求的一体化解决方案。 Elasticsearch 通过提供强大的分析引擎来处理任何类型的数据,成为这方面的基…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...