C++ 网络编程项目fastDFS分布式文件系统(三)-Nginx部分

news2024/12/24 2:38:00

目录

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. Nginx 介绍
        engine x
        俄罗斯
        开源的框架
        c语言
        Tengine - 淘宝基于 nginx 修改的
2. Nginx 能干什么 ?
        作为web 服务器
                解析http协议
        反向代理服务器
                了解反向代理的概念
        邮件服务器
解析邮件相关的协议 : pop3/smtp/imap
3. Nginx 的优势 ? 
        更快
                高峰期(数以万计的并发时 )nginx 可以比其它 web 服务器更快的响应请求
                高扩展
        低耦合设计的模块组成 , 丰富的第三方模块支持
                高可靠
                经过大批网站检验
                www.sina.com.cn
                www.xunlei.com
                www.163.com
        每个worker 进程相对独立 , 出错之后可以快速开启新的 worker
        worker进程的个数是可以控制的
        在后台干活的进程
        低内存消耗
        一般情况下,10000 个非活跃的 HTTP Keep-Alive 连接在 nginx 中仅消耗 2.5M 内存
单机支持10万以上的并发连接
取决于内存 ,10 万远未封顶
热部署
master worker 的分离设计 , 可实现 7x24 小时不间断服务的前提下升级 nginx 可执行文件
最自由的BSD许可协议
        BSD许可协议允许用户免费使用 nginx, 修改 nginx 源码 , 然后再发布 淘宝: tengine

1.2 正向/反向代理

1. 正向代理

        正向代理是位于客户端和原始服务器之间的服务器,为了能够从原始服务器获取请求的内容,客户端需 要将请求发送给代理服务器,然后再由代理服务器将请求转发给原始服务器,原始服务器接受到代理服 务器的请求并处理,然后将处理好的数据转发给代理服务器,之后再由代理服务器转发发给客户端,完 成整个请求过程。

正向代理的典型用途就是为在防火墙内的局域网客户端提供访问Internet的途径 , 比如:

学校的局域网
单位局域网访问外部资源

 正向代理服务器是为用户服务的

2. 反向代理
反向代理方式是指代理原始服务器来接受来自 Internet 的链接请求,然后将请求转发给内部网络上的原始 服务器,并将从原始服务器上得到的结果转发给Internet 上请求数据的客户端。那么顾名思义,反向代理就是位于Internet 和原始服务器之间的服务器,对于客户端来说就表现为一台服务器,客户端所发送的请 求都是直接发送给反向代理服务器,然后由反向代理服务器统一调配。

