目录
1. 什么是nginx?nginx能做什么?
Nginx
是一个高性能的http
和反向代理服务器,其特点是占用内存小,并发能力强。Nginx
专为性能优化而开发,性能是其最重要的考量,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。
1.反向代理
2.负载均衡
3.动静分离
4.防盗链
重中之重 : nginx的配置实例
2.安装nginx
下载地址:Index of /download/
Nginx
需要几个依赖包,分别是pcre
,openssl
,zlib
,在安装nginx
之前需要先安装这几个依赖。
1.使用命令下载pcre
压缩包
$ sudo yum -y install pcre pcre-devel # 让 nginx 支持重写功能pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。
2..一键安装剩余依赖:
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
安装nginx
nginx
官网下载nginx
,官网地址:https://nginx.org/download/;- 将压缩包拖到服务器上;
- 使用命令
tar -zxvf /usr/local/nginx-1.9.9.tar.gz
解压压缩包; - 使用命令
./configure
检查;
5. 使用命令make && make isntall
编译安装;
安装成功后,在usr
会多出来一个文件夹,local/nginx
,在nginx
的sbin
文件夹下有启动脚本。
启动 ./nginx 后查看进程
访问:ip
配置文件:
如果开了防火墙 需要把特定的端口打开
nginx目录介绍:
存放默认的首页的
就是这个页面:
nginx的日志访问日志,错误日志等等,这个要注意,当日志文件写满了怎么办?线上尤其注意
nginx的多进程模型,他是如何处理多个请求的
nginx启动之后他会先启动一个Master的主进程,主进程呢回去读取检验配置文件,再启动Worker子进程来处理用户的请求。
nginx配置文件
配置文件详解:Nginx配置文件详解 - 程序员自由之路 - 博客园
worker_processes: 启动nginx的时候启动多少个worker子进程,基本的原则是一个CPU的内核配置一个worker_processes。CPU有多少内核配置多少的worker_processes
worker_connections:每一个worker可以创建多少个链接。
include:配置文件比较多的时候引入其他的配置文件 mime.types里面都是文件类型的参数,用于服务端告诉浏览器这次返回的是什么文件,再返回的头里面加上这个类型,浏览器就根据这个类型对应的文件后缀来解析
default_type:如果mime.types没有包含当前的类型,则以这个默认的流的类型返回
sendfile:需不要将文件从服务器拷贝到nginx的这个应用程序中,开启关闭sendfile方式传输文件,可以在http块、server块或者location块中进行配置
keepalive_timeout:配置连接超时时间,此指令可以在http块、server块或location块中配置
server块:
一个server块就相当于一个虚拟主机,多个虚拟主机之间互不干扰。
listen:监听的端口,
server_name:虚拟主机的域名,域名不同的时候,监听的端口可以相同
location:是用来匹配URI的(资源,就是域名之后的)
root:相对路径
error_page:错误页配置
虚拟主机与域名解析:
虚拟主机与域名解析:
域名解析:
在域名解析这里添加一条记录
多租户二级域名就需要泛域名解析:填通配符就行
如果主机记录什么都不填,没有www的前缀也能解析成功
nginx虚拟主机域名配置:
首先我们要在nginx上创建两个站点,都在根目录下创建
其次修改我们的配置文件
访问根目录下的这个文件
重启nginx:
访问到pro版本的小鹰
我们再配置一个plus版的小鹰,再配置一个端口
OK 现在我们来配置一下server_name,
由于两个域名都不是注册的域名所以我们要配置host文件
重新加载nginx服务 ./nginx -s reload 以及重新启动虚拟机 reboot
当然server_name的配置方式可以精确 ,通配符,正则的方式来匹配
server_name的剩下的匹配方式
一个server_name可以配置多个主机名字
通配符的形式去配置,多租户的二级域名就可以这样配置, 多个server从上到下匹配 匹配上了就不再往下。
正则匹配:
基于域名的几种互联企业的需求:
1.多域名的实现:
2.短网址的实现
3.httpdns
3.配置实例详解
1.正向代理
在浏览器中配置代理服务器,通过代理服务器进行互联网访问。
正向代理的示意图以及存在的问题
如果路由器只有10m,网速是100M,那么下载东西的时候,还是会受限于这个路由器的10M,他进出都是要经过这个路由器,所以瓶颈比较明显。正向代理是从访问者出发,在访问的过程中隐藏了访问者的真实IP,因此你可通过正向代理来进行隐藏你自己的真实IP。
2.反向代理
与正向代理的区别就是客户端事无感知的,你不知道你走没有代理的服务,正向代理要在客户端中配置代理服务器,反向代理只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴漏的是代理服务器地址. 对外暴露的是代理服务器,隐藏的是真实服务器
反向代理的示意图
反向代理访问的时候也要经过网,比如下载一个文件,下载的请求会很小,但是到了服务器后数据直接从服务器返回客户端,而不是经过网关,这样的话就避免了正向代理的时候网关的限制。
反向代理同正向代理相反,可以隐藏我们真实服务器的一些信息,并且可以在服务端进行一些配置,仅仅允许代理服务器进行代理访问,这样就能够起到一定的防护作用
反向代理服务器在我们系统架构中的应用场景 注意我们在正常的的反向代理的时候,可以去伪装一下当前访问的真实的地址,这样面向搜索引擎也有好处
但是当代理一些文件服务的时候,nginx这个时候就会成为性能的瓶颈,所以要使用负载均衡。
反向代理实操:
在location下面配置proxy_pass,proxy_pass与 root index是二选一的存在 所以要将他们注释掉
配置好我们重启nginx后再次访问:就代理到了UFC的中文网页,看到"火箭"拉基奇VS"波兰大锤"布拉乔维奇
注意,如果我配置的时候把www去掉了,可能会起不到代理的效果,直接重定向到了真实的页面去了,还需要注意的是proxy_pass是不支持跳转到https的,
3.负载均衡
如果请求数过大,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器的情况改为请求分发到多个服务器上,就是负载均衡。
负载均衡的配置upstream,要跟proxy_pass配合使用
启动这两个服务,然后开始访问虚拟机的地址,然后会分别断到两个服务里面一人一次。
如果其中有一台挂掉了,不提供服务了,那么是不是有一半的请求会没有返回呢?当然不是的,负载均衡他是有重试的机制的,如果一台服务不停工服务了,nginx会把请求导向另外一台提供服务的机器上
默认的负载均衡的策略是轮询啊,轮询的话有一个问题就是无法保持会话
负载均衡的策略:
权重:
down 可以让某些机器不参与负载均衡
backup: 备用机 其他都没法用了再用它
还有其他不太常用的负载均衡策略:这些生产环境都不用
4.动静分离
为了加快服务器的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
适合中小型网站静态资源不多的情况
动静分离示意图:
动静分离最小demo实操,现在我搞一个项目,
有html页面也有图片:
项目启动的效果如图:
现在我要做动静分离 我要把图片资源放在nginx反向代理的服务器上,
第一步先来给他配置一个反向代理:
访问虚拟机的地址:OK成功的
删除工程里面的图片:
下面配置静态资源的访问路径:这里需要重新配置一个location,同理,我们的js资源,css资源都可以这样来配置
把资源拿到nginx里面去:
重新加载nginx配置后访问虚拟机:图片出来了,简单的动静分离成功
更高级的动静分离规则:
正则的方式来匹配
5.防盗链
当我们访问代理服务器的时候,返回的html页面里面会引用一些js,图片,css等等。
当他们第二次去请求这些资源的时候,虽然访问的是同一个站点,但是他们会在请求头带上这个Referer参数,Referer参数是个什么东西呢?这是Http协议所规定的,由浏览器来遵守的。这个第二次访问的时候才有,第一个请求是没有的。表示要请求的资源是从上一个页面来的。
那我们防盗链的话就是判断第二次的请求的Referer是不是第一个请求的就可以了。
配置:
加上none以后 不带refere可以访问,带refere就不能访问了,就是浏览器直接打开是OK的,但是内嵌到其他页面使用就是不行的
目前curl测试返回的是一个403的状态码,浏览器的请求返回的也是403
现在我们想的是给他返回一个错误的页面 该怎么配置呢?
首先在服务器下面弄一个错误的html页面
配置文件这样去配置:
直接return到这个location上也是可以的
效果:
如果我们想配置一个图片返回呢?整合rewrite 返回图片
6.URLReWrite伪静态配置
还是比较实用的,他能隐藏我们真实的后端服务器的地址,
rewrite关键字
正则匹配
如何利用nginx做网关访问内网的服务器:
网关nginx配置代理规则:
目标服务器配置防火墙的访问规则:
这样就能实现服务器不能被外网直接访问,而是通过网关来访问了