RedHat Linux网络服务器构架实务

由 dsj 在 03-28-2003 10:36 发表:

RedHat Linux网络服务器构架实务

作者 : 赵凤君

邮件 : [email protected]

版本 : Chs_ 0.0.2.2

最后修改: August 7,2002

前言

软件列表:

配置步骤:

Step 1 RedHat 7.2 install

Step 2 X setup

Step 3 Services setup

Step 4 Dns setup

1 创建标准区域

2 创建域名库文件

3 重新启动DNS服务

4 域名查询

Step 5 KDE setup

Step 6 Ftp setup

Step 7 MySQL、Apache and php Unistall

Step 8 MySQL install

1 准备用户

2 安装MySQL

3 修改文件夹权限

4 重新加载动态库

5 测试MySQL

6 创建启动脚本

Step 9 Apache install

1 安装Apache

2 建立符号连接

3 编辑配置文件

4 测试Apache

5 创建启动脚本

Step 10 Php install

1 安装PHP

2 配置Apache

Step 11 Jvm setup

Step 12 Classes Install

Step 13 Edit /etc/profile

Step 14 Resin Install

1 安装Resin

2 建立符号连接

3 修改配置文件

4 测试Resin

5 创建启动脚本

Step 15 PhpMyAdmin install

1 配置DNS

2 建立FTP

3 安装phpMyAdmin

4 添加虚拟主机

5 添加身份验证

6 测试phpMyAdmin

Step 16 Server Test

例一:使用连接串连接数据库

例二:使用连接池连接数据库

例三:使用处理层连接数据库

例四:测试PHP

Step 17 Configuration debug

常见错误一:You don't have permission

常见错误二:404 Not Found

常见错误三:java.lang.ClassNotFoundException

常见错误四:Invalid authorization specification

常见错误五:Invalid authorization specification

常见错误六:中文乱码

Appendix

Appendix I : Thanks

Appendix II : Todo List

Appendix III: Revision log


闲聊空间:

http://www.wonyen.net/bbs/mboard.asp


由 dsj 在 03-28-2003 10:40 发表:


前言

这里我将说明本文档的书写动机、配置目标、主要内容、遵循原则和使用说明。

在我Linux的初学路上,那种不知所措、无处可问、遍体鳞伤的感觉是刻骨铭心的,其间之曲折耗时体会太深了。所以,这将一次次配置的结果不断累积完善,结晶成文。使得后来者不要象我那样走太多的弯路。其一可以作为初学者的安装向导,其二也可以听取大家的意见和建议,使之更加严谨和完善。

本文档的目标是构架一个比较规范的RedHat开发服务器作为项目的开发环境。本文档当前共十七个步骤,简明而全面的介绍了DNS、FTP、 MySQL、Apache 、JVM、 Resin、 PHP等服务器的配置办法。

下面是我书写本文档所遵循的几个原则:

1、 力求简明:去除任何多余的步骤;让命令说话,只加必要的注释,这样方便大家作为配置清单使用。本文档主要告诉读者如何去做,很少说明为什么这样做,但需要注意的是,如果您忽略了其中的任何一步都可能导致后面出错;

2、 系统全面:步骤贯穿从安装操作系统到配置完成的全过程,初学者一步一步照做即可;服务器的配置是一个系统的过程,很多说明文档只是说明某几个软件的配置方法,没有统筹兼顾,所以照搬往往失败;

3、 力求严谨:这是我的一个目标,也是我发布原因之一,现在这份文档自发布到现在已有半年有余,历经数百人的实践,偶有不明之处,亦已加以完善,已经可以保证很好的可靠性;

4、 保持最新:包括操作系统在内,所有的软件都是截止到01/18/2002日的最新版本,如果有新的软件版本出现,我也会努力做到及时更新;

5、 精选软件:文中提及的软件都是大家所熟悉的,只有两个需要说明。其一:为什么不选择FreeBSD而用Redhat?FreeBSD可谓是Intel平台上最好的网络操作系统,但它对JAVA(尤其是新版本的JDK)的支持很差,我曾在较长一段时间内采用FreeBSD作为JAVA开发平台,然而由于SUN并没有发布FreeBSD上的JDK,所以经常造成系统崩溃,已经是多次的经历了;为什么不用Tomcat而使用Resin?虽然Tomcat是Apache组织的一个项目,虽然它也在不断完善起来,但较之Resin还是有一定的差距;Resin在中文支持、执行效率、可定制性、升级速度、支持J2EE等方面都有不俗的表现,也是我个人已经体会到的;虽然我怀疑它在高端应用、系统负载等方面的性能,但应付中小型的Web项目方面应该是绰绰有余的;

6、 侧重JSP:以搭建JSP开发环境为主,可以作为JSP初学者的服务器配置手册:其一:RH7.2增强了多语言的支持,如果你在安装的过程中选择语言时选择了i18n的简体中文包,加上Resin对中文的良好支持,你无需声明Content-Type(任何方式的声明都不需要),中文将自动支持,这一点文档中也已说明;其二:提供了Resin连接池的配置方法和调用方法,并提供了一个用于数据库连接和处理的组件;其三:提供了添加一个JSP虚拟主机的详细方法,从DNS FTP APACHE到Resin全面讲述;其四:指出了JDBC2.0的支持办法,并提供代码进行测试;

7、 编译安装:软件全部编译安装,有益于系统可定制性和系统稳定性;

8、 目标读者:Linux初学者的配置向导和中高级读者的参考;

9、 配置目标:本文档当前最适合作为企业内部开发服务器的配置手册,如果作为Internet服务器,需要考虑的安全因素还很多,最起码不能全部安装,也不需要安装X server,Internet 服务器不仅需要我文档中提及的功能,更需要一个简洁安全的系统;

10、 功能清晰:我将服务器定位在一个DNS+FTP+MySQL+Apache+Resin+Php构架的Web开发服务器,而将可有可无的服务去掉。所以,文档中没有提及QMAIL、ORACLE和ASP、FrontPage扩展等配置方法。除了功能的分离和读者的需求之外,Oracle的最佳运行平台是SUSE Linux,ASP的最佳运行平台是NT,至于Qmail,后续版本可以增加进去;

以下是本文档的使用说明:

1、颜色说明:

