Nginx02-Nginx虚拟主机介绍、日志介绍、Location规则介绍

news2024/10/5 15:07:31

目录

  • 写在前面
  • Nginx
    • Nginx处理用户请求流程
    • 虚拟主机
      • 虚拟主机的分类
        • 基于域名的虚拟主机
        • 基于端口的虚拟主机
        • 基于IP的虚拟主机
    • Nginx日志
      • 错误日志
        • 案例
      • 访问日志
        • 访问格式变量
        • 案例
    • Location规则
      • 案例1
      • 案例2
      • Location规则小结

写在前面

这是Nginx第二篇,内容为Nginx处理用户请求流程、虚拟主机、日志简介、Location简介等。
上篇笔记 Nginx01-HTTP简介与Nginx简介(安装、命令介绍、目录介绍、配置文件介绍)

Nginx

Nginx处理用户请求流程

  • DNS解析,域名->IP;
  • TCP三次握手,与对应端口建立连接。
  • 用户的请求报文:
    • GET /index.html
    • HOST: game.test.com
    • User-Agent: Chrome/xxxx
  • Nginx对http请求交给http区域处理。
    • 不同的server{ }区域(子配置文件)处理:
      • 端口
      • 域名:用户的请求将携带HOST,Nginx根据这个HOST和所有配置文件的server_name进行匹配。
      • 匹配成功后,Nginx确定站点目录root和访问定位location,访问对应的location内的文件。
  • Nginx若找到,回复200 OK文件
    • 响应报文:
      • 状态码:
      • server信息
      • 其他信息
      • 文件内容
    • 浏览器处理收到的文件,进行渲染。
  • Nginx若没找到,根据配置的默认站点,进行访问default_server
    • 若没有默认站点,根据子配置文件字母顺序第一个。

虚拟主机

虚拟主机,相当于一个网站,Nginx中的server{}区域实现。
Nginx中,虚拟主机有不同的类型,配置也不同。

虚拟主机的分类

虚拟主机分类说明应用场景
基于域名的虚拟主机不同域名访问不同的站点。生产环境最常用的。用于多域名网站,每个域名对应一个站点。
基于端口的虚拟主机不同端口访问不同的站点。保护,设置特殊端口(1024以上)。用于多站点共用一个IP地址,通过不同端口来区分。
基于IP的虚拟主机不同IP访问不同的站点。保护,用户只能通过某个IP连接进来。用于多站点,每个站点有独立的IP地址,可以提供更好的安全性和隔离性。
基于域名的虚拟主机

不同的域名访问不同的虚拟主机
同一个ip,多个域名,访问不同的界面

Linux不修改hosts文件访问不同的域名
curl -H Host:域名 ip
例子:curl -H Host:bird.test.com 192.168.100.148

# 书写子配置文件
[root@front conf.d]# cat bird.test.com.conf
server {
        listen 80;
        server_name bird.test.com;
        location / {
                root /app/code/bird/;
                index index.html;
        }
}

#测试并重启
nginx -t
systemctl reload nginx

# 不指定访问文件,报错403
[root@front conf.d]# curl -H Host:bird.test.com 192.168.100.148
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.26.1</center>
</body>
</html>

# 指定访问文件,报错404
[root@front conf.d]# curl -H Host:bird.test.com 192.168.100.148/index.html
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.26.1</center>
</body>
</html>

# 添加index.html后,访问
[root@front conf.d]# echo bird > /app/code/bird/index.html
[root@front conf.d]# curl -H Host:bird.test.com 192.168.100.148/index.html
bird
基于端口的虚拟主机

仅需将server{}中,listen字段的端口号修改即可

# 编写子配置文件
[root@front conf.d]# cat live.test.com.conf
server {
        listen 8011;  #修改此行
        server_name live.test.com;
        location / {
                root /app/code/live/;
                index index.html;
        }
}

# 访问
[root@front conf.d]# curl -H Host:live.test.com 192.168.100.148:8011
live

