LNMP+SSL+LVS-DR+ipvsadm+LVS Persistence 实现同一种服务的不同端口定向到同一台 realserver
说明:本实验是在 VMware 虚拟机中实现:
共需三个虚拟 linux 主机,三台虚拟 linux 主机的网卡模式都为桥接,
本文以 web 服务的 http 与 https 为例
三台虚拟主机分别为: director , RS1 , RS2 ,其中 RS1 和 RS2 为 realserver
director: dip eth0 172.16.22.1
vip eth0:1 172.16.22.2
RS1 rip eth0 172.16.22.10 网关: 172.16.0.1
vip lo:0 172.16.22.2 子网掩码: 255.255.255.255
RS2 rip eth0 172.16.22.11 网关: 172.16.0.1
vip lo:0 172.16.22.2 255.255.255.255
确保 windows 的防火墙以及虚拟机里的 linux 防火墙完全关闭
图示如下:
前提: RS1 和 RS2 已经搭建好 LNMP 平台,具体实施细节请看:
http://lihuan.blog.运维网.com/4391550/809395
这里不再赘述。
实现过程:
1. 在 director 上安装 ipvsadm ,开启转发功能并配置好 ip 地址
# grep –i “vs” /boot/config-2.8.18-164.e15
# yum install ipvsadm –y
# rpm –ql ipvsadm
# sysctl –w net.ipv4.ip_forward=1
# setenforce=0
# ifconfig eth0 172.16.22.1 255.255.0.0
# ifconfig eth0:1 172.16.22.2 broadcast 172.16.22.2 netmask 255.255.255.255 up
# route –add –host 172.16.22.2 dev eth0:1
2. 在 RS1 上配置 IP 与 arp规则:
# ifconfig eth0 172.16.22.10 255.255.0.0
# ifconfig lo down
# ifconfig lo up
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# ifconfig lo:0 172.16.22.2 broadcast 172.16.22.2 netmask 255.255.255.255 up
# route add –host 172.16.22.2 dev lo:0
#echo
“rs1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111” > /var/www/html/index.html
# setenforce=0
# service httpd restart
# elinks -dump http://172.16.22.10
此时说明本机可以正常访问 web 服务了。
3. 在 RS2 上配置 IP 与 arp规则:
# ifconfig eth0 172.16.22.11 255.255.0.0
# ifconfig lo down
# ifconfig lo up
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# ifconfig lo:0 172.16.22.2 broadcast 172.16.22.2 netmask 255.255.255.255 up
# route add –host 172.16.22.2 dev lo:0
#echo
“rs2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222” > /var/www/html/index.html
# setenforce=0
# service httpd restart
# elinks -dump http://172.16.22.11
此时说明本机可以正常访问 web 服务了。
4. 为 RS1 和 RS2 准备证书文件与私钥文件
(1). 在 RS1 上:
# cd /etc/pki/tls
# vim openssl.cnf
[ CA_default ]
dir = ../../CA # Where everything is kept
把上面 ”=../../CA” 改为 ”=/etc/pki/CA”
# cd ..
# cd CA
# mkdir certs crl newcerts
# touch index.txt
# echo 01 > serial
# echo 01 > crlnumber
# (umask 077;openssl genrsa 2048 > private/cakey.pem) #生成CA自己的私钥
# openssl req –new –x509 –key private/cakey.pem –out cacert.pem –days 3650
依次输入 ”CN 、 Henan 、 ZZ 、 M 、 Tech 、 、 ” 这是 CA 为自己签发证书
# mkdir /etc/nginx/ssl
# cd /etc/nginx/ssl
# (umask 077;openssl genrsa 1024 > nginx.key) #生成nginx自己的私钥
# openssl req –new –key nginx.key –out nginx.csr
依次输入 ”CN 、 Henan 、 ZZ 、 M 、 Tech 、 、 ” ,这是生成 nginx 的证书签发请求
# openssl ca –in nginx.csr –out nginx.crt #CA 为 nginx 颁发证书
(2). 在 RS2 上:
# mkdir /etc/nginx/ssl
# cd /etc/nginx/ssl
# (umask 077;openssl genrsa 1024 > nginx.key) #生成nginx自己的私钥
# openssl req –new –key nginx.key –out nginx.csr
依次输入 ”CN 、 Henan 、 ZZ 、 M 、 Tech 、 、 ” ,这是生成 nginx 的证书签发请求
# scp nginx.csr root@172.16.22.10:/root # 此时需要输入 RS1 的 root 用户的密码
把 RS2 上 nginx 的证书签发请求拷贝到 RS1 上 , 由 RS1 的 CA 签发证书
在 RS1 上:
# cd
# openssl ca –in nginx.csr –out nginx.crt #CA 为 nginx 颁发证书
# scp nginx.crt root@172.16.22.11:/etc/nginx/ssl # 此时需要输入 RS2 的 root 用户的密码
5. 更改 RS1 和 RS2 的 nginx配置文件,以支持 https 协议
在 RS1 上:
# vim /etc/nginx/nginx.conf
修改:
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#} 为:
# HTTPS server
#
server {
listen 443;
server_name www.lihuan.com;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
说明: RS2 上修改配置文件支持 https 协议的方法同 RS1 ,这里不再赘述。
6. 在 director 上定义 ipvsadm 规则与持久防火墙标记,以实现同一个服务的不同端口定向到同一台 realserver 中
# iptables –t mangle –A PREROUTING –i eth0 –p tcp –d 172.16.22.2 –dport 80 –j MARK –set-mark 20
# iptables –t mangle –A PREROUTING –i eth0 –p tcp –d 172.16.22.2 –dport 443 –j MARK –set-mark 20
# ipvsadm –A –f 20 –s wlc –p 2000
# ipvsadm –a –f 20 –r 172.16.22.10 –g –w 5
# ipvsadm –a –f 20 –r 172.16.22.11 –g –w 4
说明:上面几条语句中绿色的字体的范围可以是 0-99 的任意整数,此处选为 20 ,一旦选为 20 ,这几条语句必须都是用 20 才能保证同一服务的不同端口定向到同一台 realserver 中
7. 测试
前提:把 RS1 上的 CA 证书导入到 windows 物理机的浏览器中。
在浏览器输入:
http://172.16.22.2, 出现:
然后再输入 https://172.16.22.2, 出现:
此时发现 http 和 https 的结果是一样的,说明同一服务的的不同端口定向到
同一台 realserver 中(有可能是 RS1 或者 RS2 ,这个是不确定的)
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com