apache默认的文档根目录是/var/www
我想让localhost继续指向这个默认的根目录
同时想把~/server/ibm_w3_server作为另一个 根目录,并且希望多个域名或站点(都指向这个根目录)
最终的解决办法如下:
cd /etc/apache2/sites-available
sudo cp default ibm_w3_server
sudo vi ibm_w3_server
内容如下:
<VirtualHost *:80>
ServerName myw3.ibm.com
ServerAlias 1.w3.s81c.com w3.ibm.com tmscdn.coremetrics.com services.maxymiser.net
ServerAdmin webmaster@localhost
DocumentRoot /home/cyper/server/ibm_w3_server
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/cyper/server/ibm_w3_server/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
太长,只高亮出我修改的。。
然后启动这个配置
sudo a2ensite ibm_w3_server
这样的话,虚拟主机站点 myw3.ibm.com就已经安装好了。
(注:可以用sudo a2dissite ibm_w3_server卸载这个主机站点)
这时你也可以在/etc/apache2/sites-enabled/ 目录中发现多了一个到 /etc/apache2/sites-available/ibm_w3_server
的软链接。接下来就是将 Apache2 重启来使虚拟主机站点运行起来:
sudo /etc/init.d/apache2 restart
此时访问myw3.ibm.com提示server not found, 这是因为我们还没有配置dns.
我是用firefox的插件HostAdmin管理/etc/hosts文件的
如果在HostAdmin Editor中保存失败,给hosts文件添加写权限即可
sudo chmod og+w /etc/hosts
当然你也可能直接修改/etc/hosts文件,不论是哪种方式增加如下内容:
192.168.1.101 myw3.ibm.com #w3_server
192.168.1.101 1.w3.s81c.com #w3_server
192.168.1.101 w3.ibm.com #w3_server
192.168.1.101 tmscdn.coremetrics.com #w3_server
192.168.1.101 data.coremetrics.com #w3_server
192.168.1.101 libs.coremetrics.com #w3_server
192.168.1.101 faces.tap.ibm.com #w3_server
192.168.1.101 pt200204.unica.com #w3_server
192.168.1.101 service.maxymiser.net #w3_server
只要输入以上配置中的任意一个站点,浏览器都会指向目录~/server/ibm_w3_server, 但是输入其它的虚拟主机名比如localhost还会指向/var/www.
这样,我可以在~/server/ibm_w3_server管理与某项目相关的所有静态文件,并且绑定到多个站点。但是不会污染默认的/var/www。
最近在学shell,练习做了个一键安装和一键卸载的脚本
install.sh
#!/bin/bash
#see http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
echo $DIR
#go to target dir
cd /etc/apache2/sites-available
echo "Creating config file..."
sudo cp default ibm_w3_server
sudo sed -i '1a \\tServerName myw3.ibm.com' ibm_w3_server
sudo sed -i '2a \\tServerAlias 1.w3.s81c.com w3.ibm.com' ibm_w3_server
sudo sed -i 's/\/var\/www/\/home\/cyper\/server\/ibm_w3_server/g' ibm_w3_server
echo "Enable new site ..."
sudo a2ensite ibm_w3_server
echo "Restart apache2 ..."
sudo /etc/init.d/apache2 restart
echo "Modify hosts ..."
sudo chmod og+w /etc/hosts
sudo sed -i 's/^.*#w3_server$//g' /etc/hosts
sudo cat ${DIR}/w3_hosts.txt >> /etc/hosts
echo "Done."
uninstall.sh
#!/bin/bash
cd /etc/apache2/sites-available
echo "Disable new site ..."
sudo a2dissite ibm_w3_server
echo "Restart apache2 ..."
sudo /etc/init.d/apache2 restart
echo "Removing config file..."
sudo rm -f /etc/apache2/sites-available/ibm_w3_server
#delete lines end with #w3_server
echo "Modify hosts ..."
chmod og+w /etc/hosts
sudo sed -i 's/^.*#w3_server$//g' /etc/hosts
echo "Done."
参考:http://blog.youkuaiyun.com/jibcy/article/details/8060651
参考:http://mymbk.blog.sohu.com/216436219.html
参考:http://httpd.apache.org/docs/2.2/vhosts/examples.html
之前我是用node.js做了一个简单的静态服务器,缺点是需要安装nodejs服务。ibm_w3_server.js代码如下:
var http = require('http'),
url = require('url'),
path = require('path'),
fs = require('fs');
var mimeTypes = {
"html": "text/html",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"png": "image/png",
"js": "text/javascript",
"css": "text/css"};
http.createServer(function(req, res) {
var uri = url.parse(req.url).pathname;
var filename = path.join(process.cwd(), uri);
path.exists(filename, function(exists) {
if(!exists) {
console.log("not exists: " + filename);
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('404 Not Found\n');
res.end();
return;
}
var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
res.writeHead(200, {'Content-Type': mimeType});
var fileStream = fs.createReadStream(filename);
fileStream.pipe(res);
}); //end path.exists
}).listen(80, function(){console.log("server started listening on port 80.")});
后来重装了系统,懒得装nodejs了。想把静态文件放到/var/www下(这样省事),
但是这些静态文件分散在多个不同的目录中,会让/var/www下出现一大堆乱七八糟的文件,所以得放到一个单独的目录下,好在apache为我们提供了这样的便利,嘿嘿。