Apache的默认端口是80,tomcat的默认端口是8080.想要既使用Apache处理静态网页,用tomcat处理动态的网页,就需要Apache和tomcat整合。Apache2.4.7自动集成了http的反向代理模块,稍微配置就行,Apache2.2没有集成websocket的模块,要想使用需要自己编译mod_proxy_wstunnel模块,具体编译步骤参考https://github.com/disconnect/apache-websocket和https://www.amoss.me.uk/2013/06/apache-2-2-websocket-proxying-ubuntu-mod_proxy_wstunnel/这里,但是推荐使用Apache2.4.7及以上版本。如果版本低建议升级。
模块
软件及版本:
操作系统:Ubuntu14.04 (64位)
Apache 2.4.7
tomcat 7.0.62
安装和环境变量配置这里不说了。网上很多,主要记录下整合的过程。
1.安装libapache2-mod-jk,
sudo apt-get install libapache2-mod-jk
2.打开/etc/apache2/mods-available/jk.conf文件修改,查看里面内容
可以看到JkWorkersFile /etc/libapache2-mod-jk/workers.properties 指向的是workers.properties文件
后面再加上
JkMount /rustezemyss/androidphone/ ajp13_worker
JkMount /rustezemyss/* ajp13_worker
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location "/rustezemyss">
ProxyPass http://127.0.0.1:8080/rustezemyss
ProxyPassReverse http://127.0.0.1:8080/rustezemyss
</Location>
再编辑 /etc/libapache2-mod-jk/workers.properties文件添加
worker.list = ajp13_worker,jk-status,jk-manager
worker.ajp13_worker.port=8080
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
worker.loadbalancer.balance_workers=ajp13_worker
如下图:
3.然后查看这个文件是否指向/etc/apache2/mods-available/jk.conf
在里面添加
JkMount /rustezemyss/androidphone ajp13_worker
JkMount /rustezemyss/web ajp13_worker
JkMount /rustezemyss/ ajp13_worker
JkMount /rustezemyss/* ajp13_worker
JkMount /rustezemyss/*.* ajp13_worker
6.打开$TOMCAT_HOME/conf/server.xml 文件。
<Service name="Catalina">
...
<!-- Define an AJP 1.3 Connector on port 8080 -->
<Connector port="8080" protocol="AJP/1.3" redirectPort="8443" />
...
</Service>
7.重启apache和tomcat
8。在浏览器输入网址
8080端口和80端口是一样的。完成
查看apache错误日志
gedit /var/log/apache2/error.log
linux在防火墙中添加转发规则。80端口重定向为8080端口,-A是增加
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
删除规则 -D是删除
iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
目前只实现了http协议的反向代理
但是有一个很强大的websocket功能,反向代理还没实现好,目前还不知道怎么弄,好像需要重新编译apache,有一个插件https://github.com/disconnect/apache-websocket
但是我试了一下,编译有问题,找不到.h文件。而且Apache2.4.7好像本身就支持websocket反向代理,但是资料较少,目前还没有弄成功。有知道的朋友,请私信我,谢谢。
apachectl -v 查看apache版本号
查看已经被编译的模块:apachectl -l
apachectl -t -D DUMP_MODULES
查看apache加载模块
有时候,我们设置了反向代理,页面显示不正常是因为没有设置css,js等内容通过反向代理,或者找不到css、js等内容。设置方法是在httpd.conf或者000-default.conf中添加
ProxyPass /css/*.css !
ProxyPass /js/*.js !
ProxyPass /imag/*.png !
ProxyPass /swf/*.swf !
并且把css和js等内容放在www目录下。
另外查看apache收到的消息在/var/log/apache2下的access.log文件。查看错误日志是error.log
Apache 2.4.12支持 Websocket反向代理了,升级方法
sudo apt-add-repository ppa:ondrej/apache2
sudo apt-get update
sudo apt-get dist-upgrade
写个应用,可以实现长连接,点击close也不会出现500 internal error了。mark