内网环境搭建微信公众号的JAVAWEB应用服务器

背景:打算搭建一个微信服务公众号对应的WEB服务器,最流行的方法是采用新浪SAE云服务器方法,考虑到后续应用系统的架构扩展性,使用JVM+TOMCAT的模式,但SAE JAVA WEB 服务器每小时12云豆收费,因此打算使用内网环境搭建WEB服务器。

软硬件资源及网络环境
电脑:一台MAC AIR,安装了MAC OS系统,并且安装了WIN7虚拟系统。
网络环境:华为WS860S无线路由器连接联通外网交换机。

目标架构
搭建内网JAVA WEB应用,可以通过外网域名访问。可以接收通过微信服务器转发的用户发送给公众号的消息,并对消息进行回复。

实施过程

由于对MAC OS 中WIN7虚拟机情况不了解,整个过程走了不少弯路。我之前所有的JAVAWEB开发环境,包括:Eclipse、Tomcat、mysql都是安装在Win7虚拟系统上的,因此打算直接复用该环境作为公众号的web服务器。

第一步,在花生壳网站花3块钱买了个域名,http://hzinternetservice.ticp.io,为什么要买域名,而不直接使用IP呢? 因为运行商给个人客户分配的IP地址是动态变化的,因此,需要用固定的域名来和这个变化的IP地址进行绑定。在每次路由器重启后,运行花生壳客户端,会自动将域名和外网地址绑定。

第二步,设置消息转发规则(端口映射规则),即将发送到路由器某个端口的消息,转发至局域网指定机器的端口。由于微信服务器配置地址仅支持80、443端口,做了如下配置:
内网环境搭建微信公众号的JAVAWEB应用服务器_第1张图片

第三步:启动虚拟系统中的web服务器,之前建了一个demoweb的项目,在地址栏里输入http://hzinternetservice.ticp.io/demoweb,就是访问不了,在虚拟机系统输入http://localhost/demoweb可以正常访问,在MAC OS 中输入http://192.168.1.2/demoweb也无法访问。经仔细分析发现,虚拟系统自动分配了一个特殊的IP地址,并且按照了一定的规则给虚拟系统映射了特定的端口。一直用netstat工具查看虚拟系统的80端口对应MAC OS系统哪个端口,一直没找到规律。
只能调整系统部署结构:
1、将web服务器部署在MAC OS 系统。在MAC OS 上安装了jdk、tomcat、eclipse用于开发,并且把web导出到项目中。这里要注意tomcat支持的J2EE的版本,我jdk、tomcat都使用的是8。
2、MySql仍然运行在window7虚拟系统中,通过jdbc的配置进行连接。MYSQL要做如下两个配置:
(1)在my.ini配置配置文档里的mysqld区域设置skip-host-cache、skip-name-resolve两个选项,忽略主机地址缓存以及主机名称解析。
[mysqld]
skip-host-cache
skip-name-resolve
(2)由于是通过OS系统访问虚拟系统,在访问权限上要设置user@%对数据库的访问。否则,会报”host not allowed to connect to this mysql server”。

第4步,尝试通过域名连接web服务器,还是连不上,而是每次都被重定向到路由器的管理地址上了。后来经分析发现,通过内网地址访问域名是不会重定向的,只有通过外网访问该路由器的80端口才会重定向到指定内网服务器的8080端口。

至此,通过内网机器搭建公网访问的WEB服务器就介绍完了,如果和微信公众号关联,将微信公众号消息转发至WEB服务器,并对公众号进行处理,请参考柳峰的微博。

你可能感兴趣的:(IT技术)