Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链

文章目录

      • 1. Nginx简介
        • 1.1 Nginx背景
        • 1.2 Nginx的优点
        • 1.3 Nginx的功能特性及常用功能
      • 2.Nginx安装
        • 2.1 下载上传解压
        • 1.2 安装
      • 3.nginx核心概念
        • 3.1 最小配置文件
        • 3.2 虚拟主机
          • 3.2.1 端口区分:
          • 3.2.2 域名区分:
        • 3.3 域名解析
          • 3.3.1 公网DNS服务器与内网DNS服务器的应用场景
          • 3.3.2 浏览器域名解析过程
          • 3.3.3 servername匹配规则
        • 3.4 反向代理
        • 3.5 负载均衡
          • 3.5.1 基本概念
          • 3.5.2 负载均衡的配置
        • 3.6 动静分离
        • 3.7 UrlRewrite
        • 3.8 防盗链配置
      • 4. 计算机网络安全
        • 4.1 Http与Https

1. Nginx简介

1.1 Nginx背景

Nginx(“engine x”)一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔·赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是2004年10月4号发布的0.1.0版本。另外值得一提的是伊戈尔·赛索耶夫将Nginx的源码进行了开源,这也为Nginx的发展提供了良好的保障。

名词介绍:

  1. WEB服务器:WEB服务器也叫网页服务器,英文名叫Web Server,主要功能是为用户提供网上信息浏览服务。

  2. HTTP:HTTP是超文本传输协议的缩写,是用于从WEB服务器传输超文本到本地浏览器的传输协议,也是互联网上应用最为广泛的一种网络协议。HTTP是一个客户端和服务器端请求和应答的标准,客户端是终端用户,服务端是网站,通过使用Web浏览器、网络爬虫或者其他工具,客户端发起一个到服务器上指定端口的HTTP请求。

  3. POP3/SMTP/IMAP:
    POP3(Post Offic Protocol 3)邮件协议的第三个版本,SMTP(Simple Mail Transfer Protocol)简单邮件传输协议,IMAP(Internet Mail Access Protocol)交互式邮件存取协议,通过上述名词的解释,我们可以了解到Nginx也可以作为电子邮件代理服务器。

1.2 Nginx的优点

1)速度更快、并发更高
单次请求或者高并发请求的环境下,Nginx都会比其他Web服务器响应的速度更快。一方面在正常情况下,单次请求会得到更快的响应,另一方面,在高峰期(如有数以万计的并发请求),Nginx比其他Web服务器更快的响应请求。Nginx之所以有这么高的并发处理能力和这么好的性能原因在于Nginx采用了多进程和I/O多路复用(epoll)的底层实现。

2)配置简单,扩展性强
Nginx的设计极具扩展性,它本身就是由很多模块组成,这些模块的使用可以通过配置文件的配置来添加。这些模块有官方提供的也有第三方提供的模块,如果需要完全可以开发服务自己业务特性的定制模块。

3)高可靠性
Nginx采用的是多进程模式运行,其中有一个master主进程和N多个worker进程,worker进程的数量我们可以手动设置,每个worker进程之间都是相互独立提供服务,并且master主进程可以在某一个worker进程出错时,快速去"拉起"新的worker进程提供服务。

4)热部署
现在互联网项目都要求以7*24小时进行服务的提供,针对于这一要求,Nginx也提供了热部署功能,即可以在Nginx不停止的情况下,对Nginx进行文件升级、更新配置和更换日志文件等功能。

5)成本低、BSD许可证
BSD是一个开源的许可证,世界上的开源许可证有很多,现在比较流行的有六种分别是GPL、BSD、MIT、Mozilla、Apache、LGPL。这六种的区别是什么,我们可以通过下面一张图来解释下:
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第1张图片Nginx本身是开源的,我们不仅可以免费的将Nginx应用在商业领域,而且还可以在项目中直接修改Nginx的源码来定制自己的特殊要求。这些点也都是Nginx为什么能吸引无数开发者继续为Nginx来贡献自己的智慧和青春。
常用版本分为四大阵营:
Nginx开源版
Nginx plus 商业版
Openresty(Nginx+Lua)
Tengine(淘宝)

1.3 Nginx的功能特性及常用功能

Nginx提供的基本功能服务从大体上归纳为"基本HTTP服务"、“高级HTTP服务”和"邮件服务"等三大类。