深蓝色: 在原文文档中修改的或者添加的部分

深绿色: 我的注释

2、符号说明

#: 系统或者软件配置文档中原有的注释;

##: 我为随后段落做的说明

//: 我的行末说明

//:篇幅较长的说明

3、命令说明:

我习惯使用vi来表示编辑一个文件,如果不喜欢使用这个工具,你完全可以使用Advanced Editor之类的可视化编辑器或者mc等其他命令。

偶尔我会在命令之前加上shell>表示这是一个命令,以与文件内容区别开来,但这个版本是中文的,所以我一般不加该符号。

make 和make install是可以使用make;make install替代的,但为了便于查看每一步的提示信息,建议分开执行。

. /在文中很多地方出现,中间没有空格,而且点号也不明显,需要注意。

赵凤君

二○○一年十二月二十二日

软件列表

下载下面的软件并将它们放到/home/src目录。首先要创建一个系统帐户,然后将软件放到该目录下。下面的软件都将在本文档中用到,下面的连接都是截止到01/18/2002的最新版本:

RedHat 7.2

http://redhat.pacific.net.au/redhat....2/ja/iso/i386/

mysql-3.23.47.tar.gz

http://www2.linuxforum.net/mirror/m...-3.23.47.tar.gz

mm.mysql-2.0.4-bin.jar

http://www2.linuxforum.net/mirror/m...l-2.0.4-bin.jar

apache_1.3.22.tar.gz

http://www.apache.org/dist/httpd/apache_1.3.22.tar.gz

php-4.1.1.tar.gz

http://www.php.net/do_download.php?...hp-4.1.1.tar.gz

j2sdk-1_3_1_01-linux-i386.bin

http://java.sun.com/j2se/1.3/download-linux.html

jaf1_0_1.zip

http://java.sun.com/products/javabeans/glasgow/jaf.html

javamail1_1_3.zip

http://java.sun.com/products/javama...mail-1_1_3.html

resin-2.0.5.tar.gz

http://www.caucho.com/download/resin-2.0.5.tar.gz

phpMyAdmin-2.2.3-php.tar.gz

http://prdownloads.sourceforge.net/....2.3-php.tar.gz


闲聊空间:

http://www.wonyen.net/bbs/mboard.asp


由 dsj 在 03-28-2003 10:42 发表:


Step 1 RedHat 7.2 install

我的建议:

1、 安装时为/home建立单独的分区,因为/home是用户数据的存放之地,本文档中也将软件的安装文件都放到这个目录下,所以,这样做当你下次重新安装系统的时候,可以保留该分区,数据也就得以保全;

2、 采用定制安装的方式并选中’Everything’选项,这样特别适合于初学者,否则后面的安装过程中可能会出现找不到某个包或某个命令的情况;但如果是配置Internet服务器,就应该只选择必需的包,做到尽量的精简才够安全;

3、 选择语言时,建议选中simplified chinese(P.R.CHINA)选项,这样,当你配置好服务器的时候,在程序代码中无需任何声明,中文将被支持而不会乱码;

4、 使用Gnome做为登陆管理器,使用KDE作为默认的Session,设置默认启动到X,这样做的目的是为了方便远程控制;

5、 IP: 192.168.1.2,这是我在本文档中使用的IP,这个可以自行设置。

6、 文档中我没有涉及到防火墙的设置,系统安装完成后你可以使用ntsysv或者chkconfig命令将iptables和ipchains两个服务禁用掉,否则会导致telnet和远程登陆等无法使用;

当然,如果您熟悉防火墙设置,可以自行处理。

--------------------------------------------------------------------------------------------

Step 2 X setup

##这一步完成后,重启服务器,然后你就可以使用Extra!X等远程控制软件以图形界面在微软平台上进行服务器配置,这样做的好处是可以同时控制服务器端和客户端,不必奔走在两台机器之间。如果你按照下面的设置不能进行远程控制,那么,很有可能你的防火墙策略不允许这样做,禁用掉iptables和ipchains就可以了。

vi /etc/X11/gdm/gdm.conf //启用远程控制

[xdmcp]

Enable=1

vi /etc/X11/gdm/Sessions/Default //设置默认Session

exec /etc/X11/xdm/Xsession kde

vi /etc/X11/xdm/Xaccess //设置广播对象

192.168.1.*

--------------------------------------------------------------------------------------------

Step 3 Services setup

Shell> ntsysv

运行ntsysv命令启用named 、telnet 和 wu_ftpd 服务,禁用httpd 、mysqld、iptables和ipchains 服务和其他一些不需要的服务,然后用reboot重启服务器。

--------------------------------------------------------------------------------------------

Step 4 Dns setup

vi /etc/named.conf

1 创建标准区域

##你可以根据你的喜好来命名,这里我使用的后缀是.loc,主要是为了避免和Internet已经注册的域名相冲突,你可以自行决定你的后缀。

##添加下面的文本到 /etc/named.conf

zone yesgo.loc{

type master;

file "yesgo.loc";

}

zone 1.168.192.in-addr.arpa{

type master;

file "192.168.1";

}

2 创建域名库文件

touch /var/named/yesgo.loc

touch /var/named/192.168.1

##编辑正向域名库文件,建立主机名和主机别名

vi /var/named/yesgo.loc

