C++ 网络编程项目fastDFS分布式文件系统(三)-Nginx部分
目录
1. 一些基本概念
1.1 Nginx初步认识
1.2 正向/反向代理
1.3 域名和IP
2. Nginx 安装和配置
2.1 安装
2.2 配置
3. Nginx的使用
3.1 部署静态网页
3.2 反向代理和负载均衡
4 课外知识导读
1. URL和URI
编辑 2. DNS解析过程
1. 一些基本概念
1.1 Nginx初步认识
1.2 正向/反向代理
1. 正向代理
正向代理是位于客户端和原始服务器之间的服务器,为了能够从原始服务器获取请求的内容,客户端需 要将请求发送给代理服务器,然后再由代理服务器将请求转发给原始服务器,原始服务器接受到代理服 务器的请求并处理,然后将处理好的数据转发给代理服务器,之后再由代理服务器转发发给客户端,完 成整个请求过程。
正向代理的典型用途就是为在防火墙内的局域网客户端提供访问Internet的途径 , 比如:
正向代理服务器是为用户服务的

1.3 域名和IP
- 11.22.34.45
2. Nginx 安装和配置
2.1 安装
1. 官方地址 : http://nginx.org/2. Nginx 相关依赖 :OpenSSL: http://www.openssl.org/./configmakemake test (可选)make install ( 使用管理员权限执行该命令 )
密码库使用 https 进行通信的时候使用ZLib 下载 : http://www.zlib.net/数据压缩安装 :./configuremakesudo make installPCRE 下载 : http://www.pcre.org/解析正则表达式安装./configuremakesudo make install
nginx 的安装# nginx 工作时候需要依赖三个库# 三个参数 = 这三个库对应的源码安装目录# 根据自己的电脑的库安装包的位置进行指定./configure --with-openssl = ../openssl-1.0.1t --with-pcre = ../pcre-8.40 --with-zlib = ../zlib-1.2.11makesudo make install

/usr/local/nginxconf - > 存储配置文件的目录html - > 默认的存储网站 ( 服务器 ) 静态资源的目录 [ 图片 , html, js, css]logs - > 存储 log 日志sbin - > 启动 nginx 的可执行程序
/usr/local/nginx/sbin/nginx# 快速启动的方式# 1. 将 /usr/local/nginx/sbin/ 添加到环境变量 PATH 中# 2. /usr/local/nginx/sbin/nginx 创建软连接 , 放到 PATH 对应的路径中 , 比如 : /usr/binln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
# 假设软连接已经创建完毕sudo nginx # 启动
# 第一种 , 马上关闭sudo nginx -s stop# 第二种 , 等 nginx 作为当前操作之后关闭sudo nginx -s quit
sudo nginx -s reload # 修改了 nginx 的配置文件之后 , 需要执行该命令
测试是否安装成功知道nginx 对应的主机的 IP 地址 - > 192.168.1.100在浏览器中访问该IP 地址看到一个welcom nginx的欢迎界面
2.2 配置
1. Nginx配置文件的位置
/usr/local/nginx/conf/nginx.conf