1)基本HTTP服务
Nginx可以提供基本HTTP服务,可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持SSL等。
处理静态文件、处理索引文件以及支持自动索引;
提供反向代理服务器,并可以使用缓存加上反向代理,同时完成负载均衡和容错;
提供对FastCGI、memcached等服务的缓存机制,同时完成负载均衡和容错;
使用Nginx的模块化特性提供过滤器功能。Nginx基本过滤器包括gzip压缩、ranges支持、chunked响应、XSLT、SSI以及图像缩放等。其中针对包含多个SSI的页面,经由FastCGI或反向代理,SSI过滤器可以并行处理。
支持HTTP下的安全套接层安全协议SSL.
支持基于加权和依赖的优先权的HTTP/2

2)高级HTTP服务
支持基于名字和IP的虚拟主机设置
支持HTTP/1.0中的KEEP-Alive模式和管线(PipeLined)模型连接
自定义访问日志格式、带缓存的日志写操作以及快速日志轮转。
提供3xx~5xx错误代码重定向功能
支持重写(Rewrite)模块扩展
支持重新加载配置以及在线升级时无需中断正在处理的请求
支持网络监控
支持FLV和MP4流媒体传输

3)邮件服务
Nginx提供邮件代理服务也是其基本开发需求之一,主要包含以下特性:
支持IMPA/POP3代理服务功能
支持内部SMTP代理服务功能

4)Nginx常用的功能模块:
静态资源部署
Rewrite地址重写
正则表达式
反向代理
负载均衡
轮询、加权轮询、ip_hash、url_hash、fair
Web缓存
环境部署
高可用的环境
用户认证模块

5)Nginx的核心组成:
nginx二进制可执行文件
nginx.conf配置文件
error.log错误的日志记录
access.log访问日志记录

2.Nginx安装

2.1 下载上传解压

下载地址
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第2张图片中间的是linux版本,后面的windows版本。
此处我们下载linux版 nginx-1.22.0。下载完成将压缩包上传至linux服务器cd /usr/share/nginx/目录下
cd /usr/share/
mkdir nginx
tar -xvf nginx-1.22.0.tar.gz

1.2 安装

安装分为三步:
1)配置安装路径,不配置默认安装在/usr/local/nginx
./configure
也可以指定安装目录,加上参数 --prefix=/usr/local/nginx
执行完成后,出现如下界面,就说明不缺少其他依赖
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第3张图片2) 编译:make
3) 安装:make install
4)目录介绍
安装完成后,进入安装目录:cd /usr/local/nginx/
nginx主要的目录就下面四个,其他temp目录都是启动以后产生的
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第4张图片conf : 配置文件目录,主配置文件nginx.conf就在里面。
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第5张图片html : 存放nginx自带的两个静态的html页面
50x.html:访问失败后的失败页面
index.html:成功访问的默认首页

logs : 记录入门的文件,当nginx服务器启动后,这里面会有 access.log error.log 和nginx.pid三个文件出现。

sbin : 是存放执行程序文件nginx 。nginx是用来控制Nginx的启动和停止等相关的命令。

5)nginx常用命令
进入安装好的目录 /usr/local/nginx/sbin
./nginx 启动
./nginx -s stop 快速停止
./nginx -s quit 优雅关闭,在退出前完成已经接受的连接请求
./nginx -s reload 重新加载配置

启动Nginx后,查看是否启动成功
在这里插入图片描述可以看到nginx已启动成功,且是多进程的,master进程负责协调worker进程,worker进程是实际负责处理请求的
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第6张图片6)进入到一台服务器后如何寻找nginx的安装位置
whereis nginx
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第7张图片可以看到nginx的安装目录为/usr/local/nginx

3.nginx核心概念

3.1 最小配置文件

nginx.conf去掉注释后的最小配置文件

worker_processes  1; #启动的worker进程数,建议与CPU核心数保持一致,(双核4线程,可以设置为4)

events {
    worker_connections  1024; #单个工作进程(worker)可以允许同时建立外部连接的数量
}

http {
    include       mime.types; #引入mime.types配置,mime.types是服务器返回给浏览器的类型,告诉浏览器以哪种格式展示
    default_type  application/octet-stream; #默认的返回类型
 
    sendfile        on; #开启零拷贝
	keepalive_timeout  65;  #用来设置长连接的超时时间

#虚拟主机 vhost
    server {
        listen       80; #监听的端口号
        server_name  localhost; #域名、主机名
# url:http://ayguigu.com/order/queryOne
# uri:域名之后的东西
# location匹配的就是uri,一个主机下可以配置多个location且互不影响
        location / {
            root   html; #匹配到该location后从哪个目录来找网页。html是相对路径,相对于nginx的主目录,相当于/usr/local/nginx/html
            index  index.html index.htm;  #如果没有默认页,访问到这个目录下如果有这两个文件就展示出来
        }
       # 当访问url出现500 502 503 504错误时,重定向到/50x.html,即是http://ayguigu.com/50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html { #当访问/50x.html时,就到相对路径html下找,即是html下的50x.html
            root   html;
        }
    }
}

3.2 虚拟主机

虚拟主机,就是把一台物理服务器划分成多个虚拟的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。Nginx 提供虚拟主机的功能,就是为了让我们不需要安装多个 Nginx,就可以运行多个域名不同的网站。

Nginx 下,一个 server 标签就是一个虚拟主机。nginx 的虚拟主机就是通过 nginx.conf 中 server 节点指定的,想要设置多个虚拟主机,配置多个server节点即可。

如果一个公司有多个二级域名,没有必要为每个二级域名都提供一台 Nginx 服务器,就可以使用虚拟主机技术,在一台 Nginx 服务器上,模拟多个虚拟服务器。

配置虚拟主机方式:
1)基于端口的虚拟主机
使用端口来区分。浏览器使用同一个域名 + 端口或同一个ip地址 + 端口访问;

2)基于域名的虚拟主机
使用域名来区分。端口可以相同,但是域名+端口不能相同。

实操:
修改本地的hosts文件,文件位置:C:\Windows\System32\drivers\etc\hosts 将云服务器ip和nginxtest.com域名、nginxstudy.com域名绑定。进入home目录下,分别创建hello和world文件夹,在其下分别创建index.html。

3.2.1 端口区分:
server {
        listen       80;
        server_name  nginxtest.com;

        location / {
            root   /home/hello;
            index  index.html index.htm;
        }
    }
server {
        listen       81;
        server_name  nginxtest.com;

        location / {
            root   /home/world;
            index  index.html index.htm;
        }
    }

./nginx -s reload 重新加载nginx配置

浏览器访问http://nginxtest.com/,显示/home/hello/index.html中的内容。不带端口的默认就是80端口。
浏览器访问http://nginxtest.com:81/,显示/home/world/index.html中的内容。

3.2.2 域名区分:
server {
        listen       80;
        server_name  nginxtest.com;

        location / {
            root   /home/hello;
            index  index.html index.htm;
        }
    }
server {
        listen       80;
        server_name  nginxstudy.com;

        location / {
            root   /home/world;
            index  index.html index.htm;
        }
    }

./nginx -s reload 重新加载nginx配置

浏览器访问http://nginxtest.com/,显示/home/hello/index.html中的内容。
浏览器访问http://nginxstudy.com/,显示/home/world/index.html中的内容。

3.3 域名解析

3.3.1 公网DNS服务器与内网DNS服务器的应用场景

公网DNS服务器:
1)使用场景:用户通过公网访问网站:www.qq.com
2) 谁搭建?电信/联通/移动+域名服务提供商(如万网)+自建公网DNS服务器(大公司才自建)

内网DNS服务器:
1)给DB加一个内网域名,应用服务器通过域名访问DB
2) 谁搭建?公司运维,可以用Linux Bind,dnsmasq

域名解析就是将域名解析为ip地址的过程。寻找资源主要还是靠的是IP地址,但是ip地址不方便人们记忆,便又发明了域名方便记忆,通过域名来访问ip地址。

3.3.2 浏览器域名解析过程

DNS域名解析,在客户端和浏览器,本地DNS之间是递归查询,在本地DNS服务器与根域及其子域之间是迭代查询。

迭代查找与递归查找的区别:
递归:A问B,B不知道,B去问C,然后把结果返回给A
迭代: A问B,B不知道,B说C知道,A自己去问C

递归查询:
查找浏览器缓存 ----> 查找操作系统缓存(hosts) ----> 查找路由器缓存 ----> 查找本地DNS缓存 ----> 本地DNS服务器

本地DNS服务器找不到:根据本地DNS服务器设置的转发器进行迭代查找。本地DNS服务器也有缓存,不会每一次解析都去迭代查找。对于国内而言,本地DNS服务器就是电信/联通/移动提供的一个远程DNS客户端,由它去迭代查询 根–>一级—>二级—>三级

