前段时间主机快过期了,最近又在研究SSL证书,因为原来用的虚拟主机不是独立的VPS,不支持自己到网站上配置SSL,心里就捣鼓着想换一台独立的虚拟主机,我网站原来的运行环境是Windows2003 + IIS6.0 + .Net2.0 + MS Access数据,而Windows主机都比较贵,所有后面就想着把网站搬到Linux上,移植到的Linux的运行环境是Ubuntu12 + Apache2 + mono + mysql,自己实践使用mono在Linux运行.Net网站,于是便有出此文。
1.安装apache2
Ubuntu下使用apt-get安装很方便,需要先配置好安装包的源。编辑配置文件增加如下源:
vi /etc/apt/source.list
# 上海交大的源
deb http://ftp.sjtu.edu.cn/debian lenny main non-free contrib
deb http://ftp.sjtu.edu.cn/debian lenny-proposed-updates main non-free contrib
deb http://ftp.sjtu.edu.cn/debian-security lenny/updates main non-free contrib
# 163的源
deb http://mirrors.163.com/debian lenny main non-free contrib
deb http://mirrors.163.com/debian lenny-proposed-updates main non-free contrib
deb http://mirrors.163.com/debian-security lenny/updates main non-free contrib
# 附搜狐的源:
deb http://mirrors.sohu.com/ubuntu/ karmic main restricted
deb-src http://mirrors.sohu.com/ubuntu/ karmic main restricted
deb http://mirrors.sohu.com/ubuntu/ karmic-updates main restricted
deb-src http://mirrors.sohu.com/ubuntu/ karmic-updates main restricted
deb http://mirrors.sohu.com/ubuntu/ karmic universe
deb-src http://mirrors.sohu.com/ubuntu/ karmic universe
deb http://mirrors.sohu.com/ubuntu/ karmic-updates universe
deb-src http://mirrors.sohu.com/ubuntu/ karmic-updates universe
deb http://mirrors.sohu.com/ubuntu/ karmic multiverse
deb-src http://mirrors.sohu.com/ubuntu/ karmic multiverse
deb http://mirrors.sohu.com/ubuntu/ karmic-updates multiverse
deb-src http://mirrors.sohu.com/ubuntu/ karmic-updates multiverse
sudo apt-get update
--解决 公钥签名
gpg --keyserver subkeys.pgp.net --recv 40976EAF437D05B5
gpg --export --armor 40976EAF437D05B5|sudo apt-key add -
然后再安装Apache2
sudo apt-get install apache2
2.配置mysql
同样使用apt-get安装mysql服务器端,如下:
sudo apt-get install mysql-server
然后修改my.cnf配置文件,允许远程访问mysql,不区分表名大小写,再重启mysql服务。
sudo apt-get install mysql-server
sudo vi /etc/mysql/my.cnf
# 允许远程访问
#bind-address = 127.0.0.1
# 在[mysqld]下加入一行 不区分表名大小写
lower_case_table_names = 1
sudo /etc/init.d/mysql restart
有一次重启mysql后,账户就连不进不去了,必须要用系统登录账户进去修改密码。
mysql -udebian-sys-maint -p
Enter password: <输入[client]节的密码>
直接使用/etc/mysql/debian.cnf文件中[client]节提供的用户名和密码
use mysql;
UPDATE user SET Password=PASSWORD('pengjinlong') where USER='root';
FLUSH PRIVILEGES;
quit;
mysql默认安装的不支持中文模糊查询,需要修改配置来设置默认编码。
--编码设置
sudo vi /etc/mysql/my.cnf
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
default-character-set=utf8
[mysqld]
character-set-server = utf8
3.安装mono
mono对.Net2.0的支持比较全,做Web服务器需要安装xsp2。
--安装mono运行环境
sudo apt-get install mono-gmcs mono-xsp2 libapache2-mod-mono mono-apache-server2
--启用mono模块
sudo a2enmod mod_mono
安装完成后,我们就可以开始配置.Net网站了,假如网站主目录在/var/www/blog,修改/etc/apache2/sites-enabled/000-default如下:
#修改apache配置文件增加网站配置
sudo vi sites-enabled/000-default
MonoAutoApplication disabled
AddHandler mono .aspx ascx .asax .ashx .config .cs .asmx .axd
MonoPath default "/usr/bin/mono/2.0"
MonoServerPath default /usr/bin/mod-mono-server2
AddMonoApplications default "/blog:/var/www/blog"
#文件不需要大小写
MonoSetEnv MONO_IOMAP=all
<Directory /var/www/blog>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
SetHandler mono
DirectoryIndex default.aspx Default.aspx index.aspx index.html
</Directory>
--赋予网站执行权限
chmod -R 755 /var/www/blog
--重启apache服务
sudo /etc/init.d/apache2 restart
重启apache服务后,如果不出问题使用localhost就能访问网站了,需要注意Liunx系统默认都没安装中文编码,在mono中有中文路径都显示乱码访问不到,需要修改系统配置增加中文语言包。
#增加中文支持
sudo vi /var/lib/locales/supported.d/local
zh_CN.UTF-8 UTF-8
en_US.UTF-8 UTF-8
sudo locale-gen --purge
sudo vi /etc/default/locale
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"
4.配置ssl证书
配置apache服务器SSL证书,首先需要启用ssl模块,然后再配置服务器证书和私钥Key。
--启用ssl模块
sudo a2enmod ssl
--创建默认ssl网站配置
sudo ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/000-default-ssl
--增加ssl网站配置
sudo vi /etc/apache2/sites-enabled
#启用ssl
SSLEngine on
#ssl证书文件
SSLCertificateFile /etc/apache2/ssl/server.crt
#ssl证书私钥
SSLCertificateKeyFile /etc/apache2/ssl/server.key
#证书链
SSLCertificateChainFile /etc/apache2/ssl/ca.crt
#证书验证深度
SSLVerifyDepth 10
#ssl选项
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
配置好ssl网站重启apache服务,输入https://jonllen.com就能使用安全连接访问网站,如果需要客户端证书,可以将网站配置为双向认证,则要在apache网站配置中指定客户端颁发机构CA证书。
<Directory /var/www/blog/Passport>
SSLVeriFyClient require
SSLCACertificateFile /etc/apache2/ssl/ca.crt
</Directory>
这样,在访问需要配置SSL客户端证书路径时,客户端浏览器就会提示需要ca.crt颁发的客户端证书。需要注意服务器端要使用Request.ClientCertificate获取客户端证书,上面SSLOptions选项一定配置,否则会取不到客户端证书数据。
将这个网站移植到Linux上,总体来说使用mono基本能够满足功能,但还是有些地方还需要调整。比如Linux下对Access数据库访问支持不好,需要使用第三方工具或更换成mysql。在使用NHibernate时偶尔也出现了些问题,另外,使用了log4net日志的用mono版本的log4net.dll,日志内容会输出到apache的日志文件中。