网站首页 > 精选教程 正文
Nginx作为一个高性能的web服务器,小邹的个人网站,公司的站点业务和H5网关等也基本都会用到。下面小邹就nginx的非常常用的几个功能做一些讲述和分析,学会了这几个功能,平常的开发和部署就不是什么问题了。
五大主要功能:
- 正向代理
- 反向代理
- 透明代理
- 负载均衡
- 静态服务器
- nginx的安装
1. 正向代理
如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
正向代理的配置:
1server { 2 #指定DNS服务器IP地址 3 resolver 114.114.114.114; 4 #指定代理端口 5 listen 8080; 6 location / { 7 #设定代理服务器的协议和地址(固定不变) 8 proxy_pass http://$http_host$request_uri; 9 } 10}
这样就可以做到内网中端口为8080的服务器主动请求到1.2.13.4的主机上,如在Linux下可以:
1curl --proxy proxy_server:8080 http://www.taobao.com/
正向代理的关键配置:
- resolver:DNS服务器IP地址
- listen:主动发起请求的内网服务器端口
- proxy_pass:代理服务器的协议和地址
2. 反向代理
如果局域网向Internet提供资源服务,让Internet上的其他客户端来访问局域网内的资源,使它们必须通过一个代理服务器来进行访问,这种服务就称为反向代理。正向代理和反向代理逻辑正好相反。
反向代理配置:
这样就可以通过a.xxx.com来访问a项目对应的网站了,而不需要带上难看的端口号。
反向代理的配置关键点是:
- server_name:代表客户端向服务器发起请求时输入的域名
- proxy_pass:代表源服务器的访问地址,也就是真正处理请求的服务器(localhost+端口号)。
3. 透明代理
透明代理:也叫做简单代理,意思客户端向服务端发起请求时,请求会先到达透明代理服务器,代理服务器再把请求转交给真实的源服务器处理,也就是是客户端根本不知道有代理服务器的存在。
有人说透明代理和反向代理有点像,都是由代理服务器先接受请求,再转发到源服务器。其实本质上是有区别的,透明代理是客户端感知不到代理服务器的存在,而反向代理是客户端感知只有一个代理服务器的存在,因此他们一个是隐藏了自己,一个是隐藏了源服务器。事实上,透明代理和正向代理才是相像的,都是由客户端主动发起请求,代理服务器处理;他们差异点在于:正向代理是代理服务器代替客户端请求,而透明代理是客户端在发起请求时,会先经过透明代理服务器,再达到服务端,在这过程中,客户端是感知不到这个代理服务器的。
4. 负载均衡
负载均衡:将服务器接收到的请求按照规则分发的过程,称为负载均衡。负载均衡是反向代理的一种体现。
nginx实现负载均衡有几种模式:
- 轮询:每个请求按时间顺序逐一分配到不同的后端服务器,也是nginx的默认模式。轮询模式的配置很简单,只需要把服务器列表加入到upstream模块中即可。
下面的配置是指:负载中有三台服务器,当请求到达时,nginx按照时间顺序把请求分配给三台服务器处理。
1upstream serverList { 2 server 1.2.3.4; 3 server 1.2.3.5; 4 server 1.2.3.6; 5}
- ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。
下面的配置是指:负载中有三台服务器,当请求到达时,nginx优先按照ip_hash的结果进行分配,也就是同一个IP的请求固定在某一台服务器上,其它则按时间顺序把请求分配给三台服务器处理。
1upstream serverList { 2 ip_hash 3 server 1.2.3.4; 4 server 1.2.3.5; 5 server 1.2.3.6; 6}
- url_hash:按访问url的hash结果来分配请求,相同的url固定转发到同一个后端服务器处理。
1upstream serverList { 2 server 1.2.3.4; 3 server 1.2.3.5; 4 server 1.2.3.6; 5 hash $request_uri; 6 hash_method crc32; 7}
- fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
1upstream serverList { 2 server 1.2.3.4; 3 server 1.2.3.5; 4 server 1.2.3.6; 5 fair; 6}
而在每一种模式中,每一台服务器后面的可以携带的参数有:
- down: 当前服务器暂不参与负载
- weight: 权重,值越大,服务器的负载量越大。
- max_fails:允许请求失败的次数,默认为1。
- fail_timeout:max_fails次失败后暂停的时间。
- backup:备份机, 只有其它所有的非backup机器down或者忙时才会请求backup机器。
如下面的配置是指:负载中有三台服务器,当请求到达时,nginx按时间顺序和权重把请求分配给三台服务器处理,例如有100个请求,有30%是服务器4处理,有50%的请求是服务器5处理,有20%的请求是服务器6处理。
1upstream serverList { 2 server 1.2.3.4 weight=30; 3 server 1.2.3.5 weight=50; 4 server 1.2.3.6 weight=20; 5}
如下面的配置是指:负载中有三台服务器,服务器4的失败超时时间为60s,服务器5暂不参与负载,服务器6只用作备份机。
1upstream serverList { 2 server 1.2.3.4 fail_timeout=60s; 3 server 1.2.3.5 down; 4 server 1.2.3.6 backup; 5}
下面是一个配置负载均衡的示例(只写了关键配置):其中:
- upstream:是负载的配置模块,serverList是名称,随便起
- server_name:是客户端请求的域名地址
- proxy_pass:是指向负载的列表的模块,如serverList
1upstream serverList { 2 server 1.2.3.4 weight=30; 3 server 1.2.3.5 down; 4 server 1.2.3.6 backup; 5} 6 7server { 8 listen 80; 9 server_name www.xxx.com; 10 root html; 11 index index.html index.htm index.php; 12 location / { 13 proxy_pass http://serverList; 14 proxy_redirect off; 15 proxy_set_header Host $host; 16 } 17}
5. 静态服务器
现在很多项目流行前后分离,也就是前端服务器和后端服务器分离,分别部署,这样的方式能让前后端人员能各司其职,不需要互相依赖,而前后分离中,前端项目的运行是不需要用Tomcat、Apache等服务器环境的,因此可以直接用nginx来作为静态服务器。
静态服务器的配置如下,其中关键配置为:
- root:直接静态项目的绝对路径的根目录。
- server_name : 静态网站访问的域名地址。
1server { 2 listen 80; 3 server_name www.xxx.com; 4 client_max_body_size 1024M; 5 location / { 6 root /var/www/xxx_static; 7 index index.html; 8 } 9 }
6. nginx的安装
学了这么多nginx的配置用法之后,我们需要对每一个知识点做一下测试,才能印象深刻,在此之前,我们需要知道nginx是怎么安装,下面以Linux环境为例,简述yum方式安装nginx的步骤:
- 安装依赖:
1//一键安装上面四个依赖 2yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
- 安装nginx:
1yum install nginx
- 检查是否安装成功:
1nginx -v
- 启动/挺尸nginx:
1/etc/init.d/nginx start 2/etc/init.d/nginx stop
- 编辑配置文件:
1/etc/nginx/nginx.conf
这些步骤都完成之后,我们就可以进入nginx的配置文件nginx.conf对上面的各个知识点,进行配置和测试了。
- 上一篇: 服务器上对 PHP-FPM 和 Nginx 进行安装配置详解
- 下一篇: 如何从零开始学习Nginx?
猜你喜欢
- 2024-09-22 服务器上对 PHP-FPM 和 Nginx 进行安装配置详解
- 2024-09-22 Nginx的安装、配置文件详解以及基本应用
- 2024-09-22 linux nginx安装配置
- 2024-09-22 Nginx 安装配置介绍
你 发表评论:
欢迎- 最近发表
-
- java 服务之间调用(rpc)(java实现服务器)
- Java机器学习库(Java ML)(二、聚类)
- 「Java库」如何使用优秀的加密库Jasypt来保护你的敏感信息?
- GitHub精选 | 轻量级Android和Java日志库
- Java面试官:MySQL binlog 有什么作用?主从延迟的了解么?
- Excel函数核武器库:50个高频场景公式——第二弹
- Excel函数核武器库:50个高频场景公式——第一弹
- Spring Cache高性能缓存库 - Caffeine简介
- Java通过Kafka Streams库来实现数据流处理
- 一连问了好几个大佬,竟然都不知道Redis为什么默认16个数据库?
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)