Apache+mono+xsp搭建Linux下的asp.net平台

linuxprobe0 2010-12-25

最近做项目需要用到在linux下搭建web服务器,虽然PHP很简单易行,但是前段时间一直看的微软asp.net,所以想尽办法在linux下搭建一个支持发布asp.net网页的平台。参阅了各种资料,现总结如下:

核心:利用开源项目mono来辅助linux内核搭建支持asp.net的平台

1.首先我们需要下载以下安装包:

apache(强大的web服务器开源软件,此处我们只需要它的httpd组件)

mod-mono(真正实现支持.aspx等文件的mono模块)

xsp(轻量级web服务器,此处我们只是利用它内部支持mod-mono-server的模块)

mono(开源项目基础安装)

下载地址:mono,mod-mono,xsp:
http://ftp.novell.com/pub/mono/sources/

http://ftp.novell.com/pub/mono/sources-stable/

apache: http://httpd.apache.org/download.cgi

2.顺序安装以上软件包:

apache:

./configure

make

make install

mono:

./configure

make

make install

注意:在执行./configure后,可能会出现以下几个问题:

(1)错误:没有安装bison

解决方法:直接apt-get install安装bison,如果不行就去网上下载一个bison的软件包,手工执行./configure;make;make install来进行安装

(2)错误:不支持gettext

解决方法:更新源至科大debian源,然后直接apt-get install一般就可以了

make命令的执行时间会有十几分钟,耐心等待...

xsp:

./configure --prefix=/usr

make

make install

mod-mono:

./configure --prefix=/usr/local/

make

make install

3.配置httpd.conf

安装好了上述软件包并不代表我们的平台就搭好了,还需要修改apache的配置文件httpd.conf

vim /usr/local/apache2/conf/httpd.conf

(1)ServerName

修改网页发布的ip地址。作为测试,直接设置成本机地址就好了:

ServerName 本机ip地址:80

(2)网页访问权限

要让别的机器访问即将发布的网页,我们需要将 <Directory></directory>中的Deny from all改成Allow from all以便获得最大权限。当然如果考虑到安全性,可以另外设置,具体参见文章最后的参考资料

(3)使apache载入mod-mono模块

在配置文件开头增加如下语句可以让apache载入mod-mono模块:

Include /usr/local/apache2/conf/mod_mono.conf

(4)自定义asp.net应用

在配置文件末尾加入下列语句(#后为注释):


    MonoAutoApplication disabled    # 下面语句就是在手动设置mono应用,所以mono自动应用功能需要关闭
    AddHandler mono .aspx .ascx .asax .ashx .config .cs .asmx .axd # 添加mono需要识别的文件类型,可以看到这些都是asp.net常用的文件类型
    Alias /test "/usr/lib/xsp/test" # 配置一个虚拟目录
    MonoApplications "/test:/usr/lib/xsp/test" # 配置上述虚拟目录对应的asp.net应用,此处利用的是xsp自带的实例网页代码
    MonoServerPath /usr/bin/mod-mono-server2   # 实际上apache能支持asp.net全是靠一个叫做mod-mono-server的服务器来实现的,此处就是确定使用mod-mono-server的版本(mod-mono-server仅支持asp.net,mod-mono-server2支持asp.net 2.0)
    MonoPath test "/usr/lib/mono/2.0:/usr/lib:/usr/lib/xsp/2.0"   # 告诉apache上述mod-mono-server2所在的路径
    <Location "/usr/lib/xsp/test"> # 配置上述实际应用
        MonoSetServerAlias test
        SetHandler mono
    </Location>

此时我们的httpd.conf配置文件就写好了,然后开启apache:

cd /usr/local/apache2/bin

./apachectl start

这时在浏览器地址栏输入:

http://本机ip地址/test

如果可以看到网页,那么恭喜你,第一步成功了...

为啥说第一步成功了?还有第二步吗?答案是:有

当我们试图点击网页上的menu或者gridview时,会发现网页报找不到gdiplus.dll的错误!

这是因为xsp这个例子中的网页要用到window下的一个动态链接库文件gdiplus.dll,而我们的linux当然没有!别急,我们可以在linux中添加功能相应的.so文件,步骤如下:

(1)find / -name libgdiplus.so

发现libgdiplus.so文件位于目录/usr/local/lib/,因此我们需要将此路径写入系统的ld.so.conf配置文件,否则即使存在,系统内核也不会发现这个动态链接库文件

(2)vim /etc/ld.so.conf 增加一行:include /usr/local/lib/libgdiplus.so

(3)执行ldconfig命令将新的动态链接库文件添加进ld.so.cache缓存以便mono需要的时候调用

(4)验证:如果输入命令ldconfig -p|grep libgdiplus.so 有结果,则证明配置成功。此时再次点击menu或gridview,发现问题解决了!

4.添加自己的asp.net网站

上面的xsp例子成功了,那我们如何添加自己的asp.net网站呢?方法和上面同理,只需要在httpd.conf中添加类似如下代码即可:

    MonoAutoApplication disabled
    AddHandler mono .aspx .ascx .asax .ashx .config .cs .asmx .axd
    Alias /mypage "/home/fjj/mypages"
    MonoApplications "/mypage:/home/fjj/mypages"
    MonoServerPath /usr/bin/mod-mono-server2  
    MonoPath test "/usr/lib/mono/2.0:/usr/lib:/usr/lib/xsp/2.0"  
     <Location "/home/fjj/mypages">
        MonoSetServerAlias test
        SetHandler mono
    </Location>

其中/home/fjj/mypages为你的网站根目录,/mypage为虚拟目录。配置好后在浏览器输入:

http://服务器ip地址/mypage就可以看到自己通过linux发布的asp.net网站了!

最后注意!!

1.如果访问网站出现权限问题,可以尝试在服务器通过chmod修改文件的访问权限

2.由于开发asp.net网站需要配置文件web.config,所以要想linux完美支持asp.net中的一些动态控件(如updatepanel)需要添加web.config文件,这是必不可少的!我的做法是在windows下利用vs2008开发好网站后,将整个工程拷到linux下发布,虽然有点笨但可以成功实现动态网页的呈现!

相关推荐