ubunbut apache设置多个根目录,单个目录绑定多个域名

配置Apache2服务器并实现多站点管理
本文详细介绍了如何使用Apache2服务器配置虚拟主机站点,实现多个域名或站点指向同一根目录,以及如何通过修改hosts文件进行域名解析。同时提供了一键安装和卸载的Shell脚本,方便管理和维护。
需求
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.

接下来需要修改本机的hosts文件,让所有的域名都解析为127.0.0.1(或192.168.1.101)
我是用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.")});


这个文件直接用node ibm_w3_server.js就可以跑起来

后来重装了系统,懒得装nodejs了。想把静态文件放到/var/www下(这样省事),
但是这些静态文件分散在多个不同的目录中,会让/var/www下出现一大堆乱七八糟的文件,所以得放到一个单独的目录下,好在apache为我们提供了这样的便利,嘿嘿。


转载于:https://my.oschina.net/uniquejava/blog/358240

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值