泛解析结合虚拟主机实现多域名访问不同端口或路径

自从买了腾讯云,就有种把自己的一切都转移过来的冲动,也开始这样做了.
然后买了域名

jacean.cn

在腾讯域名云解析等了好久不见成功,就转到dnspod去解析,结果还是等了好久不成功,最后在腾讯域名注册页面发现还有个资格认证,就赶紧填资料,然后上传,等验证成功后马上就解析成功了.噢耶.
于是就赶紧配置主机咯.主机是用的xampp,apache80端口,然后访问域名就直接到80,继续访问.
但是这样,只访问一个网站,实在是太浪费了,所以我要一个域名访问一个IP的不同路径和不同端口,于是就有了这篇文章.

先看看我最开始的解析设置吧.

可以看到,我设置了www解析和直接解析.暂时域名背景如此,继续.

代理80访问转至tomcat的8080

这是我最开始做的,因为jsp的解析需要tomcat,而apache80后,tomcat是8080,我又不能让我的域名每次访问时再加端口,多麻烦.于是就想到了代理.看下面的
文件是c:\xampp\apache\conf\extra\httpd-vhosts.conf

1
2
3
4
5
<VirtualHost *:80>
ServerName jacean.cn
ProxyPass /jsp/ http://www.jacean.cn:8080/
ProxyPassReverse /jsp/ http://www.jacean.cn:8080/
</VirtualHost>

这样设置后,重启apache,访问jacean.cn/jsp/,就可以转动我的8080端口,也就是tomcat监听的端口,去进行jsp解析.没有问题.
也还好啦.不过,这样做的结果是只能解析这一个.当我在加入其他的,比如

1
2
3
4
5
<VirtualHost *:80>
ServerName jacean.cn
ProxyPass /git/ http://www.jacean.cn/gitstack/
ProxyPassReverse /git/ http://www.jacean.cn/gitstack/
</VirtualHost>

时就不好使了,只能解析第一个.
这样肯定就不开心了不是,我想要大家一起玩,不能你玩了我就不能玩了啊.
尤其是当我要把我的博客也搬到这里来时

1
2
3
4
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/jacean.github.io"
ServerName jacean.cn
</VirtualHost>

于是我就另寻它路.找到了泛解析.

泛解析实现一个域名多个子域名

且看新的域名解析配置

可以看到,比之前多了一个星号(*)的解析字段.
什么是泛域名,咱再说一说.

www:解析后的域名为 www.jacean.cn
@:直接解析主域名 jacean.cn
:泛解析,匹配其他所有域名 .jacean.cn

注册域名,是注册一个#.#,比如我的就是jacean.cn,还有jacean.com,或者jacean.com.cn,这都算是域名,就是没有前缀.
当解析字段是www时,就是解析www.jacean.cn,访问其他的比如a.jacean.cn是不行的,会访问不到.而@解析就是直接解析主域名,也就是直接输入jacean.cn是可以访问的.
当设置了*后,那就是泛解析了.泛解析是一种避免输入错误的措施,是将.#.com全部解析到主机.比如a.jacean.cn,b.jacean.cn都是解析到jacean.cn我的主机.但是,确确实实这是不一样的域名了.
而我们就可以利用这种区别,去实现多域名绑定,让apache实现不同的网站服务.

apache配置虚拟主机多域名

现在直接上配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/jacean.github.io"
ServerName blog.jacean.cn
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/jaceanwx"
ServerName wx.jacean.cn
</VirtualHost>
<VirtualHost *:80>
ServerName jsp.jacean.cn
ProxyPass / http://www.jacean.cn:8080/
ProxyPassReverse / http://www.jacean.cn:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName git.jacean.cn
ProxyPass / http://www.jacean.cn:8088/gitstack/
ProxyPassReverse / http://www.jacean.cn:8088/gitstack/
</VirtualHost>

是不是看起来很爽.一下子感觉自己有了好多域名,可以随意挥霍了.
前两个都是同一端口下,只是做了根目录的改变.这样做的好处是,如果你的网站是使用的相对路径的话,保证你的相对路径好使.
比如我的blog里有很多是直接/xxx根路径下的,当我用了

1
2
3
4
5
<VirtualHost *:80>
ServerName jacean.cn
ProxyPass /blog/ http://www.jacean.cn/jacean.github.io
ProxyPassReverse /blog/ http://www.jacean.cn/jacean.github.io
</VirtualHost>

后,访问是可以访问到主页的,但是相对于根目录的一些图片啊引用啥的,就访问不到了,整个页面全乱了.
本来是在jacean.github.io/下面的东西,会直接在documentroot下找.
反向代理是把比如jacean/blog/index.php转向到jacean/jacean.github.io/index.php,这样是对的,但是在页面内容加载的时候,里面的内容并没有经过这个代理,因为根路径依然是/,而不是/blog/.
所以最后采用的是如上配置文件里的前两个所用的方案.

后面两个需要转移端口的,直接做了反向代理,这个因为是根路径的转移,所以也不会产生上面所述的问题.

有一点不好的是,gtistack的网站模式不寻常啊,,,这样git.jacean.cn访问之后,地址栏的连接会变成有端口的那种,很难看,不像jsp.jacean.cn不会.我没有解决方案,有看到我博客的可以给我评论帮我解决下哦.

注意一点就是,如果没有找到匹配的就会默认使用第一个,我默认的就是我的博客.
所以我现在有了

blog.jacean.cn 博客
wx.jacean.cn 微信开发
git.jacean.cn git服务器
jsp.jacean.cn jsp网站解析

恭喜恭喜,不客气不客气

文章目录
  1. 1. 代理80访问转至tomcat的8080
  2. 2. 泛解析实现一个域名多个子域名
  3. 3. apache配置虚拟主机多域名
,