基于IP的虚拟主机

同样修改listen字段,修改为IP:端口的形式
这样就制定了,什么网段能访问这个虚拟主机
若路径错误,会报错 Failed connect to x.x.x.x:yyy; Connection refused

Nginx日志

默认的日志存放是所有虚拟主机在一个日志文件中。
所以可以设置给每个虚拟主机指定一个自己的独立的错误日志和访问日志

日志类型使用建议定义使用
错误日志记录服务器错误信息,有助于故障排查。发生故障时查看,4xx,5xx错误级别。error_log
访问日志记录用户访问信息,如访问时间、访问页面、客户端信息等。记录用户访问行为。access_log

错误日志

  • error_log指定访问日志位置
    • 格式:error_log 文件名 错误日志级别
    • 位置:main , http , mail , stream , server , location
    • 错误日志级别:debug, info, notice, warn, error, crit, alert, emerg(从左往右,信息记录越来越粗糙)

官网: nginx.org/en/docs Modules reference -> Alphabetical index of directives -> error_log

案例
  • 设置让每个虚拟主机有一个自己的独立的错误日志
# 注释主配置文件错误日志
[root@front conf.d]# grep "#error" ../nginx.conf
#error_log  /var/log/nginx/error.log notice;

# 在子配置文件中,增加错误日志语句
[root@front conf.d]# cat game.test.com.conf
server {
        error_log /var/log/nginx/game.test.com-error.log notice;  # 一般添加在server内location外即可
        listen 80;
        server_name game.test.com;
        location / {
                root /app/code/game/;
                index index.html;
        }
}

# 检查语法并查看日志文件
[root@front conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@front conf.d]# tree /var/log/nginx/
/var/log/nginx/
└── game.test.com-error.log # 检查语法后,会自动添加对应的errorlog

0 directories, 5 files

访问日志

  • log_format 指定访问日志的格式
    • 格式:log_format 格式名字 格式…;
    • 位置:http
  • access_log 指定访问日志路径
    • 格式:access_log 日志位置 格式
    • 位置:http , server , location , if in location , limit_except

在这里插入图片描述

访问格式变量

更多nginx内置变量:http://nginx.org/en/docs/varindex.html

ngx内置变量说明
$remote_addr客户端IP地址
$remote_user用户名(空,进行认证的用户)
$time_local时间(格式:20/Jan/2023:15:04:33 +0800)
$request请求报文的起始行(请求方法、URI、HTTP/1.1)
$statusHTTP状态码
$body_bytes_sent响应给客户的文件大小,响应报文的主体大小(文件大小) 单位字节
$http_referer从哪里跳转,访问到这个网站的。网站运营分析
$http_user_agent客户端代理(浏览器)
$http_x_forwarded_forXFF头,负载均衡器使用,记录用户真实的IP地址
案例
  • 让每个虚拟主机指定自己的独立的访问日志
# 注释主配置文件的访问日志
[root@front conf.d]# grep "access_log" ../nginx.conf
#    access_log  /var/log/nginx/access.log  main;

# 编辑子配置文件,添加access_log语句
[root@front conf.d]# cat game.test.com.conf
server {
        error_log /var/log/nginx/game.test.com-error.log notice;
        access_log /var/log/nginx/game.test.com-access.log main; # 添加该行,main为accesslog中记录的语句的格式
        listen 80;
        server_name game.test.com;
        location / {
                root /app/code/game/;
                index index.html;
        }
}

# 检查语法并查看文件
[root@front conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@front conf.d]# tree /var/log/nginx/
/var/log/nginx/
├── game.test.com-access.log
└── game.test.com-error.log

0 directories, 6 files

访问日志说明描述
访问日志进行压缩可以使用gzip压缩访问日志,以节省磁盘空间。压缩后的日志可以通过zcat、zless或zgrep等工具查看。
进行缓存buffer = 32k 先把日志写入到内存中,定期写入到磁盘
定义刷新时间flush=10s, 每10秒,日志缓冲区中的内容会被写入到磁盘,以防止日志丢失

