来自 电脑知识 2019-12-23 03:53 的文章
当前位置: 威尼斯国际官方网站 > 电脑知识 > 正文

apache虚构主机的配置指南,七个HTTPS公约的设想主

在apache的环境下该如何配置多个HTTPS虚拟主机呢?利用的原理的都是同一个,也就是SNI。基于域名的虚拟主机,即共享同一个IP地址和端口的HTTPS虚拟主机。

一、检查apache虚拟主机模块

SNI—服务器名称指示,是一个TLS的扩展,它使得启用SSL的基于域名的虚拟主机的配置成为可能。打破了每个HTTPS的虚拟主机需要一个IP地址的要求。因此,成本大大降低,因为所有的HTTPS虚拟主机可以共享相同的IP地址和端口,使HTTPS Web服务的更简单。

apache要配置虚拟主机,就需要先查看apache是否编译vhost_alias_module模块。当然apache默认是已经编译该模块的,我们可以通过以下命令查看是否已经编译模块,如下:

在apache环境下,需要使用mod_gnutls来实现同一个IP上配置多个HTTPS主机。下面来看看实现过程:

/usr/local/apache2/bin/apachectl -M

mod_gnutls的网址参见:

图片 1

  1. 安装mod_gnutls

二、开启apache虚拟主机功能

复制代码 代码如下:

要开启apache虚拟主机功能,我们需要修改apache配置文件http.conf。打开apache的安装目录,找到httpd.conf文件,去掉Include conf/extra/httpd-vhosts.conf前的#。如下:

# yum install httpd-devel gnutls-devel
# wget
# tar -xjvf mod_gnutls-0.2.0.tar.bz2
# cd mod_gnutls-0.2.0
# ./configure --prefix=/usr
# make

vi httpd.conf

如果要安装高版本的gnutls的话,需要先安装相对应的依赖包libnettle gmplib。下载地址:  ftp://ftp.gnutls.org/gcrypt/gnutls
mod_gnutls模块依赖dhfile和rsafile文件.

图片 2

  1. 配置httpd.conf

该行的作用是,把conf/extra/目录下的httpd-vhosts.conf文件导入虚拟主机配置中。

复制代码 代码如下:

图片 3

Listen 10.1.1.22:443
LoadModule gnutls_module modules/mod_gnutls.so
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
GnuTLSCache dbm "/var/cache/mod_gnutls_cache"
GnuTLSCacheTimeout 300
NameVirtualHost 10.1.1.22:443

下面我们所有有关虚拟主机的配置都在httpd-vhosts.conf文件中进行。如下:

创建回话缓存目录

图片 4

复制代码 代码如下:

apache虚拟主机配置主要分为三种,分别是根据IP地址、根据端口、根据域名。

# mkdir -m 0700 /var/cache/mod_gnutls_cache
# chown nobody.nobody /var/cache/mod_gnutls_cache

这三种虚拟主机,我们主要讲解基于域名的虚拟主机。基于IP与基于端口在生产环境中使用的比较少,我们在此只大致讲解其配置。

  1. 配置虚拟主机

注意在此之前,我们还要修改httpd.conf文件把有关目录访问权限的配置选项去掉。否则在访问虚拟主机时,会报403错误。如下:

复制代码 代码如下:

图片 5

<VirtualHost 10.1.1.22:443>
    ServerName www.jb51.net:443
    GnuTLSEnable on
    GnuTLSCertificateFile ./ssl/www.jb51.net.public.cer
    GnuTLSKeyFile ./ssl/www.jb51.net.private.key
    DocumentRoot "/data/wwwroot/www.jb51.net/webroot"
</VirtualHost>

httpd.conf文件去掉Order deny,allow和Deny from all行,修改如下:

<VirtualHost 10.1.1.22:443>
    ServerName www.jb51.net:443
    GnuTLSEnable on
    GnuTLSCertificateFile ./ssl/www.jb51.net.public.cer
    GnuTLSKeyFile ./ssl/www.jb51.net.private.key
    DocumentRoot "/data/wwwroot/www.jb51.net/webroot"
</VirtualHost>

<Directory />

这样访问每个虚拟主机都正常。

Options FollowSymLinks

您可能感兴趣的文章:

  • apache虚拟主机三种配置方式小结
  • 在Apache服务器上添加虚拟主机功能的方法
  • 给Apache虚拟主机增加端口的方法
  • apache服务器一个ip(如:127.0.0.1)和多个域名(虚拟主机)的绑定
  • apache虚拟主机的配置指南
  • apache配置虚拟主机的方法详解
  • apache虚拟主机配置一例
  • 13个实用的Apache Rewrite重写规则
  • Apache伪静态Rewrite详解
  • Apache Rewrite实现URL的301跳转和域名跳转
  • Apache Rewrite url重定向功能的简单配置
  • 用ISAPI_Rewrite让IIS也支持如Apache下.htaccess的URL重写
  • Apache中Virtual Host虚拟主机配置及rewrite参数说明

AllowOverride None

</Directory>

图片 6

