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不支持长连接,所以这里指定了协议版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/259405.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

原子学习笔记3——使用tslib库

一、tslib介绍 tslib 是专门为触摸屏设备所开发的 Linux 应用层函数库,并且是开源。 tslib 为触摸屏驱动和应用层之间的适配层,它把应用程序中读取触摸屏 struct input_event 类型数据(这是输入设备上报给应用层的原始数据)并进行…

Elasticsearch常见面试题

文章目录 1.简单介绍下ES?2.简单介绍当前可以下载的ES稳定版本?3.安装ES前需要安装哪种软件?4.请介绍启动ES服务的步骤?5.ES中的倒排索引是什么?6. ES是如何实现master选举的?7. 如何解决ES集群的脑裂问题8…

SpringBoot-XXLJOB提供动态API调度任务

目录 一、项目版本 二、XXL-JOB提供动态API controller层 service层 三、SpringBoot项目 pom model XxlJobUtil-工具类 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&…

Gateway网关-网关的cors跨域配置

目录 一、跨域 二、解决方案 三、实际测试 3.1 html调用接口 3.2 跨域问题复现 3.3 application文件中配置CORS 3.4 问题解决 一、跨域 跨域问题:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题 跨域:…

第四节TypeScript 声明变量

1、typescript变量声明 变量是一种使用方便的占位符,用于引用计算机内存地址。 我们可以把变量看做存储数据的容器。 typescript变量的命名规则: 变量名称可以包含数字和字母。除了下划线_和美元$符号外,不能包含其它特殊字符&#xff0c…

基于Alpha-Beta剪枝树的井字棋人机博弈系统的实现

这篇文章讨论了算法的基本概念与特性,并介绍了五种常见的算法类型:分治法、动态规划、贪心算法、回溯法和分支限界法。文章以井字棋博弈中的Alpha-Beta剪枝树作为示例,详细解释了该算法的应用和原理。Alpha-Beta剪枝树是一种用于实现游戏AI的…

Python数据加密:保障信息安全的最佳实践

更多资料获取 📚 个人网站:ipengtao.com 随着信息技术的发展,数据安全成为越来越重要的议题。在Python中,有多种方法可以用于数据加密,以确保敏感信息在传输和存储过程中不被泄露或篡改。本文将详细介绍Python中数据加…

智能优化算法应用:基于梯度算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于梯度算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于梯度算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.梯度算法4.实验参数设定5.算法结果6.参考文献7.MA…

服务器数据恢复-EMC存储raid5磁盘物理故障离线的数据恢复案例

服务器数据恢复环境&故障: 一台emc某型号存储服务器,存储服务器上组建了一组raid5磁盘阵列,阵列中有两块磁盘作为热备盘使用。存储服务器在运行过程中有两块磁盘出现故障离线,但是只有一块热备盘激活,最终导致该ra…

文件操作入门指南

目录 一、为什么使用文件 二、什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 三、文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 四、文件的顺序读写 ​编辑 🌻深入理解 “流”: 🍂文件的顺序读写函数介绍: …

系列十四(面试)、谈谈你对StackOverflowError的理解?

一、StackOverflowError 1.1、概述 StackOverflowError是栈内存溢出的意思。栈中主要存储的是8种基本数据类型 引用类型 实例方法,栈的空间也是有限的,当存储进栈中的容量大于栈的最大容量时,就会报StackOverflowError的错误。 1.2、案例 …

如何入门 GPT 并快速跟上当前的大语言模型 LLM 进展?

入门GPT 首先说第一个问题:如何入门GPT模型? 最直接的方式当然是去阅读官方的论文。GPT模型从2018年的GPT-1到现在的GPT-4已经迭代了好几个版本,通过官方团队发表的论文是最能准确理清其发展脉络的途径,其中包括GPT模型本身和一…

最详细手把手教你安装 Vivado2017.4

软件下载 官网可下载各个版本 百度网盘链接 Vivado2017.4 License 软件安装 解压缩安装包,双击运行安装程序 xsetup.exe: 忽略软件更新,点击 Continue: 点击 Next: 全部勾选 I Agree,点击 Next&#x…

从0到1打造一款WebStyle串口调试工具

Tip:No Ego Some programmers have a huge problem: their own ego. But there is no time for developing an ego. There is no time for being a rockstar. Who is it who decides about your quality as programmer? You? No. The others? Probably. But can …

Python (十二) NumPy操作

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

程序员的20大Git面试问题及答案

文章目录 1.什么是Git?2.Git 工作流程3.在 Git 中提交的命令是什么?4.什么是 Git 中的“裸存储库”?5.Git 是用什么语言编写的?6.在Git中,你如何还原已经 push 并公开的提交?7.git pull 和 git fetch 有什么…

计算机网络(3):数据链路层

数据链路层属于计算机网络的低层。 数据链路层使用的信道主要有以下两种类型: (1)点对点信道。这种信道使用一对一的点对点通信方式。 (2)广播信道。这种信道使用一对多的广播通信方式。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这…

制作PPT找了一个校徽是方形的,如何裁剪为圆形的。

问题描述:制作PPT找了一个校徽是方形的,如何裁剪为圆形的。 问题解决:使用一个在线圆形裁剪软件即可。 网址为: https://crop-circle.imageonline.co/cn/#google_vignette

css实现边框彩虹跑马灯效果

效果展示 代码实战 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-…

VWAP 订单的最佳执行方法:随机控制法

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…