access_log /var/log/nginx/game.test.com-access.log main gzip buffer=32k flush=10s ;

Location规则

  • 在nginx用于匹配用户请求中的uri进行判断

  • 如果用户请求的uri是xxx,则作xxx

  • URL和URI:

    • URL:https://nginx.org/en/docs
    • URI:/en/docs
  • URI就是URL去除域名之后,/后的部分

案例1

域名:buy.test.com
站点目录:/app/code/buy
后台管理页面:/app/code/buy/admin/index.html
后台只能内网访问

# 编写子配置文件
[root@front conf.d]# cat buy.test.com.conf
server {
        listen 80;
        server_name buy.test.com;
        root /app/code/buy;
        location / {
                index index.html;
        }
        location /admin/ {
                allow 192.168.100.0/24; # 仅允许192.168.100.0网段
                deny all;  # 默认拒绝所有
                index index.html;
        }
}

# 设置目录并重启
[root@front conf.d]# mkdir -p /app/code/buy/admin
[root@front conf.d]# echo buy > /app/code/buy/index.html
[root@front conf.d]# echo buy-admin > /app/code/buy/admin/index.html

[root@front conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@front conf.d]# systemctl restart nginx

# 测试
## 访问没有限制的
[root@front conf.d]# curl -H Host:buy.test.com 127.0.0.1
buy

## 访问外部有限制,403权限错误
[root@front conf.d]# curl -H Host:buy.test.com http://127.0.0.1/admin/
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.26.1</center>
</body>
</html>

# 通过allow的网段访问,正常
[root@front conf.d]# curl -H Host:buy.test.com http://192.168.100.148/admin/
buy-admin


案例2

域名:bird.test.com
网站加速,设置缓存。html、js、css文件缓存一天,图片缓存1h

# 配置子配置文件

[root@front conf.d]# cat bird.test.com.conf
server {
        listen 80;
        server_name bird.test.com;
        root /app/code/bird/; # 每个location区域都是独立的,如果root写在location内,则在指定缓存时的location中也要添加上root
        location / {
                index index.html;
                #root /app/code/bird/;
        }
#uri 包含 html、js、css 结尾的文件缓存一天
#~* 后支持正则表达式
        location ~* \.(html|js|css)$ {
                expires 1d;
        }
        location ~* \.(jpg|jpeg|png|gif|bmp)$ {
                expires 1h;
        }
}

Location规则小结

location规则说明
location / {xxxx}默认规则,保底,location规则在进行匹配的时候,其他的规则都匹配失败了,这时候匹配默认的规则。
location /image/ {}用于匹配请求的uri(路径),例如game.test.com/image/test.txt
location ~ \. (jpg|jpeg)$ {}支持正则,区分大小写,例如game.test.com/test/test.jpg
location ~* \. (jpg|jpeg)$ {}支持正则,不区分大小写,例如game.test.com/test/test.jpg
location ^~ /test/不支持正则,仅仅匹配普通字符,很少使用,但优先级高。
location = /50x.html不支持正则,精确匹配,使用较少,例如匹配/50x.html
location @名字 {}命名的location,一般用于returnerror_log跳转。
  • 匹配优先级:
    | 优先级 | 符号 |
    |--------|------|
    | 1 = | 精确匹配,如location = /50x.html |
    | 2 ^~ | 优先匹配,如location ^~ /test/ |
    | 3 ~ | 区分大小写的正则匹配,如location ~ \. (jpg|jpeg)$ {} |
    | 4 ~* | 不区分大小写的正则匹配,如location ~* \. (jpg|jpeg)$ {} |
    | 5 /image/ | 普通字符匹配,如location /image/ {} |
    | 6 / | 默认匹配,如location / {} |
# 编辑
server {
 listen 80;
 server_name l.test.com;
 default_type text/html;
 location / {
 return 200 "location /\n";
 }
 location = /index.html {
 return 200 "location =/\n";
 }
 location ~ /index.html {
 return 200 "location ~/\n";
 }
 location ^~ /index.html {
 return 200 "location ^~\n";
 }
} 

# 分析?
location = / {
   [ configuration A ]
}
location / {
   [ configuration B ]
}
location /documents/ {
   [ configuration C ]
}
location ^~ /images/ {
   [ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
   [ configuration E ]
}

#测试与访问
 “/”                             A
 “/index.html”                   B
 “/documents/document.html”     C
 “/images/1.gif”                 D
 “/documents/1.jpg”             E

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

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

相关文章

遗传算法+神经网络!基于遗传-神经网络(GA-BP)算法的光伏出力预测程序代码!

前言 准确地预测光伏发电出力对于电力系统运营和稳定性至关重要。随着预测技术的不断进步&#xff0c;越来越多的研究者逐渐意识到遗传算法在优化神经网络在新能源出力预测中的潜力。遗传算法是一种模拟生物进化过程的优化算法&#xff0c;通过不断迭代和选择&#xff0c;搜索…

C++ priority_queue 优先级队列

一.什么是priority_queue&#xff08;优先级队列&#xff09; 优先级队列是一种容器适配器&#xff0c;数据的存储是采用堆的形式实现的&#xff0c;保证第一个元素是优先级队列的最大值或最小值。&#xff08;默认建大堆&#xff09; 默认用vector作为底层数据的存储容器。 二…

聚观早报 | 苹果预热WWDC24;怪兽充电第一季度营收

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月5日消息 苹果预热WWDC24 怪兽充电第一季度营收 vivo Watch GT设计细节 长城汽车关闭欧洲总部 小米MIX Flip将…

MongoDB下载安装入门 + SpringBoot简单集成

MongoDB安装入门 SpringBoot简单集成 MongoDB下载安装下载安装连接图形化界面MongoDB Compass Navicat Premium Spring Boot集成API操作添加maven配置数据库连接调用Mongo API MongoDB下载安装 下载安装 MongoDB官网地址&#xff1a;https://www.mongodb.com/ 下载地址&…

AI-WEB-1 vulnhub靶场

AI-WEB-1 端口扫描 仅开放80端口 访问80端口 啥也没有 目录扫描 查看robots.txt 发现两个新目录 Disallow: /m3diNf0/ Disallow: /se3reTdir777/uploads/全都无权限访问 加入路径后再次扫描目录 发现/m3diNf0/目录下存在info.php&#xff0c;/se3reTdir777/目录下存在ind…

HTML动态爱心

写在前面 本文主要是对某音爆火的html爱心代码做简单的解析&#xff0c;需要代码文末自取哦~ HTML入门 HTML&#xff08;Hypertext Markup Language&#xff09;是一种标记语言&#xff0c;用于创建网页。它由一系列的标签组成&#xff0c;这些标签可以告诉浏览器如何显示网…

先进工艺的DPT技术

“2.5GHz频率 hierarchy DVFS低功耗A72培训” 2.5GHz 12nm 景芯A72 upf DVFS 后端实战训练营&#xff01;随到随学&#xff01; 课程采用hierarchy/partition flow&#xff0c;先完成单核A72实战&#xff0c;然后完成A72 TOP实战&#xff01;训练营简介&#xff1a; Instance&a…

斯坦福抄袭清华、面壁智能大模型,当事人已道歉、删项目

6月4日&#xff0c;两名斯坦福大学生Aksh Garg和Siddharth Sharma&#xff0c;承认抄袭清华和面壁智能联合开发的MiniCPM-Llama3-V2.5&#xff08;以下简称V2.5&#xff09;多模态大模型事件&#xff0c;并在社交平台公开道歉、删掉开源项目。 该抄袭事件也得到了斯坦福大学AI…

【计算机毕业设计】302微信小程序的充电桩管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

「漏洞复现」用友NC pagesServlet SQL注入漏洞(XVE-2024-13067)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

LangChain Agent 最新教程详解及示例学习

LangChain Agent的终极指南&#xff0c;本教程是您使用 Python 创建第一个agent的重要指南&#xff0c;请立即开始你的 LLM 开发之旅。 一、什么是LangChain Agent&#xff08;代理&#xff09; LangChain中代理背后的想法是利用语言模型以及要执行的一系列操作。代理正在使用…

`THREE.BufferGeometry` 是 Three.js 中一个强大的类,用于表示几何体数据。

demo案例 THREE.BufferGeometry 是 Three.js 中一个强大的类&#xff0c;用于表示几何体数据。与传统的 THREE.Geometry 类相比&#xff0c;它使用缓冲区来存储顶点数据&#xff0c;从而在性能上有显著的提升。以下是 THREE.BufferGeometry 的详细说明&#xff0c;包括其输入参…

ARM服务器在云手机中可以提供哪些支持

ARM服务器作为云手机的底层支撑&#xff0c;在很多社媒APP或者电商APP平台都有着很多看不见的功劳&#xff0c;可以说ARM扮演着至关重要的底层支持角色&#xff1b; 首先&#xff0c;ARM 服务器为云手机提供了强大的计算能力基础。云手机需要处理大量的数据和复杂的运算&#x…

Sentinel不使用控制台基于注解限流,热点参数限流

目录 一、maven依赖 二、控制台 三、基于注解限流 四、热点参数限流 五、使用JMeter验证 一、maven依赖 需要注意&#xff0c;使用的版本需要和你的SpringBoot版本匹配&#xff01;&#xff01; Spring-Cloud直接添加如下依赖即可&#xff0c;baba已经帮你指定好版本了。…

沃尔玛、美客多跨境平台自养号全攻略:防关联环境系统搭建与养号技巧

在沃尔玛、美客多等跨境平台进行自养号的过程中&#xff0c;环境系统的选择和账号的养育是至关重要的。以下是我对这两个方面的经验和技巧的总结&#xff1a; 环境系统&#xff1a; 市面上有很多环境系统可供选择&#xff0c;但质量参差不齐。为了实现足够高的伪装度&#xff…

服务器数据恢复—raid5阵列上分配的卷被删除后重建如何恢复被删除卷的数据?

服务器存储数据恢复环境&#xff1a; 某品牌FlexStorage P5730服务器存储&#xff0c;存储中有一组由24块硬盘组建的RAID5阵列&#xff0c;包括1块热备硬盘。 服务器存储故障&#xff1a; 存储中的2个卷被删除&#xff0c;删除之后重建了一个新卷。需要恢复之前删除的一个卷的数…

高舒适性气膜网球馆的注意事项—轻空间

气膜网球馆以其高舒适性、智能恒温等特点&#xff0c;成为现代体育场馆的新宠。在国家提倡全民健身的背景下&#xff0c;各地气膜网球馆如雨后春笋般涌现。然而&#xff0c;在建设和使用气膜网球馆时&#xff0c;需要特别注意以下几点&#xff1a; 1. 避免随意拆装 气膜网球馆…

Three.js——tween动画、光线投射拾取、加载.obj/.mtl外部文件、使用相机控制器

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

[数据集][目标检测]剪刀石头布检测数据集VOC+YOLO格式1973张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1973 标注数量(xml文件个数)&#xff1a;1973 标注数量(txt文件个数)&#xff1a;1973 标注…

SpringBoot接口防抖(防重复提交)

SpringBoot接口防抖&#xff08;防重复提交&#xff09; 概念 Spring Boot接口防抖&#xff08;Debouncing&#xff09;的概念是指在处理请求时&#xff0c;通过一定的机制来防止用户频繁触发同一接口请求&#xff0c;以防止重复提交或频繁请求的情况发生。 在Web应用中&…