正向代理最大的特点是客户端非常明确要访问的服务器地址。服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
总结
始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口
用途
(1)访问原来无法访问的资源,如Google
(2) 可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。
总结
客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。
反向代理,“它代理的是服务端,代服务端接收请求”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
用途
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载
安装相关依赖
yum install pcre-devel zlib zlib-devel openssl openssl-devel
上传解压压缩包
tar zxvf nginx-1.12.2.tar.gz
创建目录,检测配置
mkdir -p /usr/local/nginx
./configure --prefix=/usr/local/nginx
预编译和安装
make && make install
启动、停止相关命令
cd /usr/local/nginx/sbin/
./nginx
./nginx -s stop
./nginx -s start
在进行./configure 命令的时候经常会因为缺少库文件而报错,如下:
错误一:缺少gc++库文件
解决方式:在线安装gcc gcc-++
错误二:缺少PCRE库
./configure: error: the HTTP rewrite module requires the PCRE library.
解决方式:安装pcre-devel解决问题
yum -y install pcre-devel
错误三:
错误提示:./configure: error: the HTTP cache module requires md5 functions
from OpenSSL library. You can either disable the module by using
–without-http-cache option, or install the OpenSSL library into the system,
or build the OpenSSL library statically from the source with nginx by using
–with-http_ssl_module –with-openssl= options.
解决方式:
yum -y install openssl openssl-devel
安装后继续执行configure命令,即可完成Nginx的安装
./configure --prefix=/usr/local/nginx
nginx的配置文件如下:
user root;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 1000000;
worker_rlimit_nofile 65535;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 3750;
#accept_mutex on;
#multi_accept on;
use epoll;
}
http {
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; # 激活 TCP_CORK socket 选择
tcp_nodelay on; # 数据在传输的过程中不进缓存
keepalive_timeout 65 60;
client_header_timeout 15;
client_body_timeout 15;
send_timeout 25;
client_max_body_size 8m; # 设置客户端最大的请求主体大小为 8 M
gzip on;
gzip_min_length 1k; # 允许压缩的对象的最小字节
gzip_buffers 4 32k; # 压缩缓冲区大小,表示申请4个单位为32k的内存作为压缩结果的缓存
gzip_http_version 1.1; # 压缩版本,用于设置识别HTTP协议版本
gzip_comp_level 9; # 压缩级别,1级压缩比最小但处理速度最快,9级压缩比最高但处理速度最慢
gzip_types text/plain application/x-javascript text/css application/xml; # 允许压缩的媒体类型
gzip_vary on; # 该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用代理服务器缓存经过Nginx压缩的数据
include vhosts.conf;
server_tokens off;
}
stream {
upstream openldap {
hash $remote_addr consistent;
server 10.1.2.93:389 max_fails=4 fail_timeout=30s;
server 10.1.2.94:389 max_fails=6 fail_timeout=30s;
}
server {
listen 389;
proxy_pass openldap;
proxy_connect_timeout 60;
}
}
为了满足系统的高可用,在搭建nginx时使用Keepalived检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中。keepalived高可用结构如下:
安装keepalived
yum install -y keepalived
keepalived.conf配置文件如下:
! Configuration File for keepalived
global_defs {
# notification_email {
# [email protected]
# [email protected]
# [email protected]
# }
# notification_email_from [email protected]
# smtp_server 192.168.200.1
# smtp_connect_timeout 30
router_id proxy.hep.com
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本
interval 2 #每2秒检测一次nginx的运行状态
weight -20 #失败一次,将自己的优先级-20
}
vrrp_instance VI_1 {
state BACKUP #BACKUP备状态,防止资源抢占,主备节点均采用BACKUP
interface ens32 #网卡名,可使用ifconfig查看本机网卡名
virtual_router_id 51 #虚拟路由ID,主备节点必须一致
mcast_src_ip 10.1.2.91 #本机IP
priority 100 #优先级,值越大,优先级越高,主节点优先级比备节点高
nopreempt #设置不抢占资源,在主节点故障,备节点启用时,主节点恢复不抢占备节点,依旧使用备节点来进行请求
advert_int 1 #组播信息发送间隔,主备节点必须一致
#设置验证信息,主备节点必须一致
authentication {
auth_type PASS
auth_pass Zgjm0817
# smtp_connect_timeout 30
# smtp_connect_timeout 30
router_id proxy.hep.com
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP #BACKUP备状态,防止资源抢占,主备节点均采用BACKUP
interface ens32 #网卡名,可使用ifconfig查看本机网卡名
virtual_router_id 51 #虚拟路由ID,主备节点必须一致
mcast_src_ip 10.1.2.91 #本机IP
priority 100 #优先级,值越大,优先级越高,主节点优先级比备节点高
nopreempt #设置不抢占资源,在主节点故障,备节点启用时,主节点恢复不抢占备节点,依旧使用备节点来进行请求
advert_int 1 #组播信息发送间隔,主备节点必须一致
#设置验证信息,主备节点必须一致
authentication {
auth_type PASS
auth_pass Zgjm0817
}
track_script {
chk_nginx
}
virtual_ipaddress {
10.1.2.90 #虚拟IP地址
}
}
keepalived.conf中的所有配置文件参数详解参考:
https://blog.csdn.net/mofiu/article/details/76644012
从机配置文件与主机几乎相同,只有vrrp_instance VI_1中的 mcast_src_ip和 priority 不同,变化如下:
vrrp_instance VI_1 {
mcast_src_ip 10.1.2.92#本机IP
priority 90#优先级,值越大,优先级越高,主节点优先级比备节点高
}
chk_nginx 中的检查脚本如下:
#!/bin/bash
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
脚本解析
ps -C nginx –no-header
这里涉及ps 的用法,我们一般用ps查看相关进程,一般都是用 ps -ef | grep XX 但是这样通常都会覆盖一个grep的进程
我们可以用ps -C 或ps -c 的方式, -C 后面接命令的名字 ,–no-header 不打印头信息,如下:
wc -l 行数计算,如果
如果值为0,即代表服务未启动
如果值为非0,即代表服务已启动
killall keepalived以服务名称杀死进程
上面那段完整的脚本意思即为:
判断nginx 服务是否启动,如果未启动,执行启动命令,睡眠2秒。再次判断,如果启动失败,关掉keepalived,进入从节点。
启动keepalived服务
service keepalived start
查看虚拟ip
启动后可以通过访问虚拟ip测试keepalived是否跳转ip成功,然后kill掉该ip的keepalived再重新访问,测试是否能正常访问跳到另外一个ip。