本地DNS服务器请求根域名服务器,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应该向哪一个顶级域名服务器进行查询。国际顶级域名服务器,包含.com、.cn、.org等后缀域名解析,所有提供域名注册的注册商必须在此DNS服务器中注册。

本地DNS服务器请求顶级域名服务器,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应该向哪一个权限域名服务器进行查询。

本地DNS服务器请求权限域名服务器,给出所要查询的IP地址。本地DNS服务器把这个结果返回给发起查询的客户机。

广域网负载均衡(GSLB)
广域网负载均衡:大厂自己研发的DNS服务器。最终实现:一个域名对应多个ip,网站在全国各地部署,用户就近访问。

授权DNS服务器
授权DNS服务器:是一级一级授权的,根是由国际组织(注册局)去管理的,由它去管控所有的一级域名服务器的申请,将一级域名的管理授权给了全球各地的注册商,中国授权给了万网。注册商将下面的二级、三级、四级域名的解析授权给各个企业,这样企业就可以自建DNS域名服务器了,然后加入到全球的网络。
注册局–>注册商–>企业自建DNS服务器 层层授权,所以叫授权DNS服务器

DNS劫持
本地DNS大多数为运营商DNS服务器,处在整个DNS解析的交互的中心,这里容易发生劫持。如你访问www.qq.com,却返回了其他访问的ip地址。

httpDNS
游览器会向你部署httpDNS服务器发送HTTP请求(直接访问httpDNS的IP),HTTP服务器返回域名解析结果,然后浏览器缓存起来。相当于绕过了本地DNS,直接去请求httpDNS,所以就不存在DNS劫持了。
httpDNS适合app、或CS架构的服务,通过预埋ip地址,直接将域名解析发到httpDNS所在服务器。

Short URL
短网址,Short URL、短URL,是指短网址服务器为某个链接生成的中间链接。短链接并不是绝对的就比原链接短。短网址可以减少字节数,同时还可以隐藏真实网站地址。短网址机制根本上是通过“短网址服务器+302重定向实现”。本质就只是将短网址还原为原网址,可以将短网址与原网址建立一个映射。所以点击短网址必须是去访问短域名服务器而不是原URL的服务器。

泛域名解析
域名泛解析最大的用途是可以让主域名支持无限的子域名扩展。
泛域名解析:*.域名解析到同一IP。
域名解析:子域名.域名解析到同一IP。

泛域名解析可以用来做多用户二级域名。
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第8张图片

3.3.3 servername匹配规则

servername匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。

完整匹配
我们可以在同一servername中匹配多个域名
server_name vod.mmban.com www1.mmban.com;

通配符匹配
server_name *.mmban.com

通配符结束匹配
server_name vod.*;

正则匹配

server_name ~^[0-9]+\.mmban\.com$;

3.4 反向代理

一图区分正向代理与反向代理
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第9张图片Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第10张图片
正向代理
用户和外网不能互通,通过代理服务器将用户请求发送给外网
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第11张图片
反向代理
用户和nginx是互通的,用户和应用服务器是不互通的,用户发送请求到nginx,nginx作为代理将请求发送给应用服务器(如tomcat等),tomcat接受nginx的请求处理好后将结果发送给nginx,nginx将结果发送给用户。
如下图,是隧道式代理(瓶颈在于nginx代理服务器,即使应用服务器的带宽很大,但是如果代理服务器的带宽很小,那么请求都会阻塞到代理服务器)
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第12张图片反向代理和正向代理的区别是代理服务器的提供方不同,对于反向代理,nginx是由服务提供方提供的,对于正向代理,代理服务器是由用户自己提供的

如何解决隧道式代理的问题呢?
DR模型:
用户发送请求到代理服务器,代理服务器正常将请求发送给应用服务器,在应用服务器处理完请求后直接将结果发送给用户,不经过代理服务器。LVS负载均衡器既可以使用DR模型,也可以使用隧道式代理模型

反向代理实际配置
proxy_pass http://baidu.com;
配置了proxy_pass以后,就可以注释掉root 和html,然后访问nginxtest.com,就会被反向代理到http://www.baidu.com/。

server {
        listen       80;
        server_name  nginxtest.com;
        location / {
             proxy_pass http://www.baidu.com/;
    #        root   /home/hello;
     #       index  index.html index.htm;
        }
    }

3.5 负载均衡

3.5.1 基本概念

如果一个服务由多台服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。
upstream tomcat2 {
server 192.168.25.148:8081;
server 192.168.25.148:8082;
}
默认的负载均衡的策略就是轮询的方式。