1. 客户端给服务器发送请求 , 连接服务器 , 用户不知道服务器地址 , 只有反向代理服务器的地址是公开的
2. 请求直接发给反向代理服务器
3. 反向代理服务器将请求转发给后边的 web 服务器
        web服务器 N
        反向代理服务器转发请求会轮询进行(第一个请求给第一台,第二个给第二台,第n个是给第n台。
4. web 服务器收到请求进行处理 , 得到结果
5. web 服务器将处理结果发送给反向代理服务器
6. 反向代理服务器将拿到的结果转发给客户端

1.3 域名和IP

#
1. 什么是域名?
        www.baidu.com
        jd.com
        taobao.com
2. 什么是 IP 地址?
        点分十进制的字符串
  •                 11.22.34.45
3. 域名和 IP 地址的关系?
        域名绑定IP
                一个域名只能绑定一个IP(域名可以理解是别称,多个别称可以绑定同意ip地址)
                一个IP地址被多个域名绑定

2. Nginx 安装和配置

2.1 安装

1. 下载
        
1. 官方地址 : http://nginx.org/
2. Nginx 相关依赖 :
OpenSSL: http://www.openssl.org/
./config
make
make test (可选)
make install ( 使用管理员权限执行该命令 )
密码库
使用 https 进行通信的时候使用
ZLib 下载 : http://www.zlib.net/
数据压缩
安装 :
./configure
make
sudo make install
PCRE 下载 : http://www.pcre.org/
解析正则表达式
安装
./configure
make
sudo make install
./configure --with-openssl=../openssl-master --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11
 
2. 安装
nginx 的安装

# nginx 工作时候需要依赖三个库
# 三个参数 = 这三个库对应的源码安装目录
# 根据自己的电脑的库安装包的位置进行指定
./configure --with-openssl = ../openssl-1.0.1t --with-pcre = ../pcre-8.40 --with-zlib = ../zlib-1.2.11
make
sudo make install

3. Nginx 相关的指令
        Nginx 的默认安装目录

        

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

 

 

2.2 配置

   1. Nginx配置文件的位置

        

/usr/local/nginx/conf/nginx.conf
2. Nginx 配置文件的组织格式
        

http -> 模块 , http 相关的通信设置
        server模块 -> 每个 server 对应的是一台 web 服务器
location 模块
        处理的是客户端的请求
mail -> 模块, 处理邮件相关的动作
3. 常用配置项介绍
user nobody; # 启动之后的 worker 进程属于谁
- 错误提示 : nginx 操作 xxx 文件时候失败 , 原因 : Permission denied
- nobody - > root
worker_processes 1; # 设置 worker 进程的个数 , 最大 == cpu 的核数 ( 推荐 )
error_log logs/error.log; # 错误日志 , /usr/local/nginx
pid logs/nginx. pid ; # pid 文件 , 里边是 nginx 的进程 ID
# nginx 的事件处理
events {
        use epoll; # 多路 IO 转接模型使用 epoll
        worker_connections 1024; // 每个工作的进程的最大连接数
}
http - > server - > 每个 server 模块可以看做一台 web 服务器
server {
listen 80; # web 服务器监听的端口 , http 协议的默认端口 https: 默认是443 ftp :21  ssh,sftp 22
server_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 部署静态网页

#
1. 静态网页存储目录
        默认的存储目录
        
/usr/local/nginx/html
自己创建新的目录
        
应该在 /usr/local/nginx/
mkdir /usr/local/nginx/mydir
2. 练习
Nginx 服务器上进行网页部署 , 实现如下访问 :
/usr/local/nginx/ 创建新的目录 , yundisk 用来存储静态网页
访问地址 : http://192.168.80.254/login.html
  login.html 放到什么位置 ?
/       - > 服务器的资源根目录 , /usr/local/nginx/yundisk
login.htm-> 放到 yundisk

 服务器要处理的动作

# 对应这个请求服务器要添加一个 location
location 指令 ( / )
{
# 找一个静态网页
root yundisk;    # 相对于 /usr/local/nginx/ 来找
# 客户端的请求是一个目录 , nginx 需要找一默认显示的网页,就是index.html的一个文件。
index index . html index .htm;
}
# 配置之后重启 nginx
sudo 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.130
        ubuntu - copy: 192.168.91.131

1. 反向代理设置 

window 上对应的 nginx 的配置文件
- conf/nginx. conf
# 代理几台服务器就需要几个 server 模块
# 客户端访问的 url: http://192.168.1.100/login.html
server {
listen 80; # 客户端访问反向代理服务器 , 代理服务器监听的端口
server_name ubuntu.com; # 客户端访问反向代理服务器 , 需要一个域名
location / {
# 反向代理服务器转发指令 , http:// 固定
proxy_pass http ://robin.test.com;
}
}
# 添加一个代理模块
upstream robin.test. com
{
server 192.168.247.91:130;
}
# luffy
server {
listen 80; # 客户端访问反向代理服务器 , 代理服务器监听的端口
server_name hello.com; # 客户端访问反向代理服务器 , 需要一个域名
location / {
# 反向代理服务器转发指令 , http:// 固定
proxy_pass http ://luffy.test.com;
}
}
# 添加一个代理模块
upstream luffy.test. com
{
server 192.168.26.250:80;
}
}

2. 负载均衡设置

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.135
location /
{
root xxx;
index xxx;
}
location /hello/
{
root xx;
index xxx;
}
location /upload/
{
root xxx;
index xx;
}
# 192.168.26.250
location /
{
root xxx;
index xxx;
}
location /hello/
{
root xx;
index xxx;
}
location /upload/
{
root xxx;
index xx;
}

4 课外知识导读 

1. URLURI

1. 概念

URLUniform Resource Locator: 统一资源定位符
表示资源位置的字符串
基本格式 : " 协议 ://IP 地址 / 路径和文件名 "
x p://xp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
telnet://192.0.2.16:80/
URNUniform Resource Name: 统一资源名称
P2P 下载中使用的磁力链接
URIUniform Resource Identifier: 统一资源标识符
是一个紧凑的字符串用来标示抽象或物理资源 , URL URI 的一种
URI 能成为 URL 的当然就是那个 访问机制 网络位置 e.g. http:// or x p:// 。files.hp.com
tel:+1-816-555-1212
x 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)

