从零开始搭建Linux测试环境
之
jdk+apache+jboss +mod_jk+openssl
软件介绍
1.JDK(Java DevelopmentKit)。Java开发工具包。大家都知道Java程序可以在绝大多数的机器上运行,不需要安装任何额外的软件,为什么我们要安装JDK呢?这是因为Java程序在开发过程中,需要将源代码转换为中间代码形式,也即class文件。平常运行Java程序不需要安装额外软件是指对编译好的Java程序中间代码,一般操作系统和浏览器都安装有JRE(Java Runtime Environment),而我们的开发环境中,一般都需要安装JDK来对源代码进行编译。说白了,安装了JDK就代表可以用JDK安装目录下bin目录下的一系列在用Java进行程序开发时可能用到的命令:包括javac,jar,keytool,native2ascii.exe,javaw等。
2.apache。apache是一个软件基金会,有很多的著名开源软件都是由这一基金会动作的。而我们通常说的apache软件,是指它的Web服务器,即用来解析静态网页的一个程序。有了apache,就可以把静态的html网页放在我们的电脑上,其它人可以通过在浏览器中输入我们电脑ip地址的方式访问我们的网页。要注意的是,现在的apache安装程序名称叫httpd。
3.jboss。也是一个Web服务器,或叫应用服务器。它与apache的区别在于:apache的速度很快,但只能解析静态网页,而jboss则可以解析动态网页如jsp,其后台还可以与Java程序进行解析交互。当然,jboss还有很多强大的功能,但这里只要了解它与apache的主要区别就好了,apache速度很快,但只能解析静态网页;jboss功能更强大,能解析动态页面,但解析静态页面时速度不如前者快。
4.mod_jk。通常在搭一个服务器的时候,都会利用apache+jboss的方式,这样即可利用apache处理静态页面的速度,又能利用到jboss处理动态页面的功能。一个用户浏览器的请求过来先经过apache,如果是静态页面,就由它进行解析并把结果返回给jboss,如果是动态的网页,apache就会把这个请求转发给jboss处理,jboss处理完了,再交给apache返回给用户端。因此需要一个模块能够将这两个东西连接起来,进行通信,同时需要决定哪些东西由apache自己处理,哪些东西转发给jboss处理。这个东西就是mod_jk。
5.openssl。SSL协议即Secure socket layer所采用的协议,是一种加密的方式,通过这种方式处理后用户在访问网站过程中所有通信数据就进行了加密,别人即使窃取了通信的内容,也是加密后的内容,难以破解。对我们访问的人来说,就是表现为网址以https://开头的,大家注意一下支付宝的网址就是这样。Openssl实现了SSL加密时需要的一系列加密算法, 可以用来生成密钥等。生成的密钥放在服务器的某个文件夹下,并进行一定的配置之后,用户就能用https://开头的网址来进行安全访问了。
软件下载
安装好了Linux操作系统之后,就可以进行软件的安装了。安装之前需要下载上述的5个软件,下载地址如下:
JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html
Apache:http://httpd.apache.org/
Jboss:http://www.jboss.org/jbossas/downloads.html
mod_jk:http://apache.freelamp.com//tomcat/tomcat-connectors/jk/binaries/
openssl:http://www.openssl.org/
软件安装
1.JDK安装
下载得到JDK安装文件之后,是一个xxxx.bin文件(其它熟悉Linux程序安装的同学也可采用任何其它方式安装)。
第一步:修改安装文件权限。用linux命令chmod +x修改bin文件的权限。
第二步:执行bin文件。执行bin文件,会生成一个文件夹,这便是解压安装好的JDK了。这个时候可以使用该文件夹下的bin目录下所有命令了。
第三步:拷贝至安装目标目录。通常,我们会将linux系统下安装好的程序放在某个地方,就如同c:/program files文件夹一样。在linux中通常是/usr/local目录。因此,将生成的JDK安装文件夹拷至安装目标目录如:usr/local/下,就安装好了JDK。
第四步:设置环境变量。虽然我们可以使用JDK安装目录下bin中的javac,javaw等命令了,但每次都要进入这个文件夹才能执行,为了能在任何路径下敲javac命令都会执行,我们需要将这个bin目录设置到系统的环境变量中。在Linux中有三个地方可进行环境变量的配置,三种配置方法的说明如下:
/etc/environment里面定义的环境变量,是全局性的,就是该操作系统的所有用户都可以访问到这些环境变量。
/etc/profile里面定义的环境变量也是全局性的,由所有的用户共享。与environment不同的地方仅在于录入格式的不同。environment中是以"X=y"的形式定义的,profile中要用脚本语句来定义,例如“export $X=y”
而~/.bashrc和~./profile里面定义的环境变量,仅对当前用户有效。
这里在etc/profile中设置,在文件中加入如下内容:
JAVA_HOME=/usr/local/jdk1.6.0_21
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
添加完如上四行后。
第五步:使环境变量生效。执行source /etc/profile使环境变量生效。此时JDK的所有安装与配置就都完成了。
2.Apache安装
这里先讲普通安装,如果Apache要支持ssl,需要先安装ssl。因此在后面安装完ssl之后,会再写一下支持ssl的安装方式。普通安装:
第一步:解压。将下载得到的.tar.gz安装包解压。
第二步:安装前配置。进行解压后的目录,运行./configure。这一步是对安装之前的一些系统环境进行配置,可以视为windows安装软件时的一种准备工作。这种准备工作只针对源代码包安装时需要,如果是二进制代码如前面讲的jdk安装,则不需要这一步。
第三步:编译。在解压后的目录下运行make命令。这一步是将所有的源代码进行编译打包,生成二进制代码。
第四步:安装。仍在上述的目录下运行make install。这一步完成软件的安装。到目前为止,Apache就已经在机器上安装好了。
第五步:启动Apache。进行Apache安装后的目录,通常是/usr/local/apache2,进行到bin目录下,执行./apachectl start命令,即启动了Apache。此时在浏览器中输入http://127.0.0.1即可看到Apache服务器启动后的首页。
3.Jboss安装
Jboss是直接解压即可用的。
第一步:解压。把下载到的Jboss压缩包解压。
第二步:拷贝至安装目标目录。指解压后得到的目录拷贝至/usr/local下即完成了jboss的安装。
第三步:设置环境变量。设置了环境变量之后,可在任何地方运行run.sh命令启动jboss。跟安装JDK一样,设置环境变量就是把Jboss下的bin目录添加到PATH中去。
JBOSS_HOME=/usr/local/jboss-4.0.5.GA
PATH=$JBOSS_HOME/bin:$PATH
export JBOSS_HOME PATH
第五步:使环境变量生效。执行source /etc/profile使环境变量生效。此时Jboss的所有安装与配置就都完成了。
4.mod_jk安装
第一步:改名与拷贝。下载后的mod_jk文件(请下载时根据自己的apache版本来进行选择)改名为mod_jk.so,拷贝至apache安装目录的modules文件夹下。
第二步:在apache2/conf目录下的httpd.conf配置文件末尾加入mod_jk的配置文件加载:
Include conf/mod-jk.conf。mod-jk.conf文件将在第三步中新建。
第三步:新建文件conf/mod-jk.conf,并添加如下内容:
# 加载的mod_jk.so文件路径,这个路径就是mod_jo.so文件的实际路径
LoadModule jk_module modules/mod_jk.so
#工作配置文件,将在第四步新建,里面配置了转发的jboss结点服务器地址及端口号等。
JkWorkersFile conf/workers.properties
# 日志记录文件
JkLogFile logs/mod_jk.log
# 日志级别
JkLogLevel info
# 日志格式
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions 允许你设置一些转发设置,如SSK KEY SIZE ,是否对转发请求的uri进行解析,是否设置转发目录等
JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories
# 请求日志格式
JkRequestLogFormat "%w %V %T"
# 把所有应用下的内容转发至loadbalancer去处理,一个loadbalancer可设置多个结点,loadbalancer在conf/workers.properties中配置。
JkMount /__application__/* loadbalancer
# 转发路径详细配置文件,这个文件将在第五步中创建并配置。
# /examples/*=loadbalancer
JkMountFile conf/uriworkermap.properties
# Add shared memory.设置共享内存,负载均衡的知识需要学习
# This directive is present with 1.2.10 and
# later versions of mod_jk, and is needed for
# for load balancing to work properly
# Note: Replaced JkShmFile logs/jk.shm due to SELinux issues. Refer to
# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=225452
JkShmFile run/jk.shm
# Add jkstatus for managing runtime data运行时数据设置
<Location /jkstatus>
JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
第四步:新建conf/workers.properties并在其中输入如下内容以定义一个转发结点:
# for mapping requests
# The configuration directives are valid
# for the mod_jk version 1.2.18 and later
# 转发列表
worker.list=loadbalancer,status
# Define Node1
# modify the host as your host IP or DNS name.端口,这个端口在jboss的server.xml文件中有配置
worker.node1.port=8009
worker.node1.host=127.0.0.1
worker.node1.type=ajp13
worker.node1.lbfactor=1
# worker.node1.connection_pool_size=10 (1)
# Load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1
# Status worker for managing load balancer
worker.status.type=status
第五步:新建conf/uriworkermap.properties,在其中加入转发路径的配置
# Mount the Servlet context to the ajp13 worker
/jmx-console=loadbalancer
/jmx-console/*=loadbalancer
/web-console=loadbalancer
/web-console/*=loadbalancer
第六步:启动apache和jboss。在浏览器中输入127.0.0.1可看到apache的页面。路径后面加入/web-console时,出现jboss服务的页面。安装成功!
请确认/usr/local/jboss-4.0.5.GA/server/default/deploy/jbossweb-tomcat55.sar目录下的server.xml文件中如下内容没有被注释掉:
<!-- A AJP 1.3 Connector on port 8009 -->
<Connector port="8009" address="${jboss.bind.address}"
emptySessionPath="true" enableLookups="false" redirectPort="8443"
protocol="AJP/1.3"/>
5.openssl安装,并使apache能以https方式处理请求
采用https://开头的网址服务器端与客户端通信会在第一次发起连接时,给客户端几个信息:
1).服务器端的证书签名,一般通过第三方CA机构认识,名称一般是域名或公司的名称,因此如果二者相同,则认为该网站可靠。否则会弹出证书不安全的警告信息,如我们自己测试时所采用的SSL证书是未经认证的,就会弹出这个窗口。
2).本次通信采用的公开加密密钥,用户的浏览器发送信息时,以此公开密钥加密发给服务器即可。
3).本次通信采用的私有解密密钥,用户的浏览器收到服务器信息时,按此密钥解密即可。
openssl是实现了SSL的一系列加密算法,可用来生成证书等。早期版本的apache服务器如1.3.x之前的版本要使用ssl需要用到mod_ssl.so模块,现在都自带了,不需要另作处理。
第一步:解压#tar zxvf openssl-0.9.7g.tar.gz
第二步:编译安装openssl。这个软件主要是用来生成证书:
#cd openssl-0.9.7g
#./config
#make
#make test
#make install
把openssl放进内核目录下,使其在任何目录下都能运行。
#cd /usr/local/bin
#ln -s /usr/local/ssl/bin/openssl openssl
第三步:编译安装apache。虽然我们安装教程的apache安装放在前面,但支持ssl的apache安装应该在openssl安装完成之后再进行安装。因此,原安装的apache不必删除,按如下方式再执行一次安装命令即可,原有的配置文件并不会覆盖。这个configure一定要记住,我安装时先安装的apache,没用这些选项,结果运行起来没反应。
#cd …… /httpd-2.0.54
#./configure --prefix="/opt/apache2" --enable-so --enable-ssl --with-ssl="/usr/local/ssl/bin"
#make
#make install
第四步:生成密钥相关的文件。
#cd ../apache2/
#cd conf/
#mkdir ssl.key
##然后在该目录下生成证书:
#cd ssl.key/
##生成服务器私钥:
#openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.......................++++++
.................................................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
##生成服务器证书请求,并按要求填些相关证书信息:
#openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:tyl
Organization Name (eg, company) [Internet Widgits Pty Ltd]:tz
Organizational Unit Name (eg, section) []:tz
Common Name (eg, YOUR name) []:tyl
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
# openssl x509 -req -days 700 -in server.csr -signkey server.key -out server.cert
Signature ok
subject=/C=AU/ST=Some-State/L=tyl/O=tz/OU=tz/CN=tyl/[email protected]
Getting Private key
Enter pass phrase for server.key:
为了安全,然后我们把这些文件的权限都设为400
chmod 400 server.key
chmod 400 server.cert
第五步:配置apache,使之与生成的密钥文件结合起来。
对apache2/conf/ssl.conf文件修改的地方如下几处:
#SSLCertificateFile /opt/apache2/conf/ssl.crt/server.crt #108行
SSLCertificateFile /opt/apache2/conf/ssl.key/server.cert
#SSLCertificateFile /opt/apache2/conf/ssl.crt/server-dsa.crt
SSLCertificateKeyFile /opt/apache2/conf/ssl.key/server.key #116行
#SSLCertificateKeyFile /opt/apache2/conf/ssl.key/server-dsa.key
第六步:这样我们就配好了ssl现在我们来让apache启动ssl
……/apache2/bin/apachectl startssl
然后要求输入证书密码,正确输入后ssl就连同apache一起启动
在浏览器中输入:https://127.0.0.1
6.使Apache转发的https请求由jboss处理
刚才的https://127.0.0.1能够访问apache的目录,但是当加入jboss的地址之后(如前面配置的/jmx-console),不行的哦。此时,需要设置一下apache要遇到https时,哪些内容需要转发到jboss去解析,因此需要增加如下这步。
设置apache中哪些url的https请求转发到jboss处理。在ssl.conf的VirtualHost结点中加入:JkMount /jmx-console/* loadbalancer等url转发配置。
此时在浏览器中输入https://时,后面加入https://127.0.0.1/jmx-console也可访问了,证明这些请求已经成功由apache转发给了jboss处理。
至此,jboss+apache+mod_jk+openssl环境就搭建好了。