一个(虚拟)主机(服务器)配置多个站点的方法,多个域名同IP如何实现空间充分利用?

前言:

从一开始接触服务器,主机等,就觉得如果一个网站一个服务器主机的话,那么像百度,腾讯等这么大公司那岂不是数不尽的服务器了。一直也很好奇到底是怎么回事,但没有认真总结过到底是如何实现的。


 现在因为项目需求,又不想再浪费钱。所有又想到了这个问题,就自己试着到底是怎么一回事。


现在的服务器--我总结来看的话,可以分为三类。

             一:服务器(Linux系统等)

            二:虚拟主机(独立IP,可访问)

            三:共享虚拟主机(共享IP,不可访问)

对于这三种来说,各自有优点缺点。但是就自主性来说,肯定是第一类最好(当然价格,是吧!)

再自己尝试前,我在百度上浏览了很多类似的主题--多站点配置,同个IP实现资源的充分利用等。但是太杂太乱,又都有一定的前提要求。并不是都适用。下面,我分分类,看看都哪些是你正在寻找的。或许对你有用。


根据我对服务器的分类来讲吧:

 第一类:

自己拥有对服务器的一切操作。包括对服务器的配置等。无论是 Nginx,IIS还是Apache,出现最多的都是对服务器虚拟主机进行操作。对应的文件httpd.conf 需要打开

打开Apache的安装目录,找到httpd.conf文件,分别去掉下面两行文字前面的#号。  
LoadModule vhost_alias_module modules/mod_vhost_alias.so

我们都知道配置文件叫httpd.conf,在这里面可以设置很多东西,如访问文件夹的权限,指定端口,限定哪些ip可以访问网站等等,我们要在一台服务器的apache下搭建多个网站要用到另一个文件叫httpd-vhosts.conf,其实配置起来很简单这个文件里面有例子,复制一段模仿着建一个虚拟主机(一个虚拟主机就是一个网站),虚拟主机中要配置ip,域名,日志文件名等等,要注意的一点是配置完成后,需要在httpd.conf中加下面这句话

Include "conf/extra/httpd-vhosts.conf"

然后如下代码:

<VirtualHost *:80>
    DocumentRoot "E:/wamp/www/"
    ServerName localhost
></VirtualHost>


<VirtualHost *:80>
    DocumentRoot "E:/wamp/www/laravel5.2/public"
    ServerName 127.0.0.1
</VirtualHost

加完这句话之后当服务器被访问时apache等接收到请求,就会根据请求的域名去虚拟主机中查找是否有匹配的网站,如果有就访问这个网站,如果没有就访问默认的的网站。


第二类:

虚拟主机-如果对虚拟主机不清楚的,可以自行百度。其实第一步所做的就是就是实现空间资源的充分利用,从而节约成本。这也是虚拟主机存在的最大的意义。所以,我们没有办法想第一类那行进行服务器配置文件的具体的修改操作。所以上面的方法并不适用于适用虚拟主机的人。那么这个时候就想到了.htaccess文件。

                                            .htaccess  

尽管.htaccess 只是一个文件,但它可以更改服务器的设置,允许你做许多不同的事情,最流行的功能是您可以创建自定义的“404 error”页面。.htaccess 并不难于使用,归根结底,它只是在一个text文档中添加几条简单的指令而已。

首先,你要判断主机支持它

这可能很难用简单的答案来回答。许多主机支持.htaccess,但实际上并不会特别声明,许多其他类型的主机有能力 但并不允许他们的用户使用. htaccess。一般来说,如果你的主机使用Unix或Linux系统,或任何版本的Apache网络服务器,从理论上都是支持.htaccess的,尽管你的主机服务商可能不允许你使用它。

判断你的主机是否允许.htaccess,一个标志很好的是它是否支持文件夹密码保护。为达到此功能,主机服务商需要 使用.htaccess(当然,少数情况下他们虽提供密码保护功能,但却并不允许你使用.htaccess)。如果你不确定自己的主机是否支持. htaccess,最好的办法是上传你自己的.htaccess文件看看是否有用,或者直接发送e-mail向你的主机服务商咨询,或者是使用phpinfo()函数判断是否包含LoadModule等。

Apache系统中的.htaccess文件(或者”分布式配置文件”提供了针对目录改变配置的方法,即,在一个特定 的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的 AllowOverride指令来设置。

子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。

.htaccess必须以ASCII模式上传,最好将其权限设置为644更多.htaccess文件说明

 如何使用.htaccess呢?摘自:利用.htaccess绑定子域名到子目录(亲测阿里云虚拟主机可用)

RewriteEngine On
RewriteBase /
# 绑定 tec.tson.com 到子目录 tec
RewriteCond %{HTTP_HOST} ^tec\.tson\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/tec/
RewriteRule ^(.*)$ tec/$1?Rewrite [L,QSA]
#可以绑定多个 只需重复上三行代码并更改一下域名、目录名 就好了
</IfModule>

把上面的代码生成的.htaccess文件放到网站的根目录下就能正常访问了,但注意一个问题:如果你先前的网站里面也用到.htaccess文件的话,一定要把这些代码加到原来的.htaccess文件最后面。也有很多程序会自己生成.htaccess文件,大家一定要注意。

我在用这个方法来做自己的子站的时候就造成自己的网站大约在半个小时处于无法访问状态,好在当时是在深夜,不知对大家使用网站造成影响没有。

现在你的子域名应该可以访问了。但还可以更完美,下面的.htaccess文件可以让我们用路径访问时直接跳转到二级域名。将.htaccess文件放到子目录下:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#只许绑定的域名访问
RewriteCond %{HTTP_HOST} !^tec\.tson\.com$ [NC]
RewriteRule (.*) http://tec.tson.com/$1 [L,R=301]
#对绑定目录下与 同名的目录的处理
RewriteCond %{REQUEST_URI} ^\/tec\/ [NC]
RewriteCond %{QUERY_STRING} !^(.*)?Rewrite
RewriteRule ^(.*)$ /%{REQUEST_URI}/%{REQUEST_URI}/$1?Rewrite [L,QSA]
</IfModule>

第三类:

就是使用的共享IP主机。可以尝试下第二类的方法。但是也可以用URL转发来解决。就是URL的转发重定向到另一域名的子目录下面。这类的服务器多数是开发用,实际运营中基本上不使用。存在太多的风险。


另外:关于更多

Apache服务器等下简化URL,去掉index.php的方法

Tp5—隐藏public的方法(修改Apache服务器的配置实现)

关于首页能打开,而其他页面404错误,但使用index.php后就能打开的问题

详细讲解了。

猜你喜欢

转载自blog.csdn.net/qq_33182756/article/details/80032320