2. 经验式理解 :

从包含关系上说 : URI 包含 URL
字符串长度上说 : URL 包含 URI
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.116
114DNS:
首选: 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"

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

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

相关文章

如何在控制台查看excel内容

背景 最近发现打开电脑的excel很慢,而且使用到的场景很少,也因为mac自带了预览的功能。但是shigen就是闲不住,想自己搞一个excel预览软件,于是在一番技术选型之后,我决定使用python在控制台显示excel的内容。 具体的需…

Java进阶篇--数据结构

目录 一.数组(Array): 1.1 特点: 1.2 基本操作: 1.3 使用数组的好处包括: 1.4 数组也有一些限制: 二.集合框架(Collections Framework): 2.1 列表…

wsl安装Linux kali

目录 1.启用“Hyper-V”和“~子系统” 2.启用虚拟化 3.安装发行版 4.升级原有系统到WSL2 5.kali换源与更新升级并安装工具集 6.kali安装图形界面~GUI 7.kali安装中文界面与中文输入法 8.wsl~kali位置迁移 1.启用“Hyper-V”和“~子系统” 打开控制面板---->>程序…

JupyterHub实战应用

一、JupyerHub jupyter notebook 是一个非常有用的工具,我们可以在浏览器中任意编辑调试我们的python代码,并且支持markdown 语法,可以说是科研利器。但是这种情况适合个人使用,也就是jupyter notebook以我们自己的主机作为服务器…

SpringBoot-lombok

为什么要使用lombok? Lombok是一个通过注解以达到减少代码的Java库,如通过注解的方式减少getter,setter方法,构造方法等。通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高…

spring boot 整合mongodb

1、安装依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>2、配置数据库连接 spring:data:mongodb:host: localhostport: 27017username: xxxxxxp…

vue:this和that的理解

当我们进入公司的时候会发现一个很常见的情况&#xff0c;就是你的前开发者会常用这么一个变量&#xff1a;that、self… 为什么会用到that、self呢&#xff0c;小编是这么理解的&#xff0c;this指向的是当前的对象&#xff0c;而that、self是临时的变量&#xff0c;为了临时存…

【STM32+ESP8266上云连载①】给ESP8266烧录AT固件

文章目录 一、给NodeMCU烧录固件1.1硬件准备1.2软件准备1.3AT固件下载1.4配置设置1.5开始烧录 二、给ESP8266-01S烧录固件2.1硬件准备2.2AT固件下载2.3连线2.4烧录配置 三、给ESP-12E/F/S单片烧录固件四、指令测试4.1HTTP测试4.2MQTT测试 我在使用ESP8266的时候遇到了一些问题&…

leetcode中常用的 C++函数和 STL容器

C函数和 STL容器 C排序sortC翻转字符串reverseC截取字符串strsub哈希表的使用定义查询哈希表里是否有该key在哈希表里存放键值链式哈希 哈希集合定义一个哈希集合查找一个字符是否在set里面删除和添加 优先队列 最大堆优先队列的大顶堆定义方式插入存储数组对定义插入 双端队列…

收集的一些比较好的git网址

