使用Apache的虚拟主机以及代理搞定多个网站的子域名(包括跨域情况)解析问题

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mgsky1/article/details/77751442

  假期也快完了,抓住假期的尾巴,做一些自己想做的事情。

  之前一直在烦恼一个问题,就是诸如10.10.0.1:8080这样的网址如何采用域名访问,这样的方式显示在地址栏中,内网无所谓,要是到了公网就给人一种很low的感觉。后来想到使用各大厂的云解析DNS,目前只有一个万网的有提供类似的服务,他们称为【隐性URL】,说白了,就是做一个特殊的转发,在访问www.abc.com的时候显示www.def.com的内容,地址栏仍然显示www.abc.com,这种支持显式端口号网站,让地址栏没有那么“难看”。大部分提供商要想做域名与网站映射的话还是要填入一个ipv4地址的。现在全球ipv4地址资源即将用尽,自己又没有那么多money买云主机,而且这样也比较浪费资源,一个服务器只跑一个网站,太浪费了。后来网上查资料的时候发现了Apache(自己比较常用的一个网站服务器)有这样的功能。下面先介绍效果和怎么做,后面在简单说一下它的原理。


我们要实现的效果是:

地址栏输入  blog.xxx.com , 实际转向的是xxx.xxx.xxx.xxx:xxxx一个用纯ip以及端口号表示的网站。

这里所指向的实际网站并不与www.xxx.com域名存放于同一服务器上,即跨域了,非跨域的按照如此配置也是可以的。

1、去云解析DNS服务商添加子域名解析

     这里要选择A记录,值为www.xxx.com所在的服务器ip,并不是xxx.xxx.xxx.xxx:xxxx所在的服务器ip!

  

2、开启Apache的相关模块

a、LoadModule proxy_module modules/mod_proxy.soLoadModule

        b、proxy_connect_modulemodules/mod_proxy_connect.soLoadModule

        c、proxy_http_modulemodules/mod_proxy_http.so

        

3、在httpd.conf最后添加如下内容

    

    a、ServerName填写子域名blog.xxx.com  ServerName服务器名

    b、ServerAlias同样填写子域名blog.xxx.xom ServerAlias服务器别名

    c、 ProxyPreserveHost  On 开启代理保存主机(我直译的)

    d、ProxyRequestes Off 关闭代理请求(我直译的)

    e、ProxyPass / http://xxx.xxx.xxx.xxx:xxxx/ 代理通过条件 斜杠部分也要填入 

注:blog.xxx.com下的所有请求转交给http://xxx.xxx.xxx.xxx:xxxx处理,即ProxyPass的前者转交后者,前面的/就表示blog.xxx.com/,如果为/proxy,等价于blog.xxx.com/proxy

    f、ProxyPassReserve / http://xxx.xxx.xxx.xxx:xxxx/反向代理通过条件 斜杠部分也要填入

4、#NameVirtualHost *:80前的#去掉,没有的话填上这一句。

5、重启Apache服务

最终效果(Apache与Nginx属于不同的网站服务器哦,跨域了~)


原理简述:这其实就是DNS的逐级解析再转发的一个过程。我们输入blog.xxx.xom的时候,又因为云解析DNS解析到一个固定的IP地址,然后,云解析DNS的功能就结束了,剩下的就是Apache服务器的事情了。我们知道,开启Apache的虚拟主机后,就可以同时跑多个网站了,我们让这些虚拟主机全部监听80端口,这样,当收到请求后,Apache会根据我们设定的子域名选择正确的虚拟主机,再根据配置进行转发。其中的ProxyPass的第一个参数和ProxyPassReserve的第一个参数都是过滤规则。具体可参见后面的补充知识点1。

补充知识点:

1、 ProxyPass与ProxyPassReverse及ProxyPassMatch的概述

2、什么是跨域?怎么解决跨域问题?

展开阅读全文

没有更多推荐了,返回首页