普通代理,forward proxy,是服务于特定用户(好比说一个公司内 / 一个局域网内的客户)以访问非特定的服务;php
反向代理,reverse proxy,是服务于非特定用户(对于公开互联网服务而言,一般是全部用户)以访问特定的服务。html
正向代理中,proxy和client同属一个LAN,对server透明;前端
反向代理中,proxy和server同属一个LAN,对client透明。linux
实际上proxy在两种代理中作的事都是代为收发请求和响应,不过从结构上来看正好左右互换了下,因此把后出现的那种代理方式叫成了反向代理。nginx
[2] 反向代理:Web服务器的经纪人web
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的链接请求,而后将请求转发给内部网络上的服务器,并将从服务器上获得的结果返回给internet上请求链接的客户端,此时代理服务器对外就表现为一个服务器。后端
[3] 反向代理的做用浏览器
保护网站安全:任何来自Internet的请求都必须先通过代理服务器;缓存
经过配置缓存功能加速Web请求:能够缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;安全
实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;
[4] 实验环境准备
WEB1:后端网页服务器1,IP地址为192.168.96.200,主机名为web01.example.com,启动httpd服务,并提供WEB页面web1的内容。
WEB2:后端网页服务器2,IP地址为192.168.96.201,主机名为web01.example.com,启动httpd服务,并提供WEB页面web2的内容。
Nginx:前端负载均衡器和反向代理服务器,IP地址为192.168.96.100,主机名为server.example.com。
全部实验用机使用CentOS7.2版本,预先Selinux配置为disable状态并关闭了防火墙服务。
[5] Nginx反向代理和负载均衡服务器配置模式
Nginx的upstream目前支持5种方式的分配
1 轮询(默认)
每一个请求按时间顺序逐一分配到不一样的后端服务器,若是后端服务器down掉,能自动剔除。
2 weight
指定轮询概率,weight和访问比率成正比,用于后端服务器性能不均的状况。
例如:
upstream bakend {
server 192.168.100.104 weight=10;
server 192.168.100.105 weight=10;
}
3 ip_hash
每一个请求按访问ip的hash结果分配,这样每一个访客固定访问一个后端服务器,能够
解决session的问题。
例如:
upstream bakend {
ip_hash;
server 192.168.100.104:80;
server 192.168.100.105:80;
}
4 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
例如:
upstream bakend {
server 192.168.100.104:80;
server 192.168.100.105:80;
fair;
}
5 url_hash(第三方)
按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器,后端服务
器为缓存时比较有效。
例如:
upstream backend {
server 192.168.100.104:3128;
server 192.168.100.105:3128;
hash $request_uri;
hash_method crc32;
每一个设备的状态设置为:
1. down 表示单前的server暂时不参与负载
2. weight 默认为1.weight越大,负载的权重就越大,根据服务器性能而定
3. max_fails :容许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4. fail_timeout:max_fails次失败后,暂停的时间。
5. backup: 其它全部的非backup机器down或者忙的时候,请求backup机器。因此这台机器压力会最轻。
Nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
[6] 配置反向代理和负载均衡
upstream webservers {
server 192.168.96.200:80 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.96.201:80 weight=4 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://webservers;
proxy_set_header X-Real-IP $remote_addr;
}
}
注,upstream是定义在server{ }以外的,不能定义在server{ }内部。定义好upstream以后,用proxy_pass引用一下便可。
[7] 给Nginx配置备份服务器
但你们想一下,若是不幸的是全部服务器都不能提供服务了怎么办,用户打开页面就会出现出错页面,那么会带来用户体验的下降,因此咱们能不能像配置LVS是配置sorry_server呢,答案是能够的,但这里不是配置sorry_server而是配置backup。
一、将配置文件进行以下修改,增长一个本地的错误报告服务器:
server {
listen 8080;
server_name localhost;
root /usr/share/nginx/html/errorpage;
index index.html;
}
upstream backend {
server 192.168.1.100:80 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.1.101:80 weight=4 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8080 backup;
}
二、而后在网页目录中建立对应的目录的错误文件
[root@proxy nginx]# mkdir -pv /usr/share/nginx/html/errorpage
mkdir: created directory ‘/usr/share/nginx/html/errorpage’
[root@proxy nginx]# echo "sorry" > /usr/share/nginx/html/errorpage/index.html
[root@proxy nginx]# cat /usr/share/nginx/html/errorpage/index.html
Sorry
1.在WEB1上和WEB2上中止HTTP服务
Systemctl stop httpd
2.从新在浏览器中刷新页面
安装PHP-FPM ( PHP FastCGI Process Manager ) 以便在Nginx中使用PHP脚本
[root@server ~]# yum -y install php php-mbstring php-pear php-fpm
[root@server ~]# vi /etc/php-fpm.d/www.conf
# line 39: 修改
user = nginx
# line 41: 修改
group = nginx
[root@server ~]# systemctl start php-fpm
[root@server ~]# systemctl enable php-fpm
[root@server ~]# vi /etc/nginx/nginx.conf
# 添加到 "server" 部分
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
[root@server ~]# systemctl restart nginx
[root@client ~]# echo "<?php phpinfo() ?>" > /usr/share/nginx/html/info.php