以前一直都是在win下使用apache,感觉比较熟悉了,现在突然转到linux或者说是ubuntu下,觉得有了很大的变化,不知道是apache2升级成这样了,还是ubuntu使然。
安装很简单,apt-get install apache2, apt-get install php5就ok啦,默认的localhost主页指向/var/www,下面再有一个目录apache2-default里面存放的才是原先的各种语言的index欢迎页面。
配置文件win下面就是一个httpd.conf搞定,现在复杂了一些: ubuntu中配置文件在/etc/apache2下,apache2.conf是全局配置或者说是主配置文件,httpd.conf是用户配置文件,感觉和用php编写程序时经常用config.php覆盖config.default.php文件中的设置是一样的,用户设置独立出来,方便管理和备份,毕竟主配置文件很少修改,偶尔修改一两句也可以写到httpd.conf里面,备份方便。
/etc/apache2下面除了两个配置文件以外,还有4个目录以前没见过,并且应该经常用到: sites-available – 已定义的虚拟主机设置 sites-enabled – 已激活的虚拟主机 mods-available – 已经安装了的模块module mods-enabled – 已经激活了的模块 一般来说,只要在enabled目录下ln建一个available目录下相应主机设置或者模块的连接,就相当于激活或者说启用了该虚拟主机或模块。乍一看有点麻烦,仔细想想确实对于管理来说方便了很多。
至于ln以后应当如何配置,也有例子可参考,默认安装就会生成一个虚拟主机NameVirtualHost *的设置文件,对应文件是sites-enabled/000-default,其实链接到文件sites-available/default,文件内容的语法和原来的httpd.conf是一样的。至于模块,也类似,比如我安装了php5之后,mods-enabled下就有了一个 php5.load(链接到mods-available/php5.load),文件内容就是一句:LoadModule php5_module /usr/lib/apache2/modules/libphp5.so,同时还有一个链接文件php5.conf,应该就是php5的相关设置了,内容也非常简单:
有了这些文件作参考,配置虚拟主机或者加载模块的时候就可以照葫芦画瓢了。并且这个时候如果还按照以前的语法在httpd.conf中加载模块的话(LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so),启动apache时会提示错误并失败:
建立链接时好像使用软链接即可。
另外发现一个小问题,我把000-default改名为000-default.disabled以后,却依然生效,但是改成000-default#disabled就无效了,这和apache2.conf中的“Include /etc/apache2/sites-enabled/[^.#]*”有些不一致,但是问题不知出在哪里。不过我的做法更简单一些,也更保留了以前的操作习惯:
这样所有的配置都在一个文档中了,备份的时候方便,适合于简单配置的网站。
还有,配置虚拟目录的时候如果涉及到了第二块硬盘或者其他挂载设备(非linux格式分区,不含有linux格式权限信息的分区格式),apache2默认使用的用户www-data是无法访问的,虽然配置脚本不会报错,但是无论怎么访问都会产成403 Forbidden错误,解决的方法是把用户www-data添加到相应的用户组里面去:
其他形式的无权限情况也可以根据其owner,按照上述方法进行相应设置。
当然还要注意ubuntu基本上是全unicode的,文件和编辑器都是utf-8编码,所以如果以前的网页文件是gb2312编码的,需要转换成utf8格式才能正确显示:
以上只是使用iconv批量转换文件的一个小例子。
Include /etc/apache2/sites-enabled/[^.#]*” 这句是表示包含Include /etc/apache2/sites-enabled下的所有文件
可是按照正则的语法来说,应该是文件名中没有.和#的文件才对 并且当我把000-default文件改为含有#的文件名的时候,的确就没有被调用了
windows的apache与linux的apache除了在符号连接,运行用户,组有所区别。其它的一样吧。
没有太大的区别 除了本文中说的一些之外,安装和配置模块的方式和其他linux软件一样,有的需要自己编译等等
激活/禁用 sites-available/mods-available 的 site 和 mod 都不用 ln 這麼麻煩的,我們有:)
a2ensite a2enmod a2dissite a2dismod
在a2p中,包含文件直接写Include /etc/apache2/sites-enabled/* 即可的
Include *当然方便,反正那几个目录里面不是link就是配置文件 但无法控制不启用那些模块了 还得直接操作文件或者用a2dismod