跳至主要内容

使用 Jetty 7 搭建虚拟主机

同 Tomcat 一样,Jetty 也是纯 Java 的 Web 服务器和 Servlet 容器。跟 Tomcat 不同的是 Jetty 本身模块化机制,最基本模块的只负责网络 IO 和 HTTP 协议,所以程序运行效率非常高。很多程序都会嵌入 Jetty 以提供 HTTP 服务,比如一些提供 HTTP 接口的 NoSQL、分布式文件系统和全文索引引擎等产品,还有 Google 的 App Engine (java版)也使用 Jetty 提供 Web 服务,另外 Jetty 的 Comet 特性经常用于实现实时数据通信。
除此以外,Jetty 也能够以 Standalone 形式运行,可以很轻巧地实现搭建多(Java web application)站点服务。
下面以在一台服务器(只有一个公网IP地址)上搭建 abc.com,xyz.com 作为例子讲解搭建及配置过程。

1、下载 Jetty 7
Jetty 7 的各个部分包括:Core Web Server (HTTP & Websocket),Core Servlet Container,JNDI, JMX, OSGi, JASPI modules 都是单独提供,所以为了简单起见,可以下载一个整合包:


  • JETTY_VERSION=7.0.2.v20100331
  • wget http://download.eclipse.org/jetty/$JETTY_VERSION/dist/jetty-distribution-$JETTY_VERSION.tar.gz
  • tar xfz jetty-distribution-$JETTY_VERSION.tar.gz
  • cd jetty-distribution-$JETTY_VERSION
  • java -jar start.jar
这样你就已经完成下载和运行 Jetty 了,试试访问 http://localhost:8080/。

2、Jetty 的配置
Jetty 的主目录里有几个比较重要的目录:
  • contexts 存放各个 web app 的配置文件
  • contexts-avaiable 存放各个暂时不使用的 web app (一般是自带的示例)的配置文件
  • etc jetty程序本身的配置文件
  • webapps 存放各个 web app 的具体资源文件,即 war 压缩包。
当使用 java -jar jetty 这样的方式启动 Jetty 时,实际上使用的是 etc/jetty.xml 这个配置文件启动,相当于 java -jar jetty etc/jetty.xml,可以指定 etc 里面的一个或多个配置文件,比如 java -jar jetty etc/jetty.xml etc/jetty-jmx.xml,一般来说用默认配置(etc/jetty.xml)就足够了。
可以尝试打开并阅读这个文件,里面的内容比较容易理解,主要定义了两个定时监控文件变化的目录:contexts 和 webapps,在 Jetty 运行的状态下添加、删除或修改这两个目录的内容都会导致 Jetty 重新加载相应的 web app,这个特性可以实现 web app 的热部署,需要注意的是这种热部署是针对整个 web app的,更改web app里面的资源文件并不会导致 context reload,所以这点跟 Tomcat 是有区别的。

在生产环境中最好先清除 Jetty 发行包自带的示例,方法是把 webapps 目录里面的文件全部删除,把 contexts 里面的所有文件删除或者移动到 contexts-avaiable 里。

3、开始部署 abc.com 和 xyz.com
a、先把这两个 web app 的资源文件放置在 Jetty启动者有访问权限的目录,比如
/var/www/abc
/var/www/xyz
b、 在 contexts 目录创建 abc.xml,内容如下:

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/</Set>
  <Set name="resourceBase">/var/www/abc</Set>
  <Set name="virtualHosts">
    <Array type="String">
      <Item>abc.com</Item>

      <Item>xyz.com</Item>

    </Array>
  </Set>
  <!-- disable cookies
  <Get name="sessionHandler">
     <Get name="sessionManager">
        <Set name="usingCookies" type="boolean">false</Set>
     </Get>
  </Get>
  -->
</Configure>
c、再创建 xyz.xml,内容跟 abc.xml 几乎一样,只需把“abc”改为“xyz”就可以了。

4、测试
在 /etc/hosts 里加入两行
abc.com  127.0.0.1
xyz.com    127.0.0.1
然后可以在浏览器里分别访问 http://abc.com 和 http://xyz.com。


参考资料:
http://wiki.eclipse.org/Jetty/Starting/Downloads
http://wiki.eclipse.org/Jetty/Reference

评论

此博客中的热门博文

使用 Sendmail 在 CentOS 5.5 架设邮件服务器

假如你要架设一个有会员管理的网站,可能会遇到诸如“我忘记密码了”、“你有一年没来过了,有空过来瞧瞧吧”这类的问题,一般这类问题都是使用邮件解决的,比如发送一个重置密码的链接或者发送一封提醒邮件。
发送邮件的方法有很多,比如使用外面专业SMTP中继服务(一般收费惊人)、使用类似 Google Apps (Free) 的免费邮件发送服务(限制比较多,比如一天不能超过500封等),而比较廉价且彻底的解决方法应该是在自己的服务器上搭建邮件服务器(SMTP服务器)。假如你使用的是 Linux 系统,那么一般邮件服务器早已安装好了,比如 CentOS(RedHat、Fedora等)内置的 Sendmail 服务程序,你只需设置几下即可使用。

1、域名的设置

首先你要设置域名DNS的MX记录和SPF记录,一般我们只要有如下几条DNS记录就可以了:

记录类型    主机名   目标
------------------------------------
A                  @           123.123.123.123 (这里应该是你的服务器IP)
CNAME      www       your-domain.com
CNAME      SMTP      your-domain.com
MX              @            smtp.your-domain.com
TXT              @            v=spf1 a mx ~all

MX记录是邮件服务器必须依赖的,而TXT(SPF)是用来防止自己的邮件服务器发送的邮件不被当成垃圾邮件(spam email),假如不增加这条记录的话对方邮箱服务要么把你的邮件直接丢弃、要么塞到垃圾邮件文件夹里,所以这条记录也是必不可少的,更多的SPF设置方法参阅这里:http://www.openspf.org/

2、设置 Sendmail

我现在使用的 Sendmail 版本是 8.14,设置方法已经变得非常简单了,首先确保你系统已经有 sendmail 及其相关服务了:

#yum install sendmail  (这个必须的)
#yum install sendmail-cf
#yum install sendmail-devel
#yum install sendmail-mi…

一个人用的 Git

Git 是目前比较时髦的版本控制系统,虽然 linux 内核源码是使用它来管理的,但系统非常小巧而且使用简单,比起 svn (subversion) 系统,git 有一个明显的优势就是在不联网的情况下也可以查阅或者回滚历史版本,有时带着笔记本出外工作这个功能是非常有用的。下面介绍一下用 Git 管理个人电脑上的个人文档文件。(@ivarptr)

这篇文章有几个假设前提:
a、你从事的工作有很多文档需要书写或者整理,而且文档篇幅比较大需要经常修修改改,有时还可能需要回档(即恢复到历史的某个版本)。
b、你的文档具有关联性的,比如一个项目策划书,有多份文本文档、电子表格、图片,希望平时能整体记录一个版本(快照)。
c、你有多台工作用的电脑,为了简单起见,下文假设只有两台电脑。
d、你有一台能够在互联网上访问的服务器,最好是跑 linux 系统而且有 ssh 登录权限。
e、为了简明,省略了安全权限设置和Git最为突出的特性“分支”。

1、几个必须厘清的概念
a、svn只有一个远程仓库集中管理所有的版本,而Git分有“本地仓库”和“远程仓库”之分,在提交你的最新文档过程中,需要两层提交,一次是提交到本地仓库,然后才可以提交到远程仓库。
b、svn的远程仓库保存的总是全局最新的版本,各个支点(小组成员)必须对此仓库负责。而Git则没有集中远程仓库之说,理论上每个人的地位是平等的,同时每个人的本地仓库也可以配置为给他人访问的“远程仓库”。不过对于个人或者一个小团队来说,为了简便起见我们通常会协商好让某个远程服务器上的仓库保持最新并且集中管理,这点跟Svn类似。
c、svn的每次提交会产生一个递增的数字作为版本号码,而git每次提交会产生一个“快照”,快照不是用一个递增的数字作为名称的,而是一个hash值,当然用一个hash值来呼叫某一次提交也太累赘了,所以在实际应用过程中我们往往只用hash指的头4~6位就可以了(类似一个人的昵称)。

2、在服务器上创建 Git 仓库
关于在 linux 系统里如何安装 Git 程序可以参考这篇《在CentOS 5.5里安装Git以及搭建Git服务器最简单教程》,要记住 Git 程序是不区分服务端或客户端的。

首先我们要创建一个Git仓库,使用 ssh 登录到你的服务器,在用户home文件夹里创建一个文件夹,为了容易识别,最好在文件夹名字后面加一…