1、民间故事 https://github.com/folkstory/lingqiu/blob/master/%E4%BC%A0%E8%AF%B4%E9%83%A8%E5%88%86/%E4%BA%BA%E7%89%A9%E4%BC%A0%E8%AF%B4/%E2%80%9C%E6%B5%B7%E5%BA%95%E6%8D%9E%E6%9C%88%E2%80%9D%E7%9A%84%E6%AD%A6%E4%B8%BE.md 2、童话故事 https://gutenberg.org/c…

微信支付报非法的密钥大小: Caused by: java.security.InvalidKeyException: Illegal key size

在Linux环境中出现 java.security.InvalidKeyException: Illegal key size 异常通常是由于Java默认的加密限制引起的。Java默认的加密强度限制了加密算法密钥的最大长度 方式一 1. 找到该目录 /usr/java/jdk1.8.0_121/jre/lib/security 2. 替换local_policy.jar 和 US_export_…

kafka安装说明以及在项目中使用

一、window 安装 1.1、下载安装包 下载kafka 地址&#xff0c;其中官方版内置zk&#xff0c; kafka_2.12-3.4.0.tgz其中这个名称的意思是 kafka3.4.0 版本 &#xff0c;所用语言 scala 版本为 2.12 1.2、安装配置 1、解压刚刚下载的配置文件&#xff0c;解压后如下&#x…

Nginx负载均衡下的webshell连接与过滤绕过以及LD_PROLOAD利用

目录 一、Nginx负载均衡下的webshell连接 1.环境搭建以及webshell连接 2.出现的问题 3.解决方案 二、Webshell的过滤绕过 1.异或操作绕过 ​2.取反操作绕过 3.PHP语法绕过 三、LD_PRELOAD的利用 1.初识LD_PRELOAD 2.利用LD_PRELOAD 2.1.制作linux后门 2.2.绕过PHP…

Python“牵手”京东商品评论数据采集方法,京东API申请指南

京东平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;京东API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问京东平台的数据&#xff0c;包括商品信息、店铺信息、物流信息等&#xff0c;从而实现京东平台…

Redis消息传递:发布订阅模式详解

目录 1.Redis发布订阅简介 2.发布/订阅使用 2.1 基于频道(Channel)的发布/订阅 2.2 基于模式(pattern)的发布/订阅 3.深入理解Redis的订阅发布机制 3.1 基于频道(Channel)的发布/订阅如何实现的&#xff1f; 3.2 基于模式(Pattern)的发布/订阅如何实现的&#xff1f; 3.3 Sp…

Maven官网下载配置新仓库

1.Maven的下载 Maven的官网地址&#xff1a;Maven – Download Apache Maven 点击Download&#xff0c;查找 Files下的版本并下载如下图&#xff1a; 2.Maven的配置 自己在D盘或者E盘创建一个文件夹&#xff0c;作为本地仓库&#xff0c;存放项目依赖。 将下载好的zip文件进行解…

模型预测笔记(一):数据清洗及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)

模型预测 一、导入关键包二、如何载入、分析和保存文件三、修改缺失值3.1 众数3.2 平均值3.3 中位数3.4 0填充 四、修改异常值4.1 删除4.2 替换 五、数据绘图分析5.1 饼状图5.1.1 绘制某一特征的数值情况&#xff08;二分类&#xff09; 5.2 柱状图5.2.1 单特征与目标特征之间的…

seller_info-获得淘宝店铺详情

一、接口参数说明&#xff1a; seller_info-获得淘宝店铺详情&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/seller_info 名称类型必须描述keyString是调用key&#xff08;点击获…

JVM——类的生命周期

文章目录 类加载过程加载验证准备解析初始化 卸载 一个类的完整生命周期如下&#xff1a; 类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用&#xff0c;那么虚拟机是如何加载这些 Class 文件呢&#xff1f; 系统加载 Class 类型的文件主要三步:加载->连接->…

从xxl-job源码看Scheduler定时任务的原始实现

一、背景 因为xxl-job本身是统一的分布式任务调度框架&#xff0c;所以在实现定时任务的时候&#xff0c;就断不能再去依赖别人了。 其次&#xff0c;它尽可能只依赖spring框架&#xff0c;或者说spring boot/cloud。 也就是说&#xff0c;它会尽少地使用spring外的三方框架。…