C++ 网络编程项目fastDFS分布式文件系统(三)-Nginx部分
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
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/./configmakemake test 可选make install ( 使用管理员权限执行该命令 )
密码库使用 https 进行通信的时候使用ZLib 下载 : http://www.zlib.net/数据压缩安装 :./configuremakesudo make installPCRE 下载 : http://www.pcre.org/解析正则表达式安装./configuremakesudo 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.11makesudo make install
3. Nginx
相关的指令
Nginx
的默认安装目录
/usr/local/nginxconf - > 存储配置文件的目录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/binln -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 - > 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 部署静态网页
#
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/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;}}
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.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. 概念
URLUniform Resource Locator: 统一资源定位符表示资源位置的字符串基本格式 : " 协议 ://IP 地址 / 路径和文件名 "x p://xp.is.co.za/rfc/rfc1808.txthttp://www.ietf.org/rfc/rfc2396.txttelnet://192.0.2.16:80/URNUniform Resource Name: 统一资源名称P2P 下载中使用的磁力链接URIUniform 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 URLhttp://www.ietf.org/rfc/rfc2396.txt also a URLtelnet://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.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"