Apache转发到Tomcat
#vi /etc/httpd/conf/httpd.conf
添加下面配置
NameVirtualHost *:80
<VirtualHost *:80>
ProxyPreserveHost On
ServerName www.域名.com
ProxyPass / http://www.域名.com:8080/system/
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
作者:沈小然
编写日期:2014年7月6日
1 实现原理与工作流程
原理:
客户浏览器使用https协议访问 ApacheServer 。ApacheServer将请求转发到后端的Tomcat。ApacheServer与后端的Tomcat通信使用http协议。所以Tomcat不用开启https协议。把ApacheServer配置支持https协议就可以了。证书也在ApacheServer中配置。自始自终Tomcat都不需要修改任何地方。同理换成JBoss也一样,JBoss不需要修改。
更进一步,让客户浏览器访问http协议时,自动将http协议转成https协议就更加人性化了。这个技术也是在ApacheServer中配置完成。
工作流程:
1. 搭建ApacheServer服务器,支持https协议;(基础工作)
2. 搭建Tomcat服务器,配置基本的访问页面;(基础工作,整个功能不需要配置Tomcat)
3. 配置ApacheServer服务器,实现在https协议基础上将URL请求转发给Tomcat服务器;(关键)
4. 配置ApacheServer,实现访问http协议自动转成https协议。(关键)
2 搭建ApacheServer服务器
2.1 使用yum 安装apache
Apache版本
# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Aug 13 2013 17:29:28
2.2 检测Apache是否支持加密https协议
ll /etc/httpd/modules/
查看目录中是否有mod_ssl模块,若没有使用yum install mod_ssl安装,安装以后变化:
l 增加了/etc/httpd/modules/mod_ssl.so文件
l 增加了/etc/httpd/conf.d/ssl.conf配置文件
2.3 实现URl转发技术需要的模块
我们需要使用Apache的ProxyPass来转发URL后端,需要下面两个模块
mod_proxy.so
mod_proxy_http.so
我们还需要实现客户端浏览器访问http自动转成https协议,需要下面的模块
mod_rewrite.so
2.4 安装openssl提供ssl加密协议
使用yum 安装openssl
# yum install openssl
openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
注意:我们测试环境,不需要创建CA证书,生产环境中需要上传CA证书,并在ssl.conf文件中指定证书路径。
3 搭建Tomcat服务器
# 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 配置Apache在http协议基础上使用ProxyPass转发URL到Tomcat(主要测试基本的ProxyPass的转发功能)
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页面

1 配置Apache在https协议中实现ProxyPass转发URL到Tomcat
实现原理:客户浏览器访问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,访问的结果如下图:

2 配置Apache,实现http自动转换成https协议
上面,我们已经完成了在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 ]
Apache转发到Tomcat的更多相关文章
- apache httpd, nginx, tomcat, jboss
web上的server都叫web server,但是大家分工也有不同的. nginx常用做静态内容服务和代理服务器(不是你FQ那个代理),直面外来请求转发给后面的应用服务(tomcat,django什 ...
- nginx配置https转发到tomcat(使用自签名的证书)
一.使用openSSL生成自签名的证书 1.生成RSA私钥 命令:openssl genrsa -des3 -out server.key 1024 说明:生成rsa私钥,des3算法,1024强度, ...
- apache server和tomcat集群配置一:水平负载
下载apache server,最新链接http://archive.apache.org/dist/httpd/binaries/win32 当前实验版本2.2.4 下载apache tomca ...
- 转发有关tomcat和nginx
nginx 与 tomcat 组合搭建web服务 部分内容转自 http://www.cnblogs.com/naaoveGIS/ 1. Web服务 nginx是常用的web服务器,用于获取静态资 ...
- java.io.FileNotFoundException: D:\Program%20Files\Apache%20Software%20Foundation\Tomcat%205.0\webapp
慢慢把以前遇到过的问题一点点发出来,以前做的笔记比较杂: java.io.FileNotFoundException: D:\Program%20Files\Apache%20Software%20F ...
- Apache服务器和tomcat服务器有什么区别(转)
Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行.Apache是Web服务器而Tomcat是Java应用服务器. A ...
- 查看nginx | apache | php | tengine | tomcat版本的信息以及如何隐藏版本信息【转】
转自: 查看nginx | apache | php | tengine | tomcat版本的信息以及如何隐藏版本信息 - 追马 - 51CTO技术博客http://lovelace.blog.51 ...
- Apache+modjk布置tomcat集群
一.版本: Apache: 2.2.14: 下载地址:http://archive.apache.org/dist/httpd/binaries/win32/ Mod_jk:tomcat-connec ...
- Apache服务器和tomcat服务器有什么区别?
Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的 Web服务器运行.Apache是Web服务器而Tomcat是Java应用服务器. ...
随机推荐
- ubuntu下安装谷歌浏览器
deb 是 Debian Linux 的安装格式,在 ubuntu 中同样可以使用.要安装 deb 安装包,需要使用 dpkg这个终端命令,命令格式如下: $ sudo dpkg -i <pac ...
- python 的内置模块 re
在 pattern 的 “” 前面需要加上一个 r 用来表示这是正则表达式, 而不是普通字符串 >>> import re >>> ptn = r"r[a ...
- DEM反应不收敛问题
之前算DEM反应一直不收敛,后来把计算规模减少到两个固定颗粒,也就是仿照reactive-chemistry和evaperation这两个算例. 目前reactive-chemistry这个算例,把各 ...
- Olesya and Rodion (思维)
Olesya loves numbers consisting of n digits, and Rodion only likes numbers that are divisible by t. ...
- P2056 [ZJOI2007]捉迷藏
传送门 如果没有修改显然就直接点分治 有修改那就动态点分治 动态点分治就是在点分树上维护一些东西,查询时也在点分树上查 因为点分树深度是$log$的所以可以保证时间复杂度 此题我们需要在点分树上维护 ...
- c# 实现无符号右移
/// <summary> /// 无符号右移, 相当于java里的 value>>>pos /// </summary> /// <param nam ...
- F查询和Q查询
F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的实例可以 ...
- golang flag
本文主要对golang环境下命令行的解析进行了相关的总结.命令行在C下有getopt等函数, 在golang下提供了更为方便的处理方法. 1.命令行参数获取:命令行获得可通过os.Args参数, Ar ...
- nginx 反向代理导致的session丢失的问题
[原文链接] https://blog.csdn.net/xiaweiyidengzhewo/article/details/80921750 注意这篇文章解释的是“丢失”而不是“一致性”
- ssh设置超时时间
修改server端的etc/ssh/sshd_config ClientAliveInterval 60 #server每隔60秒发送一次请求给client,然后client响应,从而保持连接 Cli ...