可以根据服务器的实际情况调整服务器权重。权重越高分配的请求越多,权重越低,请求越少。默认是都是1

负载均衡策略
轮询:默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求。
weight(权重):指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream httpd
{
server 127.0.0.1:8050 weight=10 down;
server 127.0.0.1:8060 weight=1;
server 127.0.0.1:8060 weight=1 backup;
}
down:表示当前的server暂时不参与负载
weight:默认为1.weight越大,负载的权重就越大。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。

ip_hash:根据客户端的ip地址转发同一台服务器,可以保持会话。但是如果是动态ip,其实也不能保持会话。
least_conn:最少连接访问(可能造成流量倾斜)
url_hash:根据用户访问的url定向转发请求(第三方插件)
fair:根据后端服务器响应时间转发请求(可能造成流量倾斜)(第三方插件)

3.5.2 负载均衡的配置

因为只有一台服务器,所以使用虚拟主机来做负载均衡,采用端口区分的方式。

编辑nginx.conf时xshell连接出现异常退出,再次进入vim编辑模式一直提示如下:
Swap file “.nginx.conf.swp“ already exists!

在使用vim编辑某文件的时候,会产生一个swp文件 .FILENAME.swp

rm .nginx.conf.swp 删除该文件即可

重新加载配置文件时出现如下报错
在这里插入图片描述cat -n nginx.conf 查看nginx.conf文件并输出行号
Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链_第13张图片通过对比老师课件,发现少了http://

nginx: [emerg] unexpected “}” in /usr/local/nginx/conf/nginx.conf:67
多了一个},vim 模式,dd删除改行,保存退出

1)轮询

upstream httpProxy {
	server 10.0.4.23:81;
	server 10.0.4.23:82;
  }
    server {
        listen       80;
        server_name  nginxtest.com;
        location / {
             proxy_pass http://httpProxy;
    #        root   /home/hello;
     #       index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
server {
        listen       81;
        server_name  nginxstudy.com;
        location / {
             proxy_pass http://www.qq.com/;
             root   /home/world;
             index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
server {
        listen       82;
        server_name  nginxlearn.com;
        location / {
             proxy_pass http://www.baidu.com/;
             root   /home/leihou;
             index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

测试:在浏览器输入nginxtest.com,被反向代理到http://httpProxy,因为upstream 对httpProxy做了负载均衡,所以会被代理到10.0.4.23的81和82端口。而81和82端口又被server 监听了,所以会反向代理到http://www.qq.com/和http://www.baidu.com/,最终结果就是浏览器轮询访问qq和百度,反向代理负载均衡虚拟主机配置成功!!!

注释掉81和82中的反向代理proxy_pass配置,在浏览器访问nginxtest.com,地址栏不变,会轮询访问/home/world和/home/leihou下面的index.html

2)权重

upstream httpProxy {
	server 10.0.4.23:81  weight=5;
	server 10.0.4.23:82  weight=1;
  }

81和82以近似5比1的比例访问。

3.6 动静分离

动静分离:严格意义是将动态请求和静态请求分离。

一种是将静态文件拆分出来,放置在独立域名下的服务器(主流方案)。另一种是混合在一起,使用nginx区分。通过location 指定不同的后缀名实现不同的请求转发。

配置反向代理

location / { 
proxy_pass http://10.0.4.23:8080; 
root html; 
index index.html index.htm; 
}

增加每一个location

location /css { 
root /usr/local/nginx/static; 
index index.html index.htm; 
} 
location /images { 
root /usr/local/nginx/static; 
index index.html index.htm; 
} 
location /js { 
root /usr/local/nginx/static; 
index index.html index.htm; 
}

使用一个location
使用正则
location 前缀
/ 通用匹配,任何请求都会匹配到。
= 精准匹配,不是以指定模式开头
~ 正则匹配,区分大小写
~* 正则匹配,不区分大小写
^~ 非正则匹配,匹配以指定模式开头的location

location匹配顺序
多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)

location ~*/(css|img|js) 
{ root /usr/local/nginx/static; 
index index.html index.htm; 
}

alias与root

location /css 
{ alias /usr/local/nginx/static/css; 
index index.html index.htm; 
} 

root用来设置根目录,而alias在接受请求的时候在路径上不会加上location。
1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;
2)root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;
3)使用alias标签的目录块中不能使用rewrite的break(具体原因不明);另外,alias指定的目录后面必须要加上"/“符号!!
4)alias虚拟目录配置中,location匹配的path目录如果后面不带”/“,那么访问的url地址中这个path目录后面加不加”/“不影响访问,访问时它会自动加上”/“; 但是如果location匹配的path目录后面加上”/“,那么访问的url地址中这个path目录必须要加上”/“,访问时它不会自动加上”/“。如果不加上”/“,访问就会失败!
5)root目录配置中,location匹配的path目录后面带不带”/",都不会影响访问。