值得注意的是,当我们为apache启用虚拟主机之后,那么所有的用户请求都会交由对应的虚拟主机来处理。如果apache找不到对应的虚拟主机,则会把该请求交给配置文件中排在最前面的虚拟主机来处理。

同时如果配置基于域名的虚拟主机,我们必须要启用NameVirtualHost *:80行。如下:

图片 7

三、httpd-vhosts.conf文件详解

httpd-vhosts.conf文件内容大致如下:

NameVirtualHost *:80

<VirtualHost *:80>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot "@@ServerRoot@@/docs/dummy-host.example.com"

ServerName dummy-host.example.com

ServerAlias www.dummy-host.example.com

ErrorLog "logs/dummy-host.example.com-error_log"

CustomLog "logs/dummy-host.example.com-access_log" common

</VirtualHost>

NameVirtualHost指定虚拟主机所使用的IP地址或域名,但是最好是IP地址。使用基于域名的虚拟主机时,NameVirtualHost是必要的指令。NameVirtualHost可以定义多个。所有符合NameVirtualHost或<VirtualHost>标签定义的请求,都会被作为虚拟主机处理,而主服务器将不理会。NameVirtualHost定义了而<VirtualHost>标签没有定义的的请求,服务器会找不到相应的虚拟主机而将无法处理。所以每个NameVirtualHost定义的参数至少要有一个<VirtualHost>相匹配。

如果设置NameVirtualHost或<VirtualHost>为*:80的话,所有针对80端口的请求,都会被虚拟主机处理,请求会根据域名指向某个虚拟主机。如果有来自80端口的请求,而所请求的域名没有被配置为虚拟主机,那将指向第一个虚拟主机。这样主服务器将无法收到来自80端口的任何请求。为此也要为主服务器配置一个虚拟主机。

想要配置基于域名的虚拟主机,则必须使用NameVirtualHost指令,该指令用于指定对于当前服务器的哪些IP地址和端口可以接受虚拟主机的相关访问请求,而且这些IP地址和端口必须包含在服务器监听的地址和端口之中。

如果你希望用到服务器上所有的IP地址,你可以使用指令:NameVirtualHost *。

如果apache监听了多个端口(例如:常规的80端口和SSL的443端口),那么必须在NameVirtualHost指令中指定一个端口,例如:NameVirtualHost *:80。

我们可以使用VirtualHost配置段来添加一个虚拟主机,如果有多个虚拟主机,我们可以添加多个这样的配置段。

在VirtualHost配置段中,我们可以使用配置指令来对该虚拟主机进行设置,除了诸如创建进程等少数特殊的指令外,几乎所有的指令都可以出现在VirtualHost配置段中。如果没有设置某些指令,则该虚拟主机将采用主服务器范围内相同的全局指令作为默认设置。当然,VirtualHost配置段至少应该包含ServerName和DocumentRoot这两个配置指令,用以指定虚拟主机的域名和站点文档目录的路径。如下:

<VirtualHost *:80>

DocumentRoot "/www/a.ilanni.com"

ServerName a.ilanni.com

</VirtualHost>

ServerAdmin管理员邮箱。

DocumentRoot网站目录(注意:如果网站目录中的路径有空格,请在路径两端加上双引号)。

ServerName要绑定的域名(必填)。

ServerAlias要绑定的虚拟主机的别名。(可选,如果多个域名,中间以空格分隔,如果没有,则去掉该行)。支持*,?两种通配符,比如*.abc.com,表示任意一个abc.com的二级域名都可访问。

CustomLog用户日志文件(可选,如果不需要,则去掉该行)。

ErrorLog 错误日志(可选,如果不需要,则去掉该行)。

四、根据IP配置虚拟主机

apache基于IP虚拟主机在实际的生产环境中使用比较少,主要是使用在单网卡多IP的情况下。

我们要测试此功能,需要给服务器的网卡增加一个IP。首先查看服务器的IP地址,如下:

ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d: -f2

ifconfig eth2|grep "inet addr"|awk '{print $2}'|sed 's/addr://g'

图片 8

可以看到目前服务器的IP是192.168.1.213,再增加一个IP地址为192.168.1.215。eth0网卡增加IP地址,可以通过网卡配置文件实现。如下:

cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0

cat /etc/sysconfig/network-scripts/ifcfg-eth0:0

/etc/init.d/network restart

ping 192.168.1.215

图片 9

IP地址增加完毕后,我们现在来修改虚拟主机的配置文件httpd-vhosts.conf。如下:

cat httpd-vhosts.conf|grep -v ^$|grep -v ^#

图片 10

httpd-vhosts.conf修改完毕后,我们需要检查该虚拟主机配置是否正确,使用-S命令。如下:

/etc/init.d/httpd –S

图片 11

通过上图可以看到该虚拟主机的配置是正确。

为虚拟主机192.168.1.215创建主页文件,如下:

mkdir /www/192.168.1.215

echo "this is web-server 192.168.1.215">/www/192.168.1.215/index.html

本文由威尼斯国际官方网站发布于电脑知识,转载请注明出处:apache虚构主机的配置指南,七个HTTPS公约的设想主

关键词: