代理
概述
代理:计算机中的一种概念,一般指代码设计方式(如:AOP动态代理)或物理层访问方式(如:代理服务器)。
代理服务器:
- 概述(代理服务器,Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接国际互联网和局域网。
- 目的:
- 隐藏访问者的身份,伪装请求
- 访问不能够访问的地址或服务器
正向代理与反向代理的区别
正向代理
同学A向同学B借钱,由于两天前同学A向同学B借的橡皮没还,导致同学B不想借给同学A钱,于是同学A找到同学C,让同学C以C自己的名义帮忙向同学B借钱,同学C面子很大,成功的在同学B手中借到了钱,然后就交给了同学A,但是同学B则以为是同学C借的钱,不知道最后钱给了同学A。
这个案例中,同学C就是一个代理,同学A使用一个代理达成了自己的目的,而且同学A指定了被借钱的对象,知道代理方找的对象是同学B,这个过程就是正向代理。
反向代理
同学A拿着刚借到的200块钱开始做起了水产生意,从哈尔滨进海鲜往大连卖,两天的时间就赔光了,同学A觉得自己这次的失败是因为启动资金不充足,决定向银行申请贷款20万。于是同学A向银行申请了贷款,没过几日,同学A就收到了银行的20万元,当时他还纳闷儿,银行的钱是从哪来的?
这个案例中,银行就是一个代理,同学A只是向银行提出了自己的需求,银行则把钱借给了同学A,至于银行的钱哪来的,同学A不知道,只有银行知道,这个过程就是反向代理。
反向代理服务器
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
负载均衡
概述
在企业级项目中,可能会遇到高并发的情况,如果一台服务器应对不过来高并发的请求,就可以将一个项目部署到多台服务器上,把请求分发到多台服务器中进行处理,实现集群部署。
如果采用集群部署,首先面临的就是如何将请求分发到集群的各个服务器上,还要保证请求不能集中的分发到一台服务器上,要平均的或按照每台服务器能够处理的压力大小来合理分配,解决这个问题的方式就是负载均衡。
负载均衡服务器
使用负载均衡服务器即可解决上面的问题,一般的负载均衡服务器都可以进行策略配置,按照既定的策略进行请求分发。
Nginx服务器
概述
Nginx是一款轻量级的负载均衡/反向代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。
安装
-
在Nginx官网下载最新版Nginx安装包:http://nginx.org
-
将下载的安装包传输到服务器中,并解压
-
由于Nginx需要C环境进行编译,所以在安装Nginx之前,需要先安装配置C编译环境
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
-
进入到nginx解压之后的文件夹中,执行编译命令
./configure
-
编译成功以后,将编译后的结果安装到服务器中
make && make install
-
安装完毕后,Nginx服务默认会安装到
/usr/local/nginx
文件下
配置
Nginx运行需要进行文件配置,编辑conf/nginx.conf
文件
标准Nginx配置文件:
# 使用哪个对象去访问 注释掉了以后就是使用用户 一般就是root
user root;
worker_processes 8;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
·#工作时候 一个核心允许链接最大的连接数 自己可以调 例如 两个就是2048
events {
worker_connections 1024;
}
http {
client_max_body_size 100m;
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# 负载均衡配置
upstream web-server{
#配置多台服务器
server localhost:8080;
server localhost:8081;
}
server {
#启动时候监听的端口 监听哪个就是端口 端口可以有多个 要想再监听 就再加一个
listen 80;
# 监听的地址 对于服务器 针对于前方
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#反向代理配置
#拦截一个地址 从'/'开始
location / {
#把项目打包成一个压缩包 放在root文件夹下 然后解压 然后在下面两处配置
#root静态文件夹
root /etc/nginx/html/web-client;
#静态地址
index index.html;
#启动nginx
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# 反向代理配置
#^~ 通配符 代表所有
#只要 访问的服务 含有 web-server就反向代理到服务器 这个webserver是自定义的 跟上面的一一样
#也必须跟前端请求发送的baseAPI一样
location ^~ /web-server {
proxy_pass http://web-server/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 900;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
}
使用sbin/nginx -s reload
即可重新加载配置文件
启动
-
启动Nginx
sbin/nginx
-
关闭Nginx
sbin/nginx -s stop
-
重新加载Nginx配置文件
sbin/nginx -s reload