msgbartop
用铅笔写日记,记录那最原始的美丽
msgbarbottom

用https代替传统访问

由于一个众所周知的原因,就是为了打击大量非法网站的建设,在清查了一遍全国的IDC后,中国电信(网通不清楚)陆陆续续的封掉了家用ADSL的对外80端口.目的只有一个,就是让动态域名+家用服务器的小型网站从这个星球上消失。

当然,整顿非法网站我不反对。因为据我的经验,这些个站长的素质(或者说是职业道德)普遍不高。他们的网站上大多充斥着恶意脚本和后台木马、病毒等.这些都是为广大网民深恶痛绝的。

所以说,于情于理也都应该清理掉这些互联网的污垢.

可是这也给我带来了困扰,就是我用自己家里的一台Windows Server 08 r2系统搭建的web + ftp 的网络共享平台,也受到了影响,当然只是web方面.

本来想换个端口吧,开始毕竟我的朋友中有些人是不习惯这么奇怪的url的,一定程度上影响他们的使用。
后来又想,要不直接用ftp,因为21、22、23 端口是不受影响的。不过,有些人的电脑没有ftp 客户端,而且还要花时间去教他们怎么用。费事费力,再次搁浅.

面对80端口的时不时的抽风,我忽然想到了用https连接访问的方法.对啊!这是个好办法。因为https默认端口是443.
而且http与https仅有一字之差,很难分辨.

主意一定,我便开始行动了.

因为我的apache是集成了mod_ssl(提供openssl库的接口)的,所以不需要单独去下载openssl套件.
首先进入apache所在的目录,如"c:\program files\apache software foundation\apache2.2\",确保/bin 下存在 openssl.exe 程序.
我所要做的就是生成*.key、*.crt 两个文件,一个证书key和一个自签名证书.
请注意,我生成的是自签名证书(self-signed SSL Certificate).为什么呢?

因为我不可能,也没必要去到什么Verisign、Thawte等机构去申请一个。我启用SSL访问的唯一原因是为了不走80端口,仅此而已.不用那么麻烦,而且需不需要费用和通不通过还说不准.

用官方的话来讲,也可以是测试目的,呵呵
开始动手,
进入命令行,把当前目录定位到apache的/bin 下,

先生成key:
openssl genrsa -des3 -out server.key 1024
记住输入的pass-phrase,启动apache要用到.
如果和我一样是windows系统的话,最好不要加入pass-phrase,因为windows 不支持内置短语.
启动apache会报"Error: SSLPassPhraseDialog built-in is not supported on Win32"错.

如果已经生成,可以用
openssl rsa -in server.key -out srv.key
去除掉pass-phrase.
ps:不要忘了注掉httpd-ssl.conf 下的SSLPassPhraseDialog.

之后生成证书:
openssl req -new -x509 -nodes -sha1 -days 365 -key srv.key -out server.crt -config ..\conf\openssl.cnf
ps:openssl config的路径可能会不一样.

最后,把bin目录下生成的srv.key(最好改下名)和server.crt 复制到别处,如C盘根目录下.

在apache 配置文件httpd-ssl.conf 下定义路径
SSLCertificateFile "C:/server.crt"
SSLCertificateKeyFile "C:/server.key"

再添加好virtuahost,重启apache.即可

如果像我一样,想彻底的抛弃http访问,一律使用https的话,可以考虑利用地址重写达到目的.
编辑httpd.conf文件,加入:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

或者
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://cnserver.homeftp.org/$1 [R,L]

这样都可以了.
现在我就可以对电信的行为表示影响不大了,呵呵

更多SSL/TLS设置,参见:http://httpd.apache.org/docs/2.2/ssl/

在centos上用mod_jk桥接apache与tomcat

最近在搞Volit提供的免费VPS,感觉有了自己的一台24x7不关机的服务器就是不一样,心里很是开心,不过现在的虚拟主机、VPS基本上都是LAMP这样的一个状况,LAMP的这个P就是指php 或者Perl,Python.
php这门语言虽然我草草学过,有了那么一点Base,姑且算是一个php starter吧~~
不过我感觉还是java来的更好一点,不管在写法规范,还是程序思想上,还是java舒服点,于是我便萌发了把java环境搭建到远程的centos系统上。

安装Java并不是什么难事,一个命令 yum install java-VERSION-openjdk 即可,这样的好处是环境变量也会自动配置好的,呵呵
然后就是tomcat(当然java的web容器并不止这一个,不过我比较喜欢),它的二进制程序文件包可以在apache官网下载到。

最后就是如何让apache和tomcat之间开始桥接了,我搜索了一下,用到了apache的一个模块,叫mod_jk.so
关于这个mod_jk,着实让我郁闷了一阵,原来它有两个版本,一个是mod_jk2,一个是mod_jk.
刚开始,从名字上看,我想当然的以为mod_jk2是较新版本。可是我怎么也搜索不到下载地址
后来在apache的Archive镜像里面找到了,一看“最后修改时间”,吓死我了,2004年!!

后来才知道mod_jk2已经停止开发,mod_jk是现行的版本.最新版本是jk-1.2.28。
下载地址:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.28/i586/

当然你也可以下载源码进行编译安装,而且呆会用到的workers.properties配置文件的sample也包含在源码包里面。
http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.28/tomcat-connectors-1.2.28-src.tar.gz

搞清楚这些事情,接下来就好办了,复制mod_jk.so 到 apache下的modules目录,在httpd.conf里面load一下.
然后复制源码包里面的workers.properties文件到apache下的conf目录,打开,依照里面的说明和注释大概也可以看懂mod_jk的工作原理.

先指定tomcat的路径
workers.tomcat_home=/usr/local/tomcat
再制定jdk的路径
workers.java_home=/usr
然后就是一个worker的列表
创建一个worker,也可以是多个
worker.list=worker1 (,worker2,worker3...)
指定此worker1的类型
worker.worker1.type=ajp13
指定worker1的端口号
worker.worker1.port=8007
worker.worker1.port=8009
指定worker1的服务器路径
worker.worker1.host=localhost

以及下面一系列属性,可以参照
http://tomcat.apache.org/connectors-doc-archive/jk2/jk/workershowto.html#A%20sample%20worker.properties
去配置

worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300

配置好后,在apache的配置文件里面通过
JkWorkersFile /etc/httpd/conf/workers.properties 指定其位置

日志路径
JkLogFile /var/log/httpd/mod_jk.log
日志等级
JkLogLevel info
日志时间格式
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
指定增加或去除哪些功能模块
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
记录请求的格式
JkRequestLogFormat "%w %V %T"
指定哪些目录下的文件要通过tomcat转义,编译并指定列表中的哪个worker
JkMount /examples/servlet/* worker1
JkMount /examples/*.jsp worker1

以上这些建议写在VirtualHost节点里面,如果apache下有多个站点的话。
至此,就算是都配置好了,很多配置节点参见:http://tomcat.apache.org/connectors-doc-archive/jk2/jk/aphowto.html
tomcat目录/ sh startup.sh 启动tomcat.
apache目录/ bin/apachectl start 启动apache.
输入 http://localhost/ 看看吧
_________________________________________
我的jsp站点:http://java.xiazhengxin.com.cn
Servlet测试:http://java.xiazhengxin.com.cn/examples/servlets/
JSP测试:http://java.xiazhengxin.com.cn/examples/jsp/