1. 什么是代理服务器
1.1. 代理服务器的好处
1)提高访问速度 由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度。 2)防火墙作用 由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在代理服务器上设限,过滤某些不安全信息。 3)通过代理服务器访问不能访问的目标站点 互联网上有许多开发的代理服务器,客户机在访问受限时,可通过不受限的代理服务器访问目标站点,通俗说,我们使用的浏览器就是利用了代理服务器,虽然不能出国,但也可直接访问外网。
1.2. 代理服务器的分类
正向代理和反向代理:
正向代理:架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。 用户能感知到代理服务器的存在。
反向代理:现在许多大型web网站都用到反向代理。除了可以防止外网对内网服务器的恶性攻击、缓存以减少服务器的压力和访问安全控制之外,还可以进行负载均衡,将用户请求分配给多个服务器。 用户对代理服务器无感知。
2. 安装单机版nginx
2.1. nginx简介
Nginx是一款的 服务器/服务器及(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
2.2. 安装nginx服务
1) 环境准备
修改ip
a;修改主机名,
b;修改网关能上网,
c;关闭防火墙
d;修改系统安全设置
1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态
SELinux status: enabled
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled 重启机器即可。
2) 安装GCC编译器等工具:
一、安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
二、首先要安装 PCRE
PCRE 作用是让 Nginx 支持 Rewrite 功能。
1、下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
[root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
2、解压安装包:
[root@bogon src]# tar zxvf pcre-8.35.tar.gz
3、进入安装包目录
[root@bogon src]# cd pcre-8.35
4、编译安装
[root@bogon pcre-8.35]# ./configure
[root@bogon pcre-8.35]# make && make install
5、查看pcre版本
[root@bogon pcre-8.35]# pcre-config --version
3) 下载安装Nginx:
CentOS 6.9下配置 yum 安装 Nginx。
第一步,在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo:
cd /etc/yum.repos.d/
vim nginx.repo
填写如下内容:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
保存,则会产生一个/etc/yum.repos.d/nginx.repo文件。
下面直接执行如下指令即可自动安装好Nginx:
yum install nginx -y
安装完成,下面直接就可以启动Nginx了:
service nginx start
现在Nginx已经启动了,直接访问服务器就能看到Nginx欢迎页面了的。
2.3. 配置nginx服务
1) 修改配置文件/etc/nginx/nginx.conf
# 定义Nginx运行的用户 和 用户组 如果对应服务器暴露在外面的话建议使用权限较小的用户 防止被入侵
user root;
#Nginx进程数, 建议设置为等于CPU总核心数
worker_processes 1;
#开启全局错误日志类型
error_log /var/log/nginx/error.log warn;
#进程文件
pid /var/run/nginx.pid;events {
#单个进程最大连接数
worker_connections 1024;}http {
#扩展名与文件类型映射表
include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on;
#负载均衡组
upstream myServer{ server 192.168.153.160:8080; server 192.168.153.161:8080; } server { listen 80; server_name 192.168.153.167; #如果是集群环境,此处换成虚ip 192.168.153.222 location / { proxy_pass http://myServer; }} include /etc/nginx/conf.d/*.conf;}
保存退出,重启nginx服务。
2) 测试负载均衡,访问相同的url,显示的是不同的tomcat服务器页面。
3) 引入新问题
问题一:session变化,需要有session共享。
解决方案,使用redis实现session共享
问题二:nginx服务器存在单点故障。
解决方案,使用keepalived实现nginx高可靠集群。
3. 安装集群版nginx
3.1. 安装keepalived
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。类似软件还有(heardbeat,vcs).
在192.168.153.167和192.168.153.165两个机器分别执行下面的命令:
yum –y install keepalived
3.2. 配置keepalived
1) 修改192.168.153.167的配置文件/etc/keepalived/keepalived.conf
global_defs {
notification_email {
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_MASTER
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
#state MASTER
state BACKUP
nopreempt
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.153.222 #虚拟ip
}
}
2) 修改192.168.153.165的配置文件/etc/keepalived/keepalived.conf
global_defs {
notification_email {
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_BACKUP
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 66
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.153.222 #虚拟ip
}
}
3) 以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程
vim /usr/local/src/check_nginx_pid.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/sbin/nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
4) 设置keepalived开机自启动
chkconfig --level 23456 keepalived on
3.3. 测试
1) 启动两台192.168.153.167和192.168.153.165keepalived服务
2) 检查虚拟ip 192.168.153.222是否可以正常访问tomcat,并提供负载均衡服务。
3) 刷新后,session共享,tomcat服务轮询。
4) 通过192.168.153.160机器ssh 192.168.153.222(虚拟ip),发现虚拟IP在192.168.153.167上面。如下图
5) 关闭其中一台nginx(192.168.153.167)机器,并在windows机器cmd监控虚拟ip的连通性
6) 再次通过192.168.153.160机器ssh 192.168.153.222(虚拟ip),发现虚拟IP在192.168.153.165上面。如下图
7) 测试keepalived的抢占模式
a) 修改192.168.153.167的配置文件/etc/keepalived/keepalived.conf
b) 重启keepalived服务,通过ssh 192.168.153.222(虚拟ip)发现虚拟ip在主机192.168.153.167上。
c) 关闭192.168.153.167机器,通过ssh 192.168.153.222(虚拟ip)发现虚拟ip切换到备机192.168.153.165上。
d) 启动主机192.168.153.167,通过ssh 192.168.153.222(虚拟ip)发现虚拟ip切换回主机192.168.153.167上。
e) 访问http://192.168.153.222/qy73nginx/一切正常,无论是tomcat机器还是nginx都避免了单点故障。
至此,nginx单机版和集群版安装配置测试完成。