user nobody; # 启动之后的 worker 进程属于谁- 错误提示 : nginx 操作 xxx 文件时候失败 , 原因 : Permission denied- 将 nobody - > rootworker_processes 1; # 设置 worker 进程的个数 , 最大 == cpu 的核数 ( 推荐 )error_log logs/error.log; # 错误日志 , /usr/local/nginxpid logs/nginx. pid ; # pid 文件 , 里边是 nginx 的进程 ID# nginx 的事件处理events {use epoll; # 多路 IO 转接模型使用 epollworker_connections 1024; // 每个工作的进程的最大连接数}http - > server - > 每个 server 模块可以看做一台 web 服务器server {listen 80; # web 服务器监听的端口 , http 协议的默认端口 https: 默认是443 ftp :21 ssh,sftp 22server_name localhost; # 对应一个域名 , 客户端通过该域名访问服务器charset utf8; # 字符串编码location { // 模块 , 处理客户端的请求}# 客户端 ( 浏览器 ), 请求 :http ://192.168.10.100:80/login. html# 服务器处理客户端的请求服务器要处理的指令如何从 url 中提取 ?- 去掉协议 : http- 去掉 IP / 域名 + 端口 : 192.168.10.100: 80- 最后如果是文件名 , 去掉该名字 : login. html- 剩下的 : /服务器要处理的 location 指令 :location /{处 理动作}
3. Nginx的使用
3.1 部署静态网页
/usr/local/nginx/html
应该在 /usr/local/nginx/mkdir /usr/local/nginx/mydir
在 Nginx 服务器上进行网页部署 , 实现如下访问 :在 /usr/local/nginx/ 创建新的目录 , yundisk 用来存储静态网页
/ - > 服务器的资源根目录 , /usr/local/nginx/yundisklogin.htm-> 放到 yundisk 中
服务器要处理的动作
# 对应这个请求服务器要添加一个 locationlocation 指令 ( / ){# 找一个静态网页root yundisk; # 相对于 /usr/local/nginx/ 来找# 客户端的请求是一个目录 , nginx 需要找一默认显示的网页,就是index.html的一个文件。index index . html index .htm;}# 配置之后重启 nginxsudo nginx -s reload
配置文件的内容
访问地址: http://192.168.80.254/hello/reg.html
hello是什么?
是目录
reg.html放到哪儿?
hello目录中
如何添加location
location /hello/{root yundisk;index xx.html;}
访问地址: http://192.168.80.254/upload/ 浏览器显示upload.html
直接访问一个目录, 得到一默认网页。
upload是一个目录, uplaod.html应该再upload目录中
location /upload/{root yundisk;index upload.html; #index 只有访问目录的时候才会生效,否则已经会访问指定的网页。}
3.2 反向代理和负载均衡

1. 需要客户端 - 1 个Window中的浏览器作为客户端2. 反向代理服务器 -> 1 个window作为反向代理服务器3. web 服务器 -> 2 个ubtu - cat: 192.168.91.130ubuntu - copy: 192.168.91.131
1. 反向代理设置
找 window 上对应的 nginx 的配置文件- conf/nginx. conf# 代理几台服务器就需要几个 server 模块# 客户端访问的 url: http://192.168.1.100/login.htmlserver {listen 80; # 客户端访问反向代理服务器 , 代理服务器监听的端口server_name ubuntu.com; # 客户端访问反向代理服务器 , 需要一个域名location / {# 反向代理服务器转发指令 , http:// 固定proxy_pass http ://robin.test.com;}}# 添加一个代理模块upstream robin.test. com{server 192.168.247.91:130;}# luffyserver {listen 80; # 客户端访问反向代理服务器 , 代理服务器监听的端口server_name hello.com; # 客户端访问反向代理服务器 , 需要一个域名location / {# 反向代理服务器转发指令 , http:// 固定proxy_pass http ://luffy.test.com;}}# 添加一个代理模块upstream luffy.test. com{server 192.168.26.250:80;}}

server {listen 80; # 客户端访问反向代理服务器 , 代理服务器监听的端口server_name localhost; # 客户端访问反向代理服务器 , 需要一个域名location / {# 反向代理服务器转发指令 , http:// 固定的头proxy_pass http ://linux.com;}location /hello/ {# 反向代理服务器转发指令 , http:// 固定的头proxy_pass http ://linux.com;}location /upload/ {# 反向代理服务器转发指令 , http:// 固定的头proxy_pass http ://linux.com;}}# 添加一个代理模块upstream linux. com{server 192.168.247.135: 80 weight =1;server 192.168.26.250: 80 weight =3;}## =====================================web 服务器需要做什么 ?# 192.168.247.135location /{root xxx;index xxx;}location /hello/{root xx;index xxx;}location /upload/{root xxx;index xx;}# 192.168.26.250location /{root xxx;index xxx;}location /hello/{root xx;index xxx;}location /upload/{root xxx;index xx;}
4 课外知识导读
1. URL和URI
1. 概念
URL(Uniform Resource Locator): 统一资源定位符表示资源位置的字符串基本格式 : " 协议 ://IP 地址 / 路径和文件名 "x p://xp.is.co.za/rfc/rfc1808.txthttp://www.ietf.org/rfc/rfc2396.txttelnet://192.0.2.16:80/URN(Uniform Resource Name): 统一资源名称P2P 下载中使用的磁力链接URI(Uniform Resource Identifier): 统一资源标识符是一个紧凑的字符串用来标示抽象或物理资源 , URL 是 URI 的一种让 URI 能成为 URL 的当然就是那个 “ 访问机制 ” , “ 网络位置 ” 。 e.g. http:// or x p:// 。files.hp.comtel:+1-816-555-1212x p://xp.is.co.za/rfc/rfc1808.txt (also a URL)http://www.ietf.org/rfc/rfc2396.txt (also a URL)telnet://192.0.2.16:80/ (also a URL)

UIRI 可以没有协议 , 没有地址 (IP/ 域名 )
2. DNS解析过程
1. DNS解析的过程
1. 在浏览器中输入 www.magedu.com 域名,操作系统会先检查自己本地的 hosts 文件是否有这个网址映射关系,如果有,就先调用这个 IP 地址映射,完成域名解析。2. 如果 hosts 里没有这个域名的映射,则查找本地 DNS 解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。Windows 和 Linux 系统都会在本地缓存 dns 解析的记录,提高速度。3. 如果 hosts 与本地 DNS 解析器缓存都没有相应的网址映射关系,首先会找 TCP/IP 参数中设置的首选DNS 服务器,在此我们叫它本地 DNS 服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。4. 如果要查询的域名,不由本地 DNS 服务器区域解析,但该 DNS 服务器已缓存了此网址映射关系,则调用这个 IP 地址映射,完成域名解析,此解析不具有权威性。5. 如果本地 DNS 服务器本地区域文件与缓存解析都失效,则根据本地 DNS 服务器的设置(没有设置转发器)进行查询,如果未用转发模式,本地 DNS 就把请求发至 13 台根 DNS ,根 DNS 服务器收到请求后会判断这个域名 (.com) 是谁来授权管理,并会返回一个负责该顶级域名服务器的一个 IP 。本地DNS 服务器收到 IP 信息后,将会联系负责 .com 域的这台服务器。这台负责 .com 域的服务器收到请求后,如果自己无法解析,它就会找一个管理 .com 域的下一级 DNS 服务器地址 (magedu.com) 给本地DNS 服务器。当本地 DNS 服务器收到这个地址后,就会找 magedu.com 域服务器,重复上面的动作进行查询,直至找到 www.magedu.com 主机。6. 如果用的是转发模式(设置转发器),此 DNS 服务器就会把请求转发至上一级 ISP DNS 服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根 DNS 或把转请求转至上上级,以此循环。不管是本地 DNS 服务器用是是转发,还是根提示,最后都是把结果返回给本地 DNS 服务器,由此 DNS 服务器再返回给客户机。
2. 域名解析服务器
Pod DNS+:首选: 119.29.29.29备选: 182.254.116.116114DNS:首选: 114.114.114.114备选: 114.114.114.115阿里 AliDNS:首选: 223.5.5.5备选: 223.6.6.6
3. hosts文件
# 存储的是域名和 IP 的对应关系-windows 目录 : "C:\Windows\System32\drivers\etc\hosts"
相关文章:

C++ 网络编程项目fastDFS分布式文件系统(三)-Nginx部分
目录 1. 一些基本概念 1.1 Nginx初步认识 1.2 正向/反向代理 1.3 域名和IP 2. Nginx 安装和配置 2.1 安装 2.2 配置 3. Nginx的使用 3.1 部署静态网页 3.2 反向代理和负载均衡 4 课外知识导读 1. URL和URI 编辑 2. DNS解析过程 1. 一些基本概念 1.1 Nginx初步认…...

Apache-DBUtils
目录 封装方法 引出dbutils 案例 当关闭connection后,resultset结果集就无法使用了,这就使得resultset不利于数据的管理 封装方法 我们可以将结果集先存储在一个集合中,当connection关闭后,我们可以通过访问集合来访问结果集 …...

LangChain手记 Agent 智能体
整理并翻译自DeepLearning.AILangChain的官方课程:Agent(源代码可见) “人们有时会将LLM看作是知识库,因为它被训练所以记住了来自互联网或其他地方的海量信息,因而当你向它提问时,它可以回答你的问题。有一…...

87-基于stm32单片机粮仓仓库环境温湿度烟雾监测报警系统Proteus仿真+源码
资料编号:087 一:功能介绍: 1、采用stm32单片机OLED显示屏烟雾浓度检测DHT11温湿度电机按键蜂鸣器,制作一个温湿度采集、烟雾浓度采集,OLED显示相关数据, 2、通过按键设置温度上限、烟雾浓度上限࿰…...
ChatGPT 调教日记(二):程序员转量化的背景知识
程序员如何学习量化金融 作为一个程序员学习量化金融(quant)是一个不错的选择。以下是一些建议: 学习金融基础知识:了解金融市场、投资策略和金融产品。这将帮助你理解量化金融的背景和应用场景。 学习统计学和数学:…...

什么是网络地址转换 (NAT)
网络地址转换(NAT)是更改源和目标 IP 地址和端口的过程,地址转换减少了对 IPv4 公共地址的需求,并隐藏了专用网络地址范围,该过程通常由路由器或防火墙完成。 NAT是如何工作的 NAT 允许单个设备(如路由器…...
系统架构设计师---事务管理、并发控制、数据库的备份与恢复
目录 事务管理 定义 事务的四个特性(ACID) 相关SQL语句 并发控制...
如何更好的维护自己的电脑?
我的笔记本电脑 我使用的华硕天选3是一款游戏本,搭载了英特尔酷睿i7-12700H处理器,16GB内存,512GB固态硬盘和NVIDIA GeForce RTX 3050显卡。屏幕尺寸为15.6英寸,分辨率为2560x1440。对于日常使用和工作学习娱乐都能满足要求。 日常…...

element+vue 表格行拖拽功能
解决方案 使用 sortable.js 步骤一: 安装 npm install vuedraggable步骤二:引入 import Sortable from sortablejs;步骤三: el-table 添加row-key属性,外层包一层 sortableDiv <div class"sortableDiv"> 拖…...

Python学习笔记_基础篇(三)_数据类型之列表
一.基本数据类型 整数:int 字符串:str(注:\t等于一个tab键) 布尔值: bool 列表:list (元素的集合) 列表用[] 元祖:tuple 元祖用() 字典:dict 注&a…...
目标检测YOLO实战应用案例100讲-交通目标检测中传感器数据采集容错控制方法
目录 前言 交通传感器数据采集相关理论基础 2.1交通目标检测系统数据采集简介...
ElasticSearch 8.9.0 开发模式安装
ElasticSearch 8.9.0 开发模式安装 MacOS(Apple芯片):https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.0-darwin-aarch64.tar.gz Linux:https://artifacts.elastic.co/downloads/elasticsearch/elasti…...

docker部署redis
这里写目录标题 1.安装Redis2.新建挂载文件夹3.配置redis4.创建redis容器,挂载启动命令连接测试 Docker停止、删除、重启、启动容器 1.安装Redis 通过docker search redis和docker pull redis下载redis镜像 2.新建挂载文件夹 新建data和conf两个文件夹࿰…...

ZooKeeper的应用场景(分布式锁、分布式队列)
7 分布式锁 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,…...

seata 的部署和集成
文章目录 seata的部署和集成一、部署Seata的tc-server1.下载2.解压3.修改配置4.在nacos添加配置5.创建数据库表6.启动TC服务 二、微服务集成seata1.引入依赖2.修改配置文件 TODO三、TC服务的高可用和异地容灾1.模拟异地容灾的TC集群2.将事务组映射配置到nacos3.微服务读取nacos…...

C++入门基础(万字详解!!!)
文章目录 前言1.C关键字2.命名空间3.C的输入输出4.缺省参数4.1 全缺省4.2 半缺省 5.函数重载6. 引用6.1 引用的特性6.2 引用的使用场景6.3 引用和指针 7.内联函数7.1 特性 8.auto关键字8.1 注意事项 9. 基于范围的for循环9.1 使用条件 10.指针控制nullptr10.1 注意事项 11.总结…...
神经网络基础-神经网络补充概念-53-将batch norm拟合进神经网络
代码实现 import numpy as np import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, BatchNormalization, Activation from tensorflow.keras.optimizers import SGD# 生成随机数据 np.random.seed(0) X np.…...
Sping源码(六)— prepareBeanFactory()
前言 前几篇已经介绍lBeanFactory的创建已经xml配置文件中自定义标签和默认标签的解析过程,此时的BeanFactory中已经包含了xml文件中的标签属性。但BeanFactory中还有一些本身重要的属性没有填充,所以接着方法继续往下看BeanFactory中的属性是如何填充的…...

LeetCode(力扣)257. 二叉树的所有路径Python
LeetCode257. 二叉树的所有路径 题目链接代码 题目链接 https://leetcode.cn/problems/binary-tree-paths/ 代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.…...
nodejs实现http与https服务;同时处理proxy代理的解决方案
// nodejs服务提供的http协议示例 const http require(http); const server http.createServer((req, res) > {res.writeHead(200, { Content-Type: text/html;charsetutf8 });res.end(Date.now() > http访问成功8080) }); server.listen(8080, () > {console.lo…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...