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 ...
随机推荐
- 精通CSS高级Web标准解决方案(1-3 规划、组织与维护样式表)
对文档应用样式 对代码进行注释/*......*/ 结构性注释 自我提示 删除注释.优化样式表 样式指南:解释代码与站点的视觉设计是如何组织在一起的 站点结构.文件结构.命名规则 编码标准:(X)ht ...
- CodeM美团点评编程大赛初赛A轮
因为语文太差弃赛,第一个追及问题看不懂我就弃赛了.打进复赛确实挺难的,补一下题,锻炼下就行了. 身体训练 时间限制:1秒 空间限制:32768K 美团外卖的配送员用变速跑的方式进行身体训练.他们训练的 ...
- 测试jsonp
login<?php $type = $_GET['type']; if(empty($type)) { $url = ""; }else { if($type == 'lo ...
- iOS学习笔记29-系统服务(二)通讯录
一.通讯录 iOS中的通讯录是存储在数据库中的,由于iOS的权限设计,开发人员是不允许直接访问通讯录数据库的,实现通讯录操作需要使用到AddressBook.framework框架. AddressB ...
- restful的nginx配置方法
location /{ root /webserver/www/a.tk.com; index index.html index.htm index.php; if ( $document_uri ~ ...
- poj 2379 Sum of Consecutive Prime Numbers
...
- ADO:DataSet存入缓存Cache中并使用
原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- 【MFC】VS2013 动态创建快捷菜单(右键菜单)
参考 http://blog.csdn.net/csdnzhwk/article/details/47395639 参考 http://blog.csdn.net/jiadabin/article/d ...
- C 语言 文件读写
在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之.一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:type ...
- Word Ladder系列
1.Word Ladder 问题描述: 给两个word(beginWord和endWord)和一个字典word list,找出从beginWord到endWord之间的长度最长的一个序列,条件: 1. ...