-
需求场景
近日,博主遇到一个市场的客户提出如下需求:
- 市场平台是一个独立的服务群网络;说要部署三个web,一个门户、一个后台、一个商城;
- web需要使用三个子域名,如用我的域名为例:www.oxblog.cn是门户、admin.oxblog.cn是后台、shop.oxblog.cn是商城;
- 且三个web也就是域名要指向同一个公网ip,做备案;内网三个web分别部署在三台服务器上;其中商城web还需使用https;
♠具体操作♠
①、服务器环境规划:
三台web都在一个子网:192.168.1.0/24、网关:192.168.1.1
门户web:192.168.1.2——端口:80、oxblog.cn、www.oxblog.cn
后台web:192.168.1.3——端口:80、admin.oxblog.cn
商城web:192.168.1.4——端口:8443(自定义)、shop.oxblog.cn
代理web:192.168.1.5、域名oxblog.cn备案使用公网ip:124.124.124.124
其中商城web需要https支持,并http访问自动转发到https页面
四台服务器操作系统均为:Linux-Redhat-6.6
②、web网络规划:
会员和客户访问web要求直接通过三个域名,如此三个域名备案和dns解析都要指向:124.124.124.124
在网络外层防火墙开启124.124.124.124的http和https端口即:80、443
124.124.124.124开放的端口通过dnat方式需对应到代理服务器内网ip192.168.1.5的http和https端口上
其次便是通过配置反向代理,通过域名虚拟主机记录分别指向三个web的内网ip的web端口
如此当客户和会员访问域名时,则解析都直接访问124.124.124.124的80和443端口
然后dnat指向访问代理web192.168.1.5的80和443端口
然后代理web通过虚拟主机三级域名主机记录也就是主机头配置分别向对应的web请求数据
三个web接到请求后,响应数据到代理服务器,代理web在响应数据反馈到客户和会员浏览页面
③、网络配置忽略,反向代理配置如下:
首先正确安装安装apache服务,可以使用yum简单安装即可;
然后找到httpd.conf配置文件打开并编辑它:
!--首先找到NameVirtualHost参数并作如下修改--!
Listen *:80
NameVirtualHost *:80
NamevirtualHost *:443
!--配置VirtualHost反向代理配置--!
<VirtualHost *:80>
ServerName www.oxblog.cn
ProxyRequests off
ProxyPass / http://192.168.1.2/
ProxyPassReverse / http://192.168.1.2/
</VirtualHost>
<VirtualHost *:80>
ServerName admin.oxblog.cn
ProxyRequests off
ProxyPass / http://192.168.1.3/
ProxyPassReverse / http://192.168.1.3/
</VirtualHost>
<VirtualHost *:80>
ServerName shop.oxblog.cn
RewriteEngine on
RewriteLogLevel 3
RewriteLog /tmp/a.log
RewriteRule ^/(.*)$ https://shop.oxblog.cn/$1 [R=301]
</VirtualHost>
!--配置shop站点基于443端口的https的反向代理配置,我们需要在ssl的专用配置文件中配置--!
!--当然需要在httpd.conf引用这个文件,这里博主是配置在conf/extra/httpd-ssl.conf文件中的--!
Include conf/extra/httpd-ssl.conf
Listen *:443
<VirtualHost *:443>
ServerName shop.oxblog.cn
ProxyRequests off
ProxyPass / https://192.168.1.4:8443/
ProxyPassReverse / https://192.168.1.4:8443/
SSLProtocol all -SSLv2 -SSLv3
SSLEngine on
SSLProxyEngine on
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLCertificateFile "/etc/httpd/conf/server.crt"
#SSLCertificateChainFile /etc/httpd/conf/ca.crt
SSLCertificateKeyFile "/etc/httpd/conf/server.key"
</VirtualHost>
④、启用并配置ssl、及CA证书申请:
首先我们使用ssl,则需要有openssl的支持,直接yum安装再好不过了!
当然如果是源码安装,在安装apache的时候,编译时需要添加ssl模块,或后期动态编译;
#./configure --prefix=/apache/httpd --enable-ssl=static --with-ssl=/usr/local/ssl
/bin/apxs -a -i -c -L/usr/lib/openssl/engines/lib -c *.c -lcrypto -lssl -ldl
!--首先我们要生成ssl密钥,即我们说的私钥文件--!
openssl genrsa -des3 1024 > server.key
!--从密钥中删除密码(方便之后每次重启web不用每次都输入口令)--!
openssl rsa -in server.key > server2.key && mv server2.key server.key
!--创建服务器密钥用来请求证书的未签署的csr文件,按提示输入一些参数--!
openssl req -new -key server.key -out server.csr
!--通过本地服务器签署csr生成crt证书文件--!
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365
用openssl x509 -noout -text -in server.crt可以查看证书的内容。证书实际上包含了Public Key.
!--在apache配置文件中引用ssl配置文件并启用ssl模块,httpd.conf--!
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf ##去掉此行注释
!--最后可以查看上面https反向代理的配置--!
SSLEngine on
SSLProxyEngine on
SSLCertificateFile "/etc/httpd/conf/server.crt"
SSLCertificateKeyFile "/etc/httpd/conf/server.key"
#SSLCertificateChainFile /etc/httpd/conf/cabundle.crt
其中上面两行,是分别开启ssl和ssl反向代理功能;再下面两行分别是指定ssl的证书和私钥文件,即上面生成的文件;
最后一行是一种中继证书链,这是当购买证书是三级证书的时候,需要其证书追溯到起始证书机构上,一般注释不使用即可;
⑤、本次生产环境中反向代理后期顾虑和方案:
采用反向代理其实很简单,但工作中还要满足客户的各种需求并提出相应方案;
反向代理,一台专用服务器,意思就是,所有链接都经过它来做转发,压力山大;
一台服务器一般只有一个ip,一个ip的进程数是有限制的,三个web一起局限性压力山大;
如此,我们是否可以给代理服务器配置多个ip监听服务?
我们需要配置负载均衡吗?如何配置?
真实服务器不变,代理服务器增加数台,并给代理服务器做负载均衡?
代理服务器数量不变,配置多个监听ip?但是其外网ip只有一个,还是要做负载均衡;
真实服务器每个web服务,都有多台?同一个web服务反向代理是否可以配置多个?配置之后,如果web是需要会话保持的,而不是静态页面,会不会有问题呢?
如此同一个web服务多台服务器,配置负载均衡虚拟成一个是否也可以!
(哈哈,就这么多了,不明白记得留言哦!)
/不错good idea
好好学习,天天向上