Ubuntu配置Apache2+FastCGI+PHP5+.Net2.0(Mod_Mono)+Mysql

最近升级了Ubuntu,所以将web开发环境重新配置了一下,为了方便,apache在我的系统上支持了php,.net等环境,由于apt更新的时候mod_php5和mod_mono好像无法共存,所以我使用fastcgi来支援php,其实采用fastcgi也可以支援.net,不过官方还没给出apache的配置方法,我测试了下,也没能成功,所以只好先用mod_mono来跑了。有了fastcgi,一切就方便了,使用fastcgi可以轻松支持php,python,perl,ruby,大大减少apache加载模块。

 

配置安装环境,首先使用apt-get方式装上apache2,以及想装的其他mod,然后
sudo apt-get install mono*
把和mono有关的都装了把,一劳永逸,也不用省那么点空间了。由于安装了mono,系统默认卸载了mod_php5,因此再至少需要
sudo apt-get install php-cgi
同时你可以需要安装一些常用php模块,如php-mysql,php-mssql,php-pgsql,php-sqlite如果不知道有哪些包可以选择,可以在“新立得包管理器”中搜索php
装好了这个然后来装Mysql服务器,主要就是和mysql相关的包。
但是ubuntu使用apt-get方式安装mysql有一个bug,它无法创建系统默认数据库,因此会导致安装失败,由于我需要将windows上mysql的数据库转移到这个系统上,所以我直接将window下mysql的数据库文件复制到了/etc/mysql/my.cnf中配置的数据库目录/var/lib/mysql下,然后执行安装,则可以成功安装。
ok,下面进入重头戏的apache配置,我们打开当前虚拟主机的配置文件sudo gedit /etc/apache2/sites-available/default 。

(注:本文仅为配置一个本地开发环境,并非web服务器,因此并没有完善的安全措施,如果要配置一台服务器,下面的配置将让您的服务器变得十分危险。)
首先配置php环境:

1。开启fastcgi支持,建立文件夹 sudo mkdir /var/fcgi-bin在配置文件中新增:

 

XML/HTML代码
  1. ScriptAlias /fcgi-bin/ "/var/fcgi-bin/"  
  2.     <Directory "/var/fcgi-bin/">  
  3.             Options ExecCGI  
  4.         SetHandler fastcgi-script  
  5.         AllowOverride None  
  6.             Options None  
  7.             Order allow,deny  
  8.             Allow from all  
  9.     </Directory>  


2.建立php-cgi的链接 sudo ln /usr/bin/php-cgi /var/fcgi-bin/php-cgi
3.修改执行权限 sudo chmod 777 /var/fcgi-bin/
4.新增php的fastcgi支持,在配置文件中新增

XML/HTML代码
  1. FastCgiServer /var/fcgi-bin/php5-cgi  
  2. AddHandler php-fastcgi .php  
  3.   
  4. Action php-fastcgi /fcgi-bin/php5-cgi  
  5. AddType application/x-httpd-php .php  

(注:如果您的服务器在添加了上面的部分之后无法启动,请检查/etc/apache2/mods-enabled目录下十分有actions.conf和actions.load文件没,如果没有这两个文件,系统就无法解析Action命令了,如果没有,可以sudo cp /etc/apache2/mods-available/actions* /etc/apache2/mods-enabled 将这两个copy进来。)
OK执行sudo /etc/init.d/apache2 restart
如果提示服务器成功执行,说明php配置完成,最后我们在默认的web目录/var/www下新建一个test.php文件,文件内容如下:

PHP代码
  1. <?php  
  2. phpinfo();  
  3. ?>  

用ff浏览http://localhost/test.php,如果能出现php配置信息,则php配置大功告成。
下面开始配置Mono,安装mono的时候,系统应该已经将mod_mono加载到apache中了,因此只需要在配置文件中正确配置。
仍然是编辑刚才的default文件。加入:

XML/HTML代码
  1. Alias /dotnet "/var/www/dotnet"  
  2.   
  3. AddMonoApplications dotnet "/dotnet:/var/www/dotnet"  
  4.   
  5.     MonoServerPath dotnet /usr/bin/mod-mono-server2  
  6.     MonoPath dotnet /usr/lib/mono/2.0:/usr/lib:/usr/lib/mono/2.0  
  7.   
  8. <Directory "/var/www/dotnet">  
  9.     MonoSetServerAlias dotnet  
  10.     SetHandler mono  
  11. </Directory>  

非常容易就能让服务器支持.net了,这儿配置是支持.net2.0,如果要想支持.net1.1,清注释掉MonoPath这一行。
这儿配置Mono就像配置window下的虚拟目录一样,一个目录就是一个.net虚拟目录
如果要测试.net的执行情况,可以使用.net探针来查看,本文最后将提供一个开源.net探针下载。
到此为止,web环境基本配置完成。然后使用MonoDevelop拿出以前的.net项目,重新编译,然后发布在apache的.net目录,发现Linux下的.net和windows上还是有稍微的差别的,这也是因为操作系统的差别造成的,在此总结下.Net夸平台开发的几点建议:
1.由于linux下路径严格区分大小写,保持路径引用大小写一致,由于windows不分大小写,因此经常程序也不大在乎这些,导致程序在.net下执行失败,建议整个程序中路径和web页面名一致只采用小写字母+下划线形式
2.windows下路径间隔/和\都认,默认为\但是linux下系统路径间隔只能是/,由于这个问题很多牵涉到路径的程序在linux下都难得跑起来,解决方案有两个,一可以都只使用/反正windows也支持,二是写个专门的函数统一比如:

C#代码
  1. public static string FormatRealPath(string path)  
  2. {  
  3. #ifdef WINDOWS  
  4.     return path.Replace('/','\\'); 
  5. #else 
  6.     return path.Replace('\\','/');  
  7. #endif  
  8. }  

 

这样,在不同平台来用宏来配置。更好的方式是运行时判断系统。
3.关于程序集的问题,建议在mono环境下重新编译所有程序集。
4.发现某些程序可能导致mod-mono-server2死掉,出现503错误,目前估计没解决方案,建议方案就是尽量照上面几条写程序,以尽可能少减少这样情况,如果出现了,则只能重启apache了。

不得不佩服mono的开发者,目前Mono对.net2.0的支持基本上是完美了(除了Windows.Forms以及一些和系统关联太大的),可以说开发windows和linux通用的asp.net程序已经不是异想天开了。

最后提供一个开源asp.net探针

文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: ubuntu  linux  apache  fastcgi  php  .net 
评论: 5 | 引用: 0 | 查看次数: 1027
5 1/1 页
简单 [2008-11-10 17:14:31 ]
嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻
leven [2008-11-10 17:35:51 ]
没事这么水干啥...
风中百合 [2008-11-16 14:08:57 ]
发大水啦~~~~ 淹死你~~~~~
leven [2008-11-16 16:36:25 ]
-- 引用来自 风中百合 --
发大水啦~~~~ 淹死你~~~~~
-- 引用完毕 --
一看就知道现在你很无聊...
烟头上的探戈 [2008-11-23 23:44:53 ]
不错!很好!收藏
5 1/1 页
发表评论
用户名:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 500 字 | HTML代码允许 关闭 | 评论可修改 关闭