动静分离实操
将静态文件存放到nginx服务器上,目录为/home/static,分别上传1.jpg和2.jpg
在server监听80端口下配置如下内容。

location /images { 
    	          # alias /home/static;
    	            root /home/static; 
    	           index index.html index.htm; 
    	        }

alias就是直接访问static下面的内容,root就是访问/static/images下的内容

测试
浏览器访问:http://nginxtest.com/images/1.jpg,其实访问的是/home/static/images下的1.jpg,图片正常显示。

3.7 UrlRewrite

rewrite语法格式及参数语法: rewrite是实现URL重写的关键指令,根据regex (正则表达式)部分内容, 重定向到replacement,结尾是flag标记。
rewrite [flag];
关键字 正则 替代内容 flag标记

关键字:其中关键字error_log不能改变
正则:perl兼容正则表达式语句进行规则匹配
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记
rewrite参数的标签段位置: server,location,if

flag标记说明:
last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
redirect 和 permanent 对用户来说,感觉是一样的。

实例
rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 break;

网关配置
upstream httpds
{ server 192.168.44.102 weight=8 down;
server 192.168.44.103:8080 weight=2;
server 192.168.44.104:8080 weight=1 backup; }
location /
{ rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 redirect;
proxy_pass http://httpds ; }

3.8 防盗链配置

valid_referers none | blocked | server_names | strings …;
none, 检测 Referer 头域不存在的情况。
blocked,检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以“http://” 或 “https://” 开头。
server_names ,设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。
在需要防盗链的location中配置
valid_referers 192.168.44.101; # 允许的ip
if ($invalid_referer) # 如果不被允许
{ return 403; }# 返回错误码403

使用curl测试 -I 参数则只显示 http response 的头信息。
curl -I http://10.0.4.23/images/1.jpg

带引用 -e 带引用
curl -e “http://baidu.com” -I http://10.0.4.23/images/1.jpg

实操配置

返回错误码:

valid_referers 10.0.4.23;
           if ($invalid_referer)
           { return 403; }

返回错误页面:
error_page不能少,否则匹配不上。在html下 cp 50x.html 401.html,修改内容

valid_referers 10.0.4.23;
           if ($invalid_referer)
           { return 401; }

error_page   401  /401.html;
        location = /401.html {
            root   html;
        }

返回图片:
首先确保rewrite 后地址可以正常访问

valid_referers 10.0.4.23;
           if ($invalid_referer)
            { rewrite ^/ http://nginxtest.com/image/1.gif break; }

4. 计算机网络安全

4.1 Http与Https

防火墙的作用:
1).过滤进出网络的数据
2).管理进出访问网络的行为(限制他人进入内部网络,过滤掉不安全服务和非法用户)
3).封堵某些禁止业务(不让你看的网站你看不了)
4).记录通过防火墙信息内容和活动(你看了啥网站,传送了啥文件都有记录)
5).对网络攻击检测和告警

防火墙不能保护在网络传输中的数据,而HTTP 又是明文传输,HTTPS应运而生。

HTTP(Hyper Text Transfer Protocol)协议是超文本传输协议的缩写,它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTPP有多个版本,目前广泛使用的是HTTP/1.1版本。
HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。

HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息。

一般http中存在如下问题:容易被窃取篡改冒充
请求信息明文传输,容易被窃听截取。
数据的完整性未校验,容易被篡改。
没有验证对方身份,存在冒充危险。

HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):一般理解为HTTP+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。HTTPS 默认工作在 TCP 协议443端口。

HTTP 与 HTTPS 区别
HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。

对称加密与非对称加密

对称加密:使用相同的密匙对数据进行加密和解密。
非对称加密:加密和解密使用的不是同一把密钥。

公钥加密数据,私钥可以解密;
私钥加密数据,公钥可以解密。
既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。

你可能感兴趣的:(#,Nginx,#,计算机网络,负载均衡,反向代理,防盗链,动静分离,URlRewrite)