@ IN SOA ns.yesgo.loc. root.ns.yesgo.loc. (

2001050801 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS ns.yesgo.loc.

IN MX 0 ns.yesgo.loc.

ns IN A 192.168.1.2

ftp IN CNAME ns.yesgo.loc.

mail IN CNAME ns.yesgo.loc.

pop IN CNAME ns.yesgo.loc.

smtp IN CNAME ns.yesgo.loc.

##编辑反向域名库文件,建立主机名指针

vi /var/named/192.168.1

@ IN SOA ns.yesgo.loc. root.ns.yesgo.loc. (

2001050801 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS ns.yesgo.loc.

IN MX 0 ns.yesgo.loc.

2 IN PTR ns.yesgo.loc.

3 重新启动DNS服务

/etc/rc.d/init.d/named restart

4 域名查询

##测试域名是否解析成功,这是一个交互式的命令行,你可以输入域名或者IP地址进行正向和反向查询

nslookup -sil

--------------------------------------------------------------------------------------------

Step 5 KDE setup

这一步是可有可无的,因为你完全可以不去理会而直接使用默认界面。一般的做法是先根据KDE配置向导进行总体设置,然后再使用KDE控制中心进行详细配置,在此不多介绍。需要提的一点是你可以通过KDE Control Panel 中的Windows Manager来设置默认Session,当然也可以通过配置文件来实现这一点。

--------------------------------------------------------------------------------------------

Step 6 Ftp setup

vi /etc/shells

##添加下面一行到/etc/shells,将作为FTP用户的shell,使其不能使用命令和telnet服务

/dev/null

增加ftpchroot组,该组中的用户将以自己的home目录作为FTP根目录

groupadd ftpchroot

添加FTP用户,该类用户只能使用FTP服务,且以自己的home目录为根目录

useradd src –s /dev/null –g ftpchroot //本帐号用来存放软件包

passwd src

/*

我习惯将软件包放到自定义的/home/src目录,主要目的还是上面提到的数据保全和软件上传问题,如果放到/usr/local/src目录,这两点也能实现但不方便,如果你习惯将软件包放到/usr/local/src,你可以删除/usr/local/src然后为/home/src建立一个符号连接。

*/

rm –R -f /usr/local/src

ln –s /home/src /usr/local/src

--------------------------------------------------------------------------------------------

Step 7 MySQL、Apache and php Unistall

使用Package管理器或者rpm命令卸载MySQL、Apache和PHP,建议初学者使用Package管理器,分别查找这三个关键词直到将所有相关的软件包都卸载干净。我们接着会编译安装这些软件。

--------------------------------------------------------------------------------------------

Step 8 MySQL install

1 准备用户

注意,这里所说的准备用户,指的是MySQL服务的启动用户,这个用户是Linux系统的用户,并非MySQL用户。需要搞清的是,Linux和MySQL有各自的用户机制,他们都有一个最高权限的用户root,MySQL安装完毕默认只有一个用户,root ,其密码为空,可以使用mysqladmin –u root –p password 指令来更改其密码。

userdel mysql

useradd mysql –s /dev/null

passwd mysql

2 安装MySQL

cd /home/src

tar xvzf my* //解包

cd my*

./configure --prefix=/usr/local/mysql //配置

make //编译

make install //安装

./scripts/mysql_install_db //建库

3 修改文件夹权限

##下面修改相关文件夹权限,否则MySQL服务不能启动,或者说你对数据库没有写权限

chown –R root /usr/local/mysql

chgrp –R mysql /usr/local/mysql

chown –R root /usr/local/mysql/bin

chgrp –R mysql /usr/local/mysql/bin

chown –R root /usr/local/mysql/var

chgrp –R mysql /usr/local/mysql/var

chmod 770 /usr/local/mysql/var

chown –R root /usr/local/mysql/var/mysql

chgrp –R mysql /usr/local/mysql/var/mysql

chmod 770 /usr/local/mysql/var/mysql

chown –R root /usr/local/mysql/var/mysql/*

chgrp –R mysql /usr/local/mysql/var/mysql/*

chmod 770 /usr/local/mysql/var/mysql/*

chmod 770 /usr/local/mysql/lib/mysql/libmysqlclient.a

4 重新加载动态库

##因为我们采用自定义编译安装的方式,所以跟系统原先定义的库位置不一样,现在我们重新指定它并重新加载

vi /etc/ld.so.conf

#添加下面一行

/usr/local/mysql/lib

shell>ldconfig //重新加载动态库

5 测试MySQL

cd /usr/local/mysql

./bin/safe_mysqld –-user=mysql & //启动MySQL服务

mysqladmin –u root –p password 'your_password' //更改用户密码

mysql –p //开始使用

6 创建启动脚本

##创建MySQL服务,使之在系统启动时自动启动

cd /etc/rc.d/init.d

touch mysqld

vi mysqld

##文件内容如下:

#!/bin/bash

#Start MySQL service

cd /usr/local/mysql

./bin/safe_mysqld - -user=mysql&

##改变该脚本的权限,否则系统启动时会说由于没有执行权限而启动失败

chown –R root /etc/rc.d/init.d/mysqld

chmod 700 /etc/rc.d/init.d/mysqld

##将此服务连接到init 5,如果你使用init 3启动机器,连接到rc3.d即可,60代表启动的次序,S要大写

ln –s /etc/rc.d/init.d/mysqld /etc/rc.d/rc5.d/S60mysqld

--------------------------------------------------------------------------------------------

Step 9 Apache install

1 安装Apache

cd /home/src

tar xvzf apa* //解包

cd apa*

./configure --prefix=/usr/local/apache --enable-module=so //设置编译参数

make //编译

make install //安装


闲聊空间:

http://www.wonyen.net/bbs/mboard.asp


由 dsj 在 03-28-2003 10:44 发表:


2 建立符号连接

##为启动程序建立符号连接,便于以后重启服务

ln –s /usr/local/apache/bin/apachectl /usr/bin/apache

3 编辑配置文件

设置默认页面,中间用空格分开

DirectoryIndex index.html index.jsp index.xtp index.php index.php3

4 测试Apache

Shell>apache start

lynx http://localhost

##如果出现Apache的文档页面,表示安装成功。

5 创建启动脚本

##创建Apache服务

touch /etc/rc.d/init.d/httpd

vi /etc/rc.d/init.d/httpd

文件内容如下:

#!/bin/bash

#Start httpd service

/usr/local/apache/bin/apachectl start

##设置文件权限

chown –R root /etc/rc.d/init.d/httpd

chmod 700 /etc/rc.d/init.d/httpd

##连接到你默认init 级别的所在目录

ln –s /etc/rc.d/init.d/httpd /etc/rc.d/rc5.d/S65httpd

--------------------------------------------------------------------------------------------

Step 10 Php install

本版本中我采用的是DSO安装模式,这样当你升级PHP的时候就无需重新安装Apache

1 安装PHP

cd ..

tar xvzf php*

cd php*

./configure --with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs --enable-track-vars --enable-sockets --enable-ftp //设置PHP编译参数

make //编译

make install //安装

cp ./php.ini-dist /usr/local/lib/php.ini //复制配置文件到/usr/local/lib

2 配置Apache

vi /usr/local/apache/conf/httpd.conf //配置Apache支持PHP

以php为关键词查找到如下几行,去掉前面的注释符号

AddType application/x-httpd-php .php

AddType application/x-httpd-php .php3 //本行需要自行添加,用来支持PHP3

AddType application/x-httpd-php-source .phps

#重新启动Apache

apache restart

----------------------------------------------------------------------------------------------------------------------

Step 11 Jvm setup

cp /home/src/ j2sdk-1_3_1-linux-i386.bin /usr/local

cd /usr/local

chmod a+x j2sdk-1_3_1-linux-i386.bin

##下面的指令是一个脚本,它先要问你是否同意,输入Y,然后它会自行安装

./j2sdk-1_3_1-linux-i386.bin

##为当前的JDK版本建立一个符号连接,这样做的目的是将来如果有新的版本安装到系统上,可以将新的目录连接为/usr/local/jvm,这样就无需修改很多配置文件

ln –s /usr/local/jdk1.3.1_01 /usr/local/jvm

--------------------------------------------------------------------------------------------

Step 12 Classes Install

##这个步骤是我的一个习惯,如果不做JAVA或者JSP开发可能不需要这一步,这个步骤的目的是设置一个放置自己JAVA类库的主目录,然后在此主目录下建立子目录分别存放不同种类的类文件。

##这里需要探讨的是MySQL的驱动程序。大家可以看到我下面使用的仍然是mm驱动,有网友建议我使用resin自带的驱动,我到caucho的站点上看到caucho声明它的驱动比mm驱动快很多,并附有相关数据;然而我测试的结果是resin驱动在rs跳转时除了rs.next()其他的rs.previous();、rs.first();和rs.last();都没任何作用,所以我仍然使用mm.mysql-2.0.4-bin.jar.zip 。

##创建类库主目录

mkdir /usr/local/lib/java

##下面安装MySQL的JDBC驱动,这个驱动是支持JDBC2.0的

mkdir /usr/local/lib/java/drivers

cp /home/src/mm.mysql-2.0.4-bin.jar.zip /usr/local/lib/java/drivers //MySQL driver

##下面安装JAF,需要说明的是,下载的jaf包是个winzip文件,我是windows上解压的,然后创建了一个jaf的目录将activation.jar放到里面又上传到/home/src的,你可以自行解决

mkdir /usr/local/lib/java/jaf

cp /home/src/java/jaf/activation.jar /usr/local/lib/java/jaf //Jaf class

##下面安装JAVAMAIL,我的处理办法同上

mkdir /usr/local/lib/java/javamail

cp /home/src/java/javamail/*.jar /usr/local/lib/java/javamail //JavaMail classes

--------------------------------------------------------------------------------------------

Step 13 Edit /etc/profile

##这一步用来配置环境变量,Resin的安装需要依赖该步骤

Vi /etc/profile

在/etc/profile文件末添加如下内容:

JAVA_HOME=/usr/local/jvm

RESIN_HOME=/usr/local/resin

CLASS_HOME=/usr/local/lib/java

CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib:$RESIN_HOME/lib:$CLASS_HOME/drivers/mm.mysql-2.0.4-bin.jar.zip:$CLASS_HOME/jaf/activation.jar: $CLASS_HOME/javamail/mail.jar: $CLASS_HOME/javamail /smtp.jar: $CLASS_HOME/javamail /pop3.jar: $CLASS_HOME/javamail/mailapi.jar: $CLASS_HOME/javamail/imap.jar

PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local:/usr/local/bin:/usr/local/jvm/bin:/usr/local/jvm/jre/bin:/usr/local/mysql/bin:/usr/bin/X11:/usr/X11R6/bin

export JAVA_HOME RESIN_HOME CLASS_HOME CLASSPATH PATH

保存文件后注销登陆,然后重新进入,输入下面的命令查看系统变量是否已经生效:

Shell>env

--------------------------------------------------------------------------------------------

Step 14 Resin Install

1 安装Resin

cd /home/src

cp /home/src/resin-2.0.5.tar.gz /usr/local

cd /usr/local

tar xvzf resin*

cd resin*

./configure --with-apache=/usr/local/apache //设置编译参数

(Or: ./configure --with-apxs=/usr/local/apache/bin/apxs)

make //编译

make install //安装

2 建立符号连接

##建立resin的符号连接,道理同建立jvm符号连接

ln –s /usr/local/resin2.0.5 /usr/local/resin

##建立resin服务程序的符号连接,道理同建立apache符号连接

ln –s /usr/local/resin/bin/httpd.sh /usr/bin/resin

3 修改配置文件

vi /usr/local/resin/conf/resin.conf

Modify One: 建立连接池,类似于NT上的DSN(数据源)

 1<resource-ref>
 2<res-ref-name>jdbc/test</res-ref-name> //数据源名称   
 3  
 4  
 5  
 6<res-type>javax.sql.DataSource</res-type> //数据源类型   
 7  
 8  
 9  
10<init-param driver-name="org.gjt.mm.mysql.Driver"></init-param> //数据库驱动   
11  
12  
13  
14<init-param url=" jdbc:mysql://localhost/test "></init-param> //连接串   
15  
16  
17  
18<init-param user="your_user_name"></init-param> //用户名   
19  
20  
21  
22<init-param password="your_password"></init-param> //密码   
23  
24  
25  
26<init-param max-connections="20"></init-param> //最大连接数   
27  
28  
29  
30<init-param max-idle-time="30"></init-param> //延时时间   
31  
32  
33  
34</resource-ref>

##后面的测试部分有例子介绍如何调用数据源

Modify Two: 修改默认主目录,如果使用虚拟主机,其实也可以不理会这个地方

1<app-dir> /usr/local/apache/htdocs </app-dir>

Modify Three: 修改Resin端口,与Apache协同工作

1<http port="8080"></http>

//删除本行即可

Modify Four: 添加支持JSP的虚拟主机

##添加一个支持JSP的虚拟主机需要做如下四方面的工作: DNS、FTP、APACHE、RESIN

1、添加一个DNS别名(当然主机名也可以)

vi /var/named/yesgo.loc

追加如下一行,当然你可以自定义其他别名或主机名

www IN CNAME ns.yesgo.loc.

/etc/rc.d/init.d/named restart //重启DNS服务

nslookup //测试是否解析成功

2、添加一个FTP帐号

Useradd www –s /dev/null –g ftpchroot //添加帐号

Passwd www //修改密码

Chmod 701 /home/www //设置权限,否则将来访问时服务器会说你没权限

3、在Apache中添加虚拟主机

vi /usr/local/apache/conf/httpd.conf

指定你建立虚拟主机所用的IP地址

NameVirtualHost 192.168.1.2

Add virtual host

 1<virtualhost www.yesgo.loc="">   
 2  
 3ServerAdmin [email protected] //管理员邮件   
 4  
 5DocumentRoot /home/www //根目录   
 6  
 7ServerName www.yesgo.loc //域名   
 8  
 9ErrorLog logs/www.yesgo.loc-error_log //错误日志名称   
10  
11CustomLog logs/www.yesgo.loc -access_log common //自定义日志名称   
12  
13</virtualhost>

4、在Resin中添加虚拟主机,以支持JSP

vi /usr/local/resin/conf/resin.conf

##在文档中查找 ,然后在其后加入如下内容:

1<host id="www.yesgo.loc">
2<app-dir>/home/www</app-dir> //指定该站点的根目录   
3  
4<classpath compile="true" id="classes" source="classes"> //指定class文件目录   
5  
6</classpath></host>

『注意』:

按照上面地设置,你放置JavaBean的目录就是站点根目录下的classes目录,不可以死记硬背/WEB-INFO/classes,关键要明白其中的道理,其实你设置什么都可以的,例如Amao,Agou啦,呵呵。

『强烈建议』:设置classes目录的权限,否则客户端可以浏览和下载你的组件

chmod 701 /home/www/classes //设置classes目录的权限,避免非法获取

4 测试Resin

##启动Resin

shell>resin start

##重新启动Apache,因为刚才修改了httpd.conf,需要重启才生效

shell>apache restart

#创建文件

touch /home/www/index.jsp

chown –R www /home/www/index.jsp

chmod 701 /home/www/index.jsp

##编辑源文件

vi /home/www/index.jsp

##源代码只有一句:

1+1=``` =1+1

  1  
  2  
  3  
  4##测试该程序   
  5  
  6  
  7  
  8lynx http://www.yesgo.loc/   
  9  
 10  
 11  
 12##输出结果应该是:1+1=2 
 13
 14__________________   
 15  
 16闲聊空间:   
 17  
 18http://www.wonyen.net/bbs/mboard.asp 
 19
 20  
 21
 22
 23* * *
 24
 25  
 26_由 dsj 在 03-28-2003 10:46 发表:_   
 27  
 28
 29
 30****
 31
 32  
 33  
 34
 35
 361 创建启动脚本   
 37  
 38##创建Resin服务,道理跟创建MySQL和Apache服务是一样的,不过这里要设置相关环境变量。   
 39  
 40  
 41  
 42##创建脚本文件   
 43  
 44  
 45  
 46touch /etc/rc.d/init.d/resin   
 47  
 48  
 49  
 50##更改文件权限   
 51  
 52  
 53  
 54chmod 701 /etc/rc.d/init.d/resin   
 55  
 56  
 57  
 58##连接到相关启动级别   
 59  
 60  
 61  
 62ln –s /etc/rc.d/init.d/resin /etc/rc.d/rc5.d/S70resin   
 63  
 64  
 65  
 66##编辑启动脚本   
 67  
 68  
 69  
 70vi /etc/rc.d/init.d/resin   
 71  
 72  
 73  
 74  
 75  
 76  
 77  
 78##文件内容如下:   
 79  
 80  
 81  
 82  
 83  
 84  
 85  
 86#!/bin/bash   
 87  
 88  
 89  
 90#Set environment parameter:   
 91  
 92  
 93  
 94  
 95  
 96  
 97  
 98JAVA_HOME=/usr/local/jvm   
 99  
100  
101  
102  
103  
104  
105  
106RESIN_HOME=/usr/local/resin   
107  
108  
109  
110  
111  
112  
113  
114CLASS_HOME=/usr/local/lib/java   
115  
116  
117  
118  
119  
120  
121  
122CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib:$RESIN_HOME/lib:$CLASS_HOME/drivers/mm.mysql-2.0.4-bin.jar.zip:$CLASS_HOME/jaf/activation.jar:$CLASS_HOME/javamail/mail.jar: $CLASS_HOME/javamail /smtp.jar: $CLASS_HOME/javamail /pop3.jar: $CLASS_HOME/javamail/mailapi.jar: $CLASS_HOME/javamail/imap.jar   
123  
124  
125  
126  
127  
128  
129  
130PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local:/usr/local/bin:/usr/local/jvm/bin:/usr/local/jvm/jre/bin:/usr/local/mysql/bin:/usr/bin/X11:/usr/X11R6/bin   
131  
132  
133  
134  
135  
136  
137  
138export JAVA_HOME RESIN_HOME CLASS_HOME CLASSPATH PATH   
139  
140  
141  
142  
143  
144  
145  
146#Start resin web server   
147  
148  
149  
150exec /usr/local/resin/httpd.sh start   
151  
152  
153  
154\--------------------------------------------------------------------------------------------   
155  
156  
157  
158Step 2 PhpMyAdmin install   
159  
160##phpMyAdmin是我最喜欢的MySQL客户端工具。我也使用过其他的客户端,包括win32的DBTools、mysqlfront等和基于web的其他工具,然而,我最后发现phpMyAdmin仍然是不可替代的。它基于web的通用性、免安装、多用户、平台无关性、稳定性、开放源码和极快的升级速度实在是太好了。况且本文档主要探讨的是服务器的配置,所以,我这里仍然只介绍phpMyAdmin。   
161  
162  
163  
1641 配置DNS   
165  
166vi /var/named/yesgo.loc   
167  
168  
169  
170# 追加如下一行,当然你可以自定义其他别名或主机名   
171  
172  
173  
174mysql IN CNAME ns.yesgo.loc.   
175  
176  
177  
178  
179  
180  
181  
182/etc/rc.d/init.d/named restart //重启DNS服务   
183  
184  
185  
186nslookup //测试是否解析成功   
187  
188  
189  
190  
191  
192  
193  
1942 建立FTP   
195  
196##在安装MySQL的时候,我们已经建立了一个叫做mysql的帐号,如果你还没有建立,可以按照下面的语句建立:   
197  
198  
199  
200useradd mysq –s /dev/null –g ftpchroot   
201  
202  
203  
204passwd mysql   
205  
206  
207  
208  
209  
210  
211  
2123 安装phpMyAdmin   
213  
214tar xvzf /home/src/phpMy*   
215  
216  
217  
218cp /home/src/phpMyAdmin/* /home/mysql   
219  
220  
221  
222chown –R mysql /home/mysql   
223  
224  
225  
226chown –R mysql /home/mysql/*   
227  
228  
229  
230chmod 701 /home/mysql   
231  
232  
233  
234chmod 701 /home/mysql/*   
235  
236  
237  
238  
239  
240  
241  
2424 添加虚拟主机   
243  
244vi /usr/local/apache/conf/httpd.conf

ServerAdmin [email protected]

DocumentRoot /home/mysql

ServerName mysql.yesgo.loc

ErrorLog logs/mysql.yesgo.loc-error_log

CustomLog logs/mysql.yesgo.loc-access_log common

``` 5 添加身份验证

##添加MySQL用户

##使用身份验证功能,phpMyAdmin需要一个启动用户,这个用户对mysql的相关表具有查询权限,具体定义如下:

shell>mysql -p

mysql>GRANT USAGE ON mysql.* TO '

  1<stduser>'@'localhost' IDENTIFIED BY '<stdpass>';   
  2  
  3mysql&gt;GRANT SELECT (Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) ON mysql.user TO '<stduser>'@'localhost';   
  4  
  5mysql&gt;GRANT SELECT ON mysql.db TO '<stduser>'@'localhost';   
  6  
  7mysql&gt;GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv) ON mysql.tables_priv TO '<stduser>'@'localhost';   
  8  
  9  
 10  
 11  
 12  
 13  
 14  
 15##修改配置文件   
 16  
 17  
 18  
 19vi config.inc.php   
 20  
 21  
 22  
 23  
 24  
 25  
 26  
 27$cfgServers[1]['host'] = 'localhost'; // 主机名   
 28  
 29  
 30  
 31$cfgServers[1]['port'] = '3306'; // 默认端口   
 32  
 33  
 34  
 35$cfgServers[1]['socket'] = ''; // 使用的socket路径   
 36  
 37  
 38  
 39$cfgServers[1]['connect_type'] = 'tcp'; //使用tcp还是 socket方式来连接   
 40  
 41  
 42  
 43$cfgServers[1]['stduser'] = ' '; // 标准用户帐号名称   
 44  
 45  
 46  
 47$cfgServers[1]['stdpass'] = ' '; // 标准帐号的密码   
 48  
 49  
 50  
 51$cfgServers[1]['auth_type'] = 'http'; //指定验证方式为config, http 还是 cookie,这是2.2.3版本的一个变化,比较安全的方式是http验证   
 52  
 53  
 54  
 55$cfgServers[1]['user'] = 'root'; // MySQL 帐号   
 56  
 57  
 58  
 59$cfgServers[1]['password'] = ' '; // 只有使用config验证方式的时候才需要填写   
 60  
 61  
 62  
 63$cfgServers[1]['only_db'] = ''; // 如果你在这里指定了一个数据库,那么登陆后系统只列出这个数据库在左侧   
 64  
 65  
 66  
 67  
 68  
 69  
 70  
 716 测试phpMyAdmin   
 72  
 73apache restart   
 74  
 75  
 76  
 77lynx http://mysql.yesgo.loc //建议使用客户端浏览器测试   
 78  
 79  
 80  
 81\------------------------------------------------------------------------------------------   
 82  
 83Step 16 Server Test   
 84  
 85## 为什么不使用 1+1=```
 86=1+1
 87```或者```
 88out.print(“Hello World!”);
 89```这样的例子呢? 因为这样的例子只能测试Apache和Resin是否能够协同工作,而不能测试数据库连接、JDBC2.0是否支持,中文问题是否存在等等。下面给出四个例子,第一个例子可以测试上述的所有问题;第二个例子告诉你如何使用Resin的连接池;第三个例子告诉你如何调用组件,如何实现数据层和处理层的分离;第四个例子用来测试PHP。   
 90  
 91  
 92  
 93  
 94  
 95  
 96  
 97例一:使用连接串连接数据库   
 98  
 99  
100  
101  
102  
1031 创建数据库   
104  
105## 数据库脚本如下,可存储为.sql文件,然后利用phpMyAdmin生成数据库   
106  
107  
108  
109## 注意,后面的例子也将沿用该数据库。   
110  
111  
112  
113create database yesgo   
114  
115  
116  
117use yesgo;   
118  
119  
120  
121  
122  
123  
124  
125create table prov   
126  
127  
128  
129(   
130  
131  
132  
133prov_id tinyint(2) not null primary key,   
134  
135  
136  
137prov_name char(6) not null   
138  
139  
140  
141);   
142  
143  
144  
145  
146  
147  
148  
149insert into prov values ('01','安徽');   
150  
151  
152  
153insert into prov values ('02','北京');   
154  
155  
156  
157insert into prov values ('03','重庆');   
158  
159  
160  
161insert into prov values ('04','福建');   
162  
163  
164  
165insert into prov values ('05','甘肃');   
166  
167  
168  
169insert into prov values ('06','广东');   
170  
171  
172  
173insert into prov values ('07','广西');   
174  
175  
176  
177insert into prov values ('08','贵州');   
178  
179  
180  
181insert into prov values ('09','海南');   
182  
183  
184  
185insert into prov values ('10','河北');   
186  
187  
188  
189insert into prov values ('11','黑龙江');   
190  
191  
192  
193insert into prov values ('12','河南');   
194  
195  
196  
197insert into prov values ('13','湖北');   
198  
199  
200  
201insert into prov values ('14','湖南');   
202  
203  
204  
205insert into prov values ('15','内蒙古');   
206  
207  
208  
209insert into prov values ('16','江苏');   
210  
211  
212  
213insert into prov values ('17','江西');   
214  
215  
216  
217insert into prov values ('18','吉林');   
218  
219  
220  
221insert into prov values ('19','辽宁');   
222  
223  
224  
225insert into prov values ('20','宁夏');   
226  
227  
228  
229insert into prov values ('21','青海');   
230  
231  
232  
233insert into prov values ('22','山西');   
234  
235  
236  
237insert into prov values ('23','陕西');   
238  
239  
240  
241insert into prov values ('24','山东');   
242  
243  
244  
245insert into prov values ('25','上海');   
246  
247  
248  
249insert into prov values ('26','四川');   
250  
251  
252  
253insert into prov values ('27','天津');   
254  
255  
256  
257insert into prov values ('28','西藏');   
258  
259  
260  
261insert into prov values ('29','新疆');   
262  
263  
264  
265insert into prov values ('30','云南');   
266  
267  
268  
269insert into prov values ('31','浙江');   
270  
271  
272  
273insert into prov values ('32','香港');   
274  
275  
276  
277insert into prov values ('33','澳门');   
278  
279  
280  
281insert into prov values ('34','台湾');   
282  
283  
284  
285  
286  
287  
288  
2892 为数据库添加帐号   
290  
291##按如下方式添加的帐户只对yesgo数据库具有权限,而且对它拥有全部权限。但为什么要添加四次呢?主要是host的不同,需要注意的是,MySQL验证是一个连接是否正确,不仅取决于帐号和密码,还要看主机名和数据库名。   
292  
293  
294  
295  
296  
297  
298  
299mysql –p   
300  
301  
302  
303mysql&gt; grant all privileges on yesgo.* to your_user_name@localhost identified by ‘your_password’ with grant option;   
304  
305  
306  
307mysql&gt; grant all privileges on yesgo.* to your_user_name@’ns.yesgo.loc’ identified by ‘your_password’ with grant option;   
308  
309  
310  
311mysql&gt; grant all privileges on yesgo.* to your_user_name@’192.168.1.2’ identified by ‘your_password’ with grant option;   
312  
313  
314  
315mysql&gt; grant all privileges on yesgo.* to your_user_name@’%’ identified by ‘your_password’ with grant option;   
316  
317  
318  
319mysql&gt;exit   
320  
321  
322  
323  
324  
325  
326  
3273 创建JSP源文件   
328  
329touch /home/www/cnmysql.jsp   
330  
331  
332  
333chown –R www /home/www/cnmysql.jsp   
334  
335  
336  
337chgrp –r root /home/www/cnmysql.jsp   
338  
339  
340  
341chmod 771 /home/www/cnmsql.jsp   
342  
343  
344  
345  
346  
347  
348  
349vi /home/www/cnmsql.jsp   
350  
351  
352  
353## 源代码如下:   
354  
355  
356  
357  
358  
359  
360  

@ page language="java" import="java.sql.*"

1  
2  
3  

Class.forName ("org.gjt.mm.mysql.Driver");

Connection conn = DriverManager.getConnection("jdbc:mysql://host_name/db_name","user_name","password");

Statement stmt = conn.createStatement();

ResultSet rs=stmt.executeQuery("select * from prov");

rs.next();

out.print(rs.getString("prov_id")+" "+rs.getString("prov_name")+"<br/>");

rs.next();

out.print(rs.getString("prov_id")+" "+rs.getString("prov_name")+"<br/>");

rs.previous();

out.print(rs.getString("prov_id")+" "+rs.getString("prov_name")+"<br/>");

rs.last();

out.print(rs.getString("prov_id")+" "+rs.getString("prov_name")+"<br/>");

rs.first();

out.print(rs.getString("prov_id")+" "+rs.getString("prov_name")+"<br/>");

rs.close();

stmt.close();

conn.close();

  1  
  2  
  3  
  44 测试该程序   
  5  
  6lynx http://www.yesgo.loc/cnmysql   
  7  
  8  
  9  
 10##正确的结果应该是:   
 11  
 12  
 13  
 14  
 15  
 16  
 17  
 181 安徽   
 19  
 20  
 21  
 222 北京   
 23  
 24  
 25  
 261 安徽   
 27  
 2834 台湾   
 29  
 30  
 31  
 321 安徽   
 33  
 34  
 35  
 36  
 37  
 38  
 39  
 40例二:使用连接池连接数据库   
 41  
 421 建立数据源   
 43  
 44vi /usr/local/resin/conf/resin.conf   
 45  
 46  
 47  
 48  
 49  
 50  
 51  
 52<resource-ref>
 53<res-ref-name>jdbc/yesgo</res-ref-name> //数据源名称   
 54  
 55  
 56  
 57<res-type>javax.sql.DataSource</res-type> //数据源类型   
 58  
 59  
 60  
 61<init-param driver-name="org.gjt.mm.mysql.Driver"></init-param> //数据库驱动   
 62  
 63  
 64  
 65<init-param url=" jdbc:mysql://localhost/yesgo "></init-param> //连接串   
 66  
 67  
 68  
 69<init-param user="your_user_name"></init-param> //用户名   
 70  
 71  
 72  
 73<init-param password="your_password"></init-param> //密码   
 74  
 75  
 76  
 77<init-param max-connections="20"></init-param> //最大连接数   
 78  
 79  
 80  
 81<init-param max-idle-time="30"></init-param> //延时时间   
 82  
 83  
 84  
 85</resource-ref>   
 86  
 87  
 88  
 89  
 90  
 91  
 92  
 932 创建JSP源文件   
 94  
 95touch /home/www/testpool.jsp   
 96  
 97  
 98  
 99chown –R www /home/www/testpool.jsp   
100  
101  
102  
103chgrp –r root /home/www/testpool.jsp   
104  
105  
106  
107chmod 771 /home/www/testpool.jsp   
108  
109  
110  
111  
112  
113  
114  
115vi /home/www/testpool.jsp   
116  
117  
118  
119## 源代码如下:   
120  
121  
122  
123  
124  
125  
126  

@ page language="java" import="java.sql.,com.caucho.sql.;"

1  
2  
3  

DBPool pool=new DBPool();

Connection conn = pool.getPool("data_source_name ").getConnection();

Statement stmt = conn.createStatement();

ResultSet rs=stmt.executeQuery("select * from prov");

rs.next();

out.print(rs.getString("prov_id")+rs.getString("prov_name")+"<br/>");

rs.next();

out.print(rs.getString("prov_id")+rs.getString("prov_name")+"<br/>");

rs.previous();

out.print(rs.getString("prov_id")+rs.getString("prov_name")+"<br/>");

rs.last();

out.print(rs.getString("prov_id")+" "+rs.getString("prov_name")+"<br/>");

rs.first();

out.print(rs.getString("prov_id")+rs.getString("prov_name")+"<br/>");

rs.close();

stmt.close();

conn.close();

  1  
  2  
  3  
  4  
  5  
  6  
  7  
  83 调试该程序   
  9  
 10lynx http://www.yesgo.loc/testpool.jsp   
 11  
 12  
 13  
 14##处理的结果跟例一是一样的:   
 15  
 16  
 17  
 18  
 19  
 20  
 21  
 221 安徽   
 23  
 24  
 25  
 262 北京   
 27  
 28  
 29  
 301 安徽   
 31  
 3234 台湾   
 33  
 34  
 35  
 361 安徽 
 37
 38__________________   
 39  
 40闲聊空间:   
 41  
 42http://www.wonyen.net/bbs/mboard.asp 
 43
 44  
 45
 46
 47* * *
 48
 49  
 50_ dsj  03-28-2003 11:05 发表:_   
 51  
 52
 53
 54****
 55
 56  
 57  
 58
 59
 60例三:使用处理层连接数据库   
 61  
 62##本例告诉你如何使用组件   
 63  
 64  
 65  
 66##其实你完全可以写一个bean来处理数据库,而不用象例二那么罗索。只用四条语句就可以取出数据库中的所有数据并显示出来,这样做实现了处理层和逻辑层的彻底分离,由逻辑层发出指令、由处理层去响应相关处理,记录集也不会返回到逻辑层的jsp页面,而由处理层的bean处理,使得代码非常精简,效率也更高。至于如何书写组件不是本文档的重点,下面仅给出一个组件的例子并说明逻辑层的调用方法,你会发现其实逻辑层是个官僚,处理层是下属,呵呵。   
 67  
 68  
 69  
 70  
 71  
 72  
 73  
 741 创建处理层组件   
 75  
 76下面的组件是我为公司写的数据库处理组件的简化版本,考虑到篇幅和可读性等问题,这里我简化了它的功能(象数据分页、批量更新、获取字段数和字段名称,用setget提高其扩展性、对其他连库方法的支持等都没有出现在下面的代码中),使之包含所有常用的功能并使之更加清晰和易于理解;其二,我将连库动作加到了构造函数中,这是个优点也是个缺点,优点是简化了连库动作,缺点是降低了通用性,我没有添加设置数据源等方法,从而每当变换一次数据库就需要改写组件中的连接池名称,这在做一个固定项目的时候是可以的,如果你需要set数据源,可以自行添加;   
 77  
 78  
 79  
 80##使用组件的方法:   
 81  
 82  
 83  
 84我这里说的是使用bean的通用方法,你建立自己的bean目录可以仿照该例子。在你的站点根目录下建立resin.conf中指定的存放bean的目录,我上面的举例是classes,那你就建立classes目录,那么classes就是你站点的class根目录。然后在下面依次建立com\gledecity\yesgo\sql,注意它们之间是父子关系,不是同级文件夹,然后将下面即将建立的DBBridge.java放到”站点根目录\classes\com\gledecity\yesgo\sql”目录下,然后将该文件上传到服务器端即可。上面的步骤在微软平台上使用UltraDev之类的开发工具即可完成,当然手工也可以。   
 85  
 86  
 87  
 88  
 89  
 90  
 91  
 92源文件如下:   
 93  
 94  
 95  
 96  
 97  
 98  
 99  
100//------------------------------------------------------------------------------   
101  
102  
103  
104// File: DBBridge.java   
105  
106  
107  
108// Copyright (c) 2001-2002 Mr.Fengjun Zhao. All Rights Reserved.   
109  
110  
111  
112// Author: 赵凤君@06/18/01   
113  
114  
115  
116// Last Revision: 赵凤君@01/18/2002   
117  
118  
119  
120// Description: 数据库接口类。一个统一的数据库接口,实现了逻辑层和数据层的彻底分离,封装了常用的数据库操作。主要功能是:连接数据库、执行SQL语句、数据库取值操作、数据分页、清除数据、关闭数据库等。   
121  
122  
123  
124// Version:简化版1.0   
125  
126  
127  
128//------------------------------------------------------------------------------   
129  
130  
131  
132  
133  
134  
135  
136//指定包目录   
137  
138  
139  
140package com.gledecity.yesgo.sql;   
141  
142  
143  
144  
145  
146  
147  
148//导入包   
149  
150  
151  
152import java.sql.* ;   
153  
154  
155  
156import com.caucho.sql.*;   
157  
158  
159  
160  
161  
162  
163  
164public class DBBridge {   
165  
166  
167  
168//声明属性   
169  
170  
171  
172private DBPool pool ;   
173  
174  
175  
176private Connection conn ;   
177  
178  
179  
180private ResultSet rs ;   
181  
182  
183  
184private Statement stmt ;   
185  
186  
187  
188  
189  
190  
191  
192  
193  
194  
195  
196// -------------------------------------- 构造函数---------------------------------   
197  
198  
199  
200public DBBridge() {   
201  
202  
203  
204pool=null ;   
205  
206  
207  
208conn=null ;   
209  
210  
211  
212rs=null ;   
213  
214  
215  
216stmt=null ;   
217  
218  
219  
220try{open();}   
221  
222  
223  
224catch(java.sql.SQLException ex){ex.toString();}   
225  
226  
227  
228}   
229  
230  
231  
232// ------------------------------------------------------------------------------------   
233  
234  
235  
236  
237  
238  
239  
240//连接数据库的方法   
241  
242  
243  
244public void open()   
245  
246  
247  
248throws SQLException {   
249  
250  
251  
252if( conn!=null &amp;&amp; !conn.isClosed() )   
253  
254  
255  
256throw new SQLException( "The connection has been established already." ) ;   
257  
258  
259  
260clear () ;</stduser></stduser></stduser></stdpass></stduser>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus