nginx之30分钟搞定nginx反向代理和负载均衡

1. 什么是代理服务器

1.1. 代理服务器的好处

nginx之30分钟搞定nginx反向代理和负载均衡_第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服务

nginx之30分钟搞定nginx反向代理和负载均衡_第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服务器页面。

nginx之30分钟搞定nginx反向代理和负载均衡_第3张图片

nginx之30分钟搞定nginx反向代理和负载均衡_第4张图片

3) 引入新问题

问题一:session变化,需要有session共享。

解决方案,使用redis实现session共享

问题二:nginx服务器存在单点故障。

解决方案,使用keepalived实现nginx高可靠集群。

3. 安装集群版nginx

nginx之30分钟搞定nginx反向代理和负载均衡_第5张图片

集群nginx服务器

3.1. 安装keepalived

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。类似软件还有(heardbeat,vcs).

在192.168.153.167和192.168.153.165两个机器分别执行下面的命令:

yum –y install keepalived

nginx之30分钟搞定nginx反向代理和负载均衡

3.2. 配置keepalived

1) 修改192.168.153.167的配置文件/etc/keepalived/keepalived.conf

global_defs {

notification_email {

[email protected]

}

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 {

[email protected]

}

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服务

nginx之30分钟搞定nginx反向代理和负载均衡

2) 检查虚拟ip 192.168.153.222是否可以正常访问tomcat,并提供负载均衡服务。

nginx之30分钟搞定nginx反向代理和负载均衡_第6张图片

nginx之30分钟搞定nginx反向代理和负载均衡_第7张图片

3) 刷新后,session共享,tomcat服务轮询。

nginx之30分钟搞定nginx反向代理和负载均衡_第8张图片

4) 通过192.168.153.160机器ssh 192.168.153.222(虚拟ip),发现虚拟IP在192.168.153.167上面。如下图

nginx之30分钟搞定nginx反向代理和负载均衡_第9张图片

5) 关闭其中一台nginx(192.168.153.167)机器,并在windows机器cmd监控虚拟ip的连通性

nginx之30分钟搞定nginx反向代理和负载均衡_第10张图片

6) 再次通过192.168.153.160机器ssh 192.168.153.222(虚拟ip),发现虚拟IP在192.168.153.165上面。如下图

nginx之30分钟搞定nginx反向代理和负载均衡_第11张图片

7) 测试keepalived的抢占模式

a) 修改192.168.153.167的配置文件/etc/keepalived/keepalived.conf

nginx之30分钟搞定nginx反向代理和负载均衡

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单机版和集群版安装配置测试完成。

你可能感兴趣的:(php技术,web服务器架构,tpshop)