3.nginx反向代理服务器+负载均衡
nginx反向代理服务器+负载均衡
用nginx做反向代理和负载均衡非常简单,
支持两个用法: 1个proxy, 1个upstream,分别用来做反向代理,和负载均衡
以反向代理为例, nginx不自己处理php的相关请求,而是把php的相关请求转发给apache来处理.
有两台服务器,一台跑php,一台跑.html 客户端直接访问的是nginx,如果碰到.php,就会发送给apache处理,处理完成,返回给nginx,最后返回给客户端。
----这不就是传说的”动静分离”,动静分离不是一个严谨的说法,叫反向代理比较规范.
现在我们实现一个简单的反向代理:
1.在上面的课程中,我们在学习让nginx处理php的时候做了如下的配置,现在我们不让nginx跑php了,那么就要把相关的东西注释掉(如下图)
并添加如下一句:proxy_pass http://192.168.1.200:8080; 协议必须要有
注释掉之后,我们再访问192.168.1.200/test-if.php(因为80端口是默认的,可以不写,而且监听80端口的还是nginx,所以处理这次请求的还是nginx) 直接出现下载框。因为此时.php对于nginx来说只是一个文本文件而已,所以会出现下载。
2.进入apache
进入apache配置文件,做两件事:
2.1此时不能再Listen80了,因为nginx已经占了80端口了。我们改为8080
2.2把vhost引入进来
2.3启动apache,测试是否配置成功
访问192.168.1.200:8080 It works apache起来了。
3. 修改vhost配置文件
进行如下修改(注意不要忘记修改端口,apache服务器选择需要监听8080端口)
DocumentRoot修改成nginx的html下面:因为php文件放到了nginx的根目录中了,我想如果把php放在别的地方也是可以的吧?那时候DocumentRoot就不是nginx的目录了
注:在vituralhost的配置中,有一个选项是ServerName,该选项需配置成我们在地址栏中输入的域名一样。很多的时候我们感觉这个东西没有用,这个东西的作用是这样的:一个IP(192.168.1.200)可以绑定多个域名,比如a.com,b.com,DNS的作用就是把域名解析成IP,所以我们在地址栏输入不同的域名a.com或者b.com,都会被解析成同一个ip(.200),但是服务器如何区别你访问的到底是a.com还是b.com呢,就是通过域名来做区别的,域名和ServerName对应,那么服务器就知道用哪个VituralHost来作响应了。
4. 编译支持mysql gd等的apache 的php。因为前面我们讲的是php和nginx,php是以独立进程运行的(fpm),现在这里,我们让nginx作为反向代理服务器,也就是nginx本身不处理php,而是让apache去处理php,也就是apache和php配合,所以以前编译的php不能够用了,需要重新编译。要去掉fpm选项(--enable-fpm)。
注:nginx的php –enable –fpm
apache 的php –with-apxs2=/usr/local/httpd/bin/apxs
这就是编译nginx的php和编译apache的php的区别
访问test.php(test.php中有一幅图片和一个随机数,图片是静态资源,随机数是动态生成的)
在/usr/local/nginx/html/下,有一张图片,logo.png
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}
在浏览器中输入http://192.168.1.200/test.php
访问日志如下:
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}
apache日志:可以看出访问是 200 发出的,也就是nginx服务器
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}
nginx日志:访问是100发出的,也就是我们的客户端浏览器
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}
把proxy那句话复制成10个就成集群了,但是具体是哪个响应的?那是集群负载均衡算法决定的
但是会发现复制10次,会报错,这就要用到upstream,它把n个干活的后端绑定成一个虚拟服务器,直接请求虚拟服务器
反向代理后端如果有多台服务器,自然可形成负载均衡,
但proxy_pass如何指向多台服务器?
把多台服务器用 upstream指令绑定在一起并起个组名,
然后proxy_pass指向该组
注意:在写upstream的时候,里面的server不能写http://,会报错,http://是在proxy_pass那指定的。所以下面第一幅图是错误的,第二幅图是正确的
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}
注意:这里是把图片服务器进行了负载均衡,图片服务器用的是nginx,我们没有另外再做两个单独的服务器作为图片服务器,而是直接在做反向代理的nginx上,添加了两个虚拟主机,也就是server段。我在想,图片服务器用apache应该也是可以的,让nginx完全当做反向代理来用
默认的均衡的算法很简单,就是针对后端服务器的顺序,逐个请求.
也有其他负载均衡算法,如一致性哈希,需要安装第3方模块.
(自行预习nginx第3方模块的安装,以安装ngx_http_upstream_consistent_hash为例)
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}
反向代理导致了后端服务器的IP,为前端服务器的IP,而不是客户真正的IP,怎么办?
一般来说,经过代理服务器的时候,代理服务器有自己的ip,为了不丢失原来的ip,一般约定成俗,把原来客户的ip放在一个头信息里面
proxy_set_header X-Forwarded-For $romote_addr;
请求后端的php或者后端的图片的时候,它将会设置htpp协议里面的头信息,带给后端服务器,后端服务器会记录日志,在日志中,可以找到http-x-forwarded-for
后端服务器日志如下图:
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}
作业及下周实验课程
1:在虚拟机上装3个端口的nginx服务器
2:装ecshop/discuz,并做url重写
3: 利用3个端口的服务器,来实现简单的负载均衡.
下周实验:
1:数据企业名称/电话/简介等信息约2500-3000万条
2: 服务器 4台, 2G/4核(1)
8G/双核(3)
3: 目标 3000PV
设计: 服务器的架构图, 包括nginx/mysql/php/memcached的分布.
每人要出一个设计方案
在浏览器中输入http://192.168.1.200/test.php
访问日志如下:
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}
3.nginx反向代理服务器+负载均衡的更多相关文章
- Nginx 反向代理 负载均衡 虚拟主机配置
Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...
- Nginx 反向代理 负载均衡 虚拟主机
Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...
- 十.nginx反向代理负载均衡服务实践部署
期中集群架构-第十章-nginx反向代理负载均衡章节章节====================================================================== 0 ...
- 【转】Nginx 反向代理 负载均衡 虚拟主机配置
原文:http://www.cnblogs.com/itdragon/p/8059000.html Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代 ...
- Centos7.4 Nginx反向代理+负载均衡配置
Ningx是一款高性能的HTTP和反向代理服务器,配置起来也比较简单. 测试环境: 172.16.65.190 Nginx-反向代理 172.16.65.191 Ningx-Web 172.16.65 ...
- 项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现
实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP ...
- nginx 反向代理 负载均衡
nginx反向代理 用户(浏览器) 请求网站资源 -> 直接定位到django后台(所有的请求压力,都直接给了后台) django默认对并发性 很差,并且处理网页的静态资源,效率很差 10万个并 ...
- 项目实战2.1—nginx 反向代理负载均衡、动静分离和缓存的实现
总项目流程图,详见 http://www.cnblogs.com/along21/p/8000812.html 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备 ...
- 项目实战02:nginx 反向代理负载均衡、动静分离和缓存的实现
目录 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 2.下载编译安装tengine 3.设置代理服务器的配置文件 4.启动tengine服务 5.开启后端的web服务 6.测试 实验二:ng ...
随机推荐
- [linux小技巧]批量移动文件
for i in {1..23};do mv test$i/ ../;done
- BZOJ 4554 [Tjoi2016&Heoi2016]游戏 ——二分图
出原题,直接二分图匹配即可. #include <cstdio> #include <vector> #include <cstring> using namesp ...
- BZOJ4819 [Sdoi2017]新生舞会 【01分数规划 + 费用流】
题目 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的关系,比如两个人 ...
- 刷题总结——String painter(hdu2476)
题目: Problem Description There are two strings A and B with equal length. Both strings are made up of ...
- [转] Makefile 基础 (6) —— Makefile 使用条件判断
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...
- hdu 4870 rating(高斯消元求期望)
Rating Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- hdu 3613 KMP算法扩展
Best Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 标准C程序设计七---101
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- hdu 1401(单广各种卡的搜索题||双广秒速)
Solitaire Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- 数据结构自己实现——Linklist
//单???链???表??? #include <iostream> using namespace std; typedef char datatype; typedef struct ...