Apache 实现ProxyPass转发URL到Tomcat并实现http自动转https - OPEN 开发经验库
http://www.open-open.com/lib/view/open1404644133495.htmlphp
原理:html
客户浏览器使用https协议访问 ApacheServer 。ApacheServer将请求转发到后端的Tomcat。ApacheServer与后端的Tomcat通讯使用http协议。因此Tomcat不用开启https协议。把ApacheServer配置支持https协议就能够了。证书也在ApacheServer中配置。自始自终Tomcat都不须要修改任何地方。同理换成JBoss也同样,JBoss不须要修改。apache
更进一步,让客户浏览器访问http协议时,自动将http协议转成https协议就更加人性化了。这个技术也是在ApacheServer中配置完成。后端
工做流程:浏览器
1. 搭建ApacheServer服务器,支持https协议;(基础工做)tomcat
2. 搭建Tomcat服务器,配置基本的访问页面;(基础工做,整个功能不须要配置Tomcat)服务器
3. 配置ApacheServer服务器,实如今https协议基础上将URL请求转发给Tomcat服务器;(关键)测试
4. 配置ApacheServer,实现访问http协议自动转成https协议。(关键)ui
Apache版本加密
# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Aug 13 2013 17:29:28
ll /etc/httpd/modules/
查看目录中是否有mod_ssl模块,若没有使用yum install mod_ssl安装,安装之后变化:
l 增长了/etc/httpd/modules/mod_ssl.so文件
l 增长了/etc/httpd/conf.d/ssl.conf配置文件
咱们须要使用Apache的ProxyPass来转发URL后端,须要下面两个模块
mod_proxy.so
mod_proxy_http.so
咱们还须要实现客户端浏览器访问http自动转成https协议,须要下面的模块
mod_rewrite.so
使用yum 安装openssl
# yum install openssl
openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
注意:咱们测试环境,不须要建立CA证书,生产环境中须要上传CA证书,并在ssl.conf文件中指定证书路径。
# tar zxf apache-tomcat-8.0.9.tar.gz
# mv apache-tomcat-8.0.9 /opt/tomcat
开启tomcat服务,测试使用tomcat默认页面就能够
# bin/startup.sh
访问192.168.1.10:8080出现tomcat默认页面,以下图:
Tomcat服务器搭建成功
1)编辑/etc/httpd/conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
#具有以上2行是说明apache具有将URL转发给Tomcat的能力
# 测试页面add by sxr
ProxyPass /examples http://192.168.1.10:8080/examples/
ProxyPassReverse /examples http://192.168.1.10:8080/examples/
测试,访问192.168.1.10/examples后,自动跳转到了后端Tomcat的192.168.1.10:8080/examples页面。
Tomcat提供的192.168.1.10:8080/examples页面
实现原理:客户浏览器访问Apache的htts协议,在Aapache的ssl.conf配置文件中配置ProxyPass转发,将请求转发给后端的Tomcat服务器,这样就实现了在https协议的基础上Apache将URL转发给Tomcat。
注意:此时,客户端浏览器必须使用https://192.168.1.10/docs访问才能实现URL转发。
1)编辑/etc/httpd/conf/httpd.conf
Include conf.d/*.conf
#加载其余的配置文件,主要是为了使用ssl.conf
保存。
2)编辑 /etc/httpd/conf.d/ssl.conf,支持https协议
LoadModule ssl_module modules/mod_ssl.so Listen 443 ## ## SSL Virtual Host Context ## <VirtualHost _default_:443> ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" # 在https协议中实现ProxyPass转发URL,实际就是在ssl.conf中添加ProxyPass语句 ProxyPass /test http://192.168.1.10:8080/examples ProxyPassReverse /test http://192.168.1.10:8080/examples ProxyPass /docs http://192.168.1.10:8080/docs 注意,末尾没有/符号,http://192.168.1.10:8080/docs/是错误的 ProxyPassReverse /docs http://192.168.1.10:8080/docs |
注意:转发到Tomcat的URL中末尾不能加/符号。若是写成ProxyPassReverse /docs http://192.168.1.10:8080/docs/ ,访问的结果以下图:
写成ProxyPassReverse /docs http://192.168.1.10:8080/docs,访问的结果以下图:
上面,咱们已经完成了在https协议上实现将URL转发给Tomcat。接下来,咱们只要配置Apache,实现http自动转成https协议,就可以让客户端浏览器输入普通地址自动跳转到加密的https的页面,而且页面仍是后端Tomcat服务提供的功能。
编辑/etc/httpd/conf/httpd.conf配置文件,下面语句实现将整个Apache站点都自动转成https协议
# add by sxr
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
RewriteLog /var/log/httpd/rewrite.log
RewriteLogLevel 10
保存,重启Apache服务生效
# /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]