apache虚拟主机部署


第1章   Apache虚拟主机的部署

Apr(可移植运行库)主要实现为上层的应用提供一个可以跨多操作系统底层的接口库。

Apr接口库使用的目的是对应其他的服务的接口(api(程序接口))来使用,比如说php、tomcat、nginx。

Pcre是一个perl库,是一个正则表达式库,兼容perl的所有正则表达式,匹配字符使用的正则表达式,主要用于文本处理。

在一台服务器上发布多个网站,也称为部署多个虚拟主机,虚拟主机的部署方法:

1. 单IP多个端口

2. 多ip单端口

3. 单个ip单个端口不同域名(应用广泛)

启动apache警告

 

没有开启80端口的域名监听,解决方法:

Echo “ServerName localhost:80” >> /usr/local/apache/conf/httpd.conf

代表开启监听本地域名localhost

 

 

其中基于同一端口不同域名的方式在企业中得到广泛的使用和应用,如下为基于一个端口不同域名,在一台Apache WEB服务器上部署多个网站,步骤如下:

(1)     创建虚拟主机配置文件httpd-vhosts.conf,该文件默认已存在,只需去掉httpd.conf配置文件中#号即可,如图10-3所示:

 

# Virtual hosts

Include conf/extra/httpd-vhosts.conf

#引用vhosts文件

<VirtualHost *:80>

    DocumentRoot "/usr/local/apache/htdocs/jf1"

    ServerName www.jf1.com

    ServerAlias  www.jf100.com www.jf1000.com www.jf10000.com

    ErrorLog "logs/jf1.com-error_log"

    CustomLog "logs/jf1.com-access_log" common

</VirtualHost>

 

<VirtualHost *:80>

    DocumentRoot "/usr/local/apache/htdocs/jf2"

    ServerName www.jf2.com

    ErrorLog "logs/jf2.example.com-error_log"

    CustomLog "logs/jf2.example.com-access_log" common

</VirtualHost>

配置hosts文件

Windows:C:\Windows\System32\drivers\etc

 

 

 

 

 

 

Linux /etc/hosts的配置文件

 

 

Hosts文件的作用是配置本地解析域名的,假设本地主机要访问域名,Windows浏览器(首先访问缓存数据)或者Linux工具首先访问本地hosts,hosts文件里面写了ip和域名对应解析关系。

Httpd-vhosts.conf参数详解:

NameVirtualHost *:80     开启虚拟主机,并且监听本地所有网卡接口的80端口;

<VirtualHost *:80>                                                           虚拟主机配置起始;

    ServerAdmin support@jfedu.net                             管理员邮箱;

    DocumentRoot "/usr/local/apache2/htdocs/jf1"        该虚拟主机发布目录;

    ServerName www.jf1.com                                                虚拟主机完整域名;

    ErrorLog "logs/www.jf1.com_error_log"                      错误日志路径及文件名;

    CustomLog "logs/www.jf1.com_access_log" common  访问日志路径及文件名;

</VirtualHost>                                                                 虚拟主机配置结束。

设置项目的默认访问目录

<Directory "/test/jf1"> 

          Options Indexes MultiViews 

Options这个子句用来说明一些主要的设置,目前可以使用的设置有Indexes,Includes,FollowSymLinks,ExecCGI,MultiView,当然还有两个最简单的选择就是None和All。

  None是禁止所有选择,而All 允许上面的所有Options。一般我们主要关心的是Indexes 和FollowSymLinks。Indexes 是设定是否允许在目录下面没有index.html 的时候显示目录,而FollowSymLinks 决定是否可以通过符号连接跨越DocumentRoot。

          AllowOverride None 

 AllowOverride 定义是否允许各个目录用目录中的.htaccess(后面解释)覆盖这里设定的Options。它的选择有Options,FileInfo,AuthConfig,Limit 或者它们的组合,当然还有None 和All。

          Order allow,deny 

它有两种用法,即Order allow,deny 或者Order deny,allow。简单地说,它用来设置是先执行deny 还是先执行allow,例如,Order deny,allow 意味着先看deny 行,再看allow 行,这样如果deny from all 再allow from 202.112.58.0/24 后来的allow子句就会超越deny 而对202.112.58.x 打开访问。

          Allow from all 

这两个选项和Order 一起使用,Allow 允许某个地址来的连接请求,Deny 则禁止这个请求,例如在Order deny,allow 的情况下,Deny from all,Allow from 192.168.12.0/24 表示只有192.168.12.x 的用户可以访问这个目录。

          DirectoryIndex index.html

    配置默认的网页后缀

</Directory>

(2)     创建www.jf1.com及www.jf2.com发布目录,重启apache服务,并分别创建index.html页面:

mkdir  -p  /usr/local/apache2/htdocs/{jf1,jf2}/

/usr/local/apache2/bin/apachectl restart

echo  "<h1> www.jf1.com  Pages</h1>" >/usr/local/apache2/htdocs/jf1/index.html

echo  "<h1> www.jf2.com  Pages</h1>" >/usr/local/apache2/htdocs/jf2/index.html

(3)     Windows客户端设置Hosts映射,将www.jf1.comwww.jf2.com与192.168.111.131 IP进行映射绑定,映射的目的将域名跟IP进行绑定,在浏览器可以输入域名,不需要输入IP地址,绑定方法是在“C:\Windows\System32\drivers\etc”文件夹中,使用记事本编辑hosts文件,加入如下代码,如图10-4所示:

192.168.111.131  www.jf1.com

192.168.111.131  www.jf2.com

 

图10-4 Windows主机Hosts配置

(4)     浏览器访问www.jf1.com、www.jf2.com如图10-5(a)、10-5(b)所示,至此Apache基于多域名虚拟主机配置完毕,如果还需添加虚拟主机,直接拷贝其中一个虚拟主机配置、修改WEB发布目录即可:

图10-5(a) www.jf1.com网站返回内容

图10-5(b) www.jf2.com网站返回内容

Apache配置文件详解

Apache的配置文件是Apache WEB难点,读者需要掌握配置文件中每个参数的含义,才能理解并在日常运维中去解决Apache遇到的故障,如下为Apache配置文件详解:

1)Global Environment---全局环境配置,决定Apache服务器的全局参数

2)Main server configuration---主服务配置,相当于是Apache中的默认Web站点,如果我们的服务器中只有一个站点,那么就只需在这里配置就可以了。

3)Virtual Hosts---虚拟主机,虚拟主机不能与Main Server主服务器共存,当启用了虚拟主机之后,Main Server就不能使用了

 

ServerTokens OS                                      显示服务器的版本和操作系统内核版本;在出现错误页的时候是否显示服务器操作系统的名称,ServerTokens Prod为不显示

ServerRoot  "/usr/local/apache2/"        Apache主配置目录;服务启动之后自动将目录改变为当前目录,在后面使用到的所有相对路径都是想对这个目录下

PidFile run/httpd.pid                         PidFile进程文件;这是系统识别一个进程的方法,系统中httpd进程可以有多个,但这个PID对应的进程是其他的父进程

Timeout 60                                            不论接收或发送,当持续连接等待超过60秒则该次连接就中断;服务器与客户端断开的时间

KeepAlive Off                                            关闭持续性的连接;(因为每次连接都得三次握手,如果是访问量不大,建议打开此项,如果网站访问量比较大关闭此项比较好),修改为:KeepAlive On 表示允许程序性联机

MaxKeepAliveRequests 100                    当KeepAlive设置为On的时候,该数值可以决定此次连接能够传输的最大传输数量;

KeepAliveTimeout 65                                  当KeepAlive设置为On的时候,该连接在最后一次传输后等待延迟的秒数;

<IfModule prefork.c>                              Prefork MPM引擎配置段;

StartServers      8                              默认启动Apache工作进程数;开始服务时启动8个进程,最小空闲5个进程,最多空闲20个进程。

MinSpareServers   5                                  最小空闲进程数;

MaxSpareServers   20                             最大空闲进程数;

ServerLimit      4096                             Apache服务器最多进程数;服务器允许配置进程数的上限

MaxClients      4096                             每秒支持的最大客户端并发;限制同一时刻客户端的最大连接请求数量超过的要进入等候队列。

MaxRequestsPerChild  4000                  每个进程能处理的最大请求数;每个进程生存期内允许服务的最大请求数量,0表示永不结束

</IfModule>

<IfModule worker.c>                                  Worker MPM引擎配置段;

StartServers        8                               默认启动Apache工作进程数;

MaxClients         4000                           每秒支持的最大客户端并发;

MinSpareThreads     25                            最小空闲线程数;

MaxSpareThreads     75                           最小空闲线程数;

ThreadLimit                                           每个子进程可能配置的线程上限

ThreadsPerChild     75                       每个进程启动的线程数;

MaxRequestsPerChild  0                     每个进程能处理的最大请求数,0表示无限制;

</IfModule>

 

为Apache配置线程访问,即每对WEB服务访问启动一个线程,这样对内存占用率比较小。

ServerLimit服务器允许配置进程数的上限。

ThreadLimit每个子进程可能配置的线程上限

StartServers启动两个httpd进程,

MaxClients同时最多能发起250个访问,超过的要进入队列等待,其大小有ServerLimit和ThreadsPerChild的乘积决定

ThreadsPerChild每个子进程生存期间常驻执行线程数,子线程建立之后将不再增加

MaxRequestsPerChild每个进程启动的最大线程数,如达到限制数时进程将结束,如置为0则子线程永不结束

LoadModule  mod_version.so               静态加载apache相关模块;

ServerAdmin support@jfedu.net            管理员邮箱,网站异常,错误信息会发生至该邮箱;

Listen 80                                               监听的端口,如有多块网卡,默认监听所有网卡

123 150 LoadModule auth_basic_module modules/mod_auth_basic.so

......

201 LoadModule version_module modules/mod_version.so   启动时加载的模块 mod_access已经更名为mod_authz_host

Include conf.d/*.conf                                                                     加载的配置文件

DocumentRoot   "/usr/local/apache2/htdocs/"  Apache网站默认发布目录;

User apache

Group apache                         启动服务后转换的身份,在启动服务时通常以root身份,然后转换身份,这样增加系统安全

ServerName www.example.com:80                    默认是不需要指定的,服务器通过名字解析过程来获得自己的名字,但如果解析有问题(如反向解析不正确),或者没有DNS名字,也可以在这里指定IP地址,当这项不正确的时候服务器不能正常启动。前面启动Apache时候提示正在启动 httpd:httpd: apr_sockaddr_info_get() failed forjustin httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1forServerName,解决方法就是启动该项把www.example.com:80修改为自己的域名或者直接修改为localhost

 

<Directory "/data/webapps/www1">     设置/data/webapps/www1目录权限;

    AllowOverride All

    Options -Indexes FollowSymLinks

    Order allow,deny

    Allow from all

</Directory>

AllowOverride                                      设置为None时,目录中.htaccess 文件将被完全忽略,当指令设置为All时,.htaccess文件生效;.htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。

Options -Indexes FollowSymLinks             禁止浏览目录,去掉”-“,表示浏览目录,常用于下载站点;

Order    allow,deny                              默认情况下禁止所有客户机访问;

Order   deny,allow                             默认情况下允许所有客户机访问;

Allow   from all                                允许所有客户机访问。

DirectoryIndex index.html index.html.var              指定所要访问的主页的默认主页名字,默认首页文件名为index.html

AccessFileName .htaccess            定义每个目录下的访问控制文件名,缺省为.htaccess

TypesConfig /etc/mime.types             用于设置保存有不同MIME类型数据的文件名

DefaultType text/plain           默认的网页的类型

ErrorLog logs/error_log      错误日志存放的位置

LogLevel warn                  Apache日志的级别

 

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent     定义了日志的格式,并用不同的代号表示

第1章   Apache虚拟主机的部署

Apr(可移植运行库)主要实现为上层的应用提供一个可以跨多操作系统底层的接口库。

Apr接口库使用的目的是对应其他的服务的接口(api(程序接口))来使用,比如说php、tomcat、nginx。

Pcre是一个perl库,是一个正则表达式库,兼容perl的所有正则表达式,匹配字符使用的正则表达式,主要用于文本处理。

在一台服务器上发布多个网站,也称为部署多个虚拟主机,虚拟主机的部署方法:

1. 单IP多个端口

2. 多ip单端口

3. 单个ip单个端口不同域名(应用广泛)

启动apache警告

 

没有开启80端口的域名监听,解决方法:

Echo “ServerName localhost:80” >> /usr/local/apache/conf/httpd.conf

代表开启监听本地域名localhost

 

 

其中基于同一端口不同域名的方式在企业中得到广泛的使用和应用,如下为基于一个端口不同域名,在一台Apache WEB服务器上部署多个网站,步骤如下:

(1)     创建虚拟主机配置文件httpd-vhosts.conf,该文件默认已存在,只需去掉httpd.conf配置文件中#号即可,如图10-3所示:

 

# Virtual hosts

Include conf/extra/httpd-vhosts.conf

#引用vhosts文件

<VirtualHost *:80>

    DocumentRoot "/usr/local/apache/htdocs/jf1"

    ServerName www.jf1.com

    ServerAlias  www.jf100.com www.jf1000.com www.jf10000.com

    ErrorLog "logs/jf1.com-error_log"

    CustomLog "logs/jf1.com-access_log" common

</VirtualHost>

 

<VirtualHost *:80>

    DocumentRoot "/usr/local/apache/htdocs/jf2"

    ServerName www.jf2.com

    ErrorLog "logs/jf2.example.com-error_log"

    CustomLog "logs/jf2.example.com-access_log" common

</VirtualHost>

配置hosts文件

Windows:C:\Windows\System32\drivers\etc

 

 

 

 

 

 

Linux /etc/hosts的配置文件

 

 

Hosts文件的作用是配置本地解析域名的,假设本地主机要访问域名,Windows浏览器(首先访问缓存数据)或者Linux工具首先访问本地hosts,hosts文件里面写了ip和域名对应解析关系。

Httpd-vhosts.conf参数详解:

NameVirtualHost *:80     开启虚拟主机,并且监听本地所有网卡接口的80端口;

<VirtualHost *:80>                                                           虚拟主机配置起始;

    ServerAdmin support@jfedu.net                             管理员邮箱;

    DocumentRoot "/usr/local/apache2/htdocs/jf1"        该虚拟主机发布目录;

    ServerName www.jf1.com                                                虚拟主机完整域名;

    ErrorLog "logs/www.jf1.com_error_log"                      错误日志路径及文件名;

    CustomLog "logs/www.jf1.com_access_log" common  访问日志路径及文件名;

</VirtualHost>                                                                 虚拟主机配置结束。

设置项目的默认访问目录

<Directory "/test/jf1"> 

          Options Indexes MultiViews 

Options这个子句用来说明一些主要的设置,目前可以使用的设置有Indexes,Includes,FollowSymLinks,ExecCGI,MultiView,当然还有两个最简单的选择就是None和All。

  None是禁止所有选择,而All 允许上面的所有Options。一般我们主要关心的是Indexes 和FollowSymLinks。Indexes 是设定是否允许在目录下面没有index.html 的时候显示目录,而FollowSymLinks 决定是否可以通过符号连接跨越DocumentRoot。

          AllowOverride None 

 AllowOverride 定义是否允许各个目录用目录中的.htaccess(后面解释)覆盖这里设定的Options。它的选择有Options,FileInfo,AuthConfig,Limit 或者它们的组合,当然还有None 和All。

          Order allow,deny 

它有两种用法,即Order allow,deny 或者Order deny,allow。简单地说,它用来设置是先执行deny 还是先执行allow,例如,Order deny,allow 意味着先看deny 行,再看allow 行,这样如果deny from all 再allow from 202.112.58.0/24 后来的allow子句就会超越deny 而对202.112.58.x 打开访问。

          Allow from all 

这两个选项和Order 一起使用,Allow 允许某个地址来的连接请求,Deny 则禁止这个请求,例如在Order deny,allow 的情况下,Deny from all,Allow from 192.168.12.0/24 表示只有192.168.12.x 的用户可以访问这个目录。

          DirectoryIndex index.html

    配置默认的网页后缀

</Directory>

(2)     创建www.jf1.com及www.jf2.com发布目录,重启apache服务,并分别创建index.html页面:

mkdir  -p  /usr/local/apache2/htdocs/{jf1,jf2}/

/usr/local/apache2/bin/apachectl restart

echo  "<h1> www.jf1.com  Pages</h1>" >/usr/local/apache2/htdocs/jf1/index.html

echo  "<h1> www.jf2.com  Pages</h1>" >/usr/local/apache2/htdocs/jf2/index.html

(3)     Windows客户端设置Hosts映射,将www.jf1.comwww.jf2.com与192.168.111.131 IP进行映射绑定,映射的目的将域名跟IP进行绑定,在浏览器可以输入域名,不需要输入IP地址,绑定方法是在“C:\Windows\System32\drivers\etc”文件夹中,使用记事本编辑hosts文件,加入如下代码,如图10-4所示:

192.168.111.131  www.jf1.com

192.168.111.131  www.jf2.com

 

图10-4 Windows主机Hosts配置

(4)     浏览器访问www.jf1.com、www.jf2.com如图10-5(a)、10-5(b)所示,至此Apache基于多域名虚拟主机配置完毕,如果还需添加虚拟主机,直接拷贝其中一个虚拟主机配置、修改WEB发布目录即可:

图10-5(a) www.jf1.com网站返回内容

图10-5(b) www.jf2.com网站返回内容

Apache配置文件详解

Apache的配置文件是Apache WEB难点,读者需要掌握配置文件中每个参数的含义,才能理解并在日常运维中去解决Apache遇到的故障,如下为Apache配置文件详解:

1)Global Environment---全局环境配置,决定Apache服务器的全局参数

2)Main server configuration---主服务配置,相当于是Apache中的默认Web站点,如果我们的服务器中只有一个站点,那么就只需在这里配置就可以了。

3)Virtual Hosts---虚拟主机,虚拟主机不能与Main Server主服务器共存,当启用了虚拟主机之后,Main Server就不能使用了

 

ServerTokens OS                                      显示服务器的版本和操作系统内核版本;在出现错误页的时候是否显示服务器操作系统的名称,ServerTokens Prod为不显示

ServerRoot  "/usr/local/apache2/"        Apache主配置目录;服务启动之后自动将目录改变为当前目录,在后面使用到的所有相对路径都是想对这个目录下

PidFile run/httpd.pid                         PidFile进程文件;这是系统识别一个进程的方法,系统中httpd进程可以有多个,但这个PID对应的进程是其他的父进程

Timeout 60                                            不论接收或发送,当持续连接等待超过60秒则该次连接就中断;服务器与客户端断开的时间

KeepAlive Off                                            关闭持续性的连接;(因为每次连接都得三次握手,如果是访问量不大,建议打开此项,如果网站访问量比较大关闭此项比较好),修改为:KeepAlive On 表示允许程序性联机

MaxKeepAliveRequests 100                    当KeepAlive设置为On的时候,该数值可以决定此次连接能够传输的最大传输数量;

KeepAliveTimeout 65                                  当KeepAlive设置为On的时候,该连接在最后一次传输后等待延迟的秒数;

<IfModule prefork.c>                              Prefork MPM引擎配置段;

StartServers      8                              默认启动Apache工作进程数;开始服务时启动8个进程,最小空闲5个进程,最多空闲20个进程。

MinSpareServers   5                                  最小空闲进程数;

MaxSpareServers   20                             最大空闲进程数;

ServerLimit      4096                             Apache服务器最多进程数;服务器允许配置进程数的上限

MaxClients      4096                             每秒支持的最大客户端并发;限制同一时刻客户端的最大连接请求数量超过的要进入等候队列。

MaxRequestsPerChild  4000                  每个进程能处理的最大请求数;每个进程生存期内允许服务的最大请求数量,0表示永不结束

</IfModule>

<IfModule worker.c>                                  Worker MPM引擎配置段;

StartServers        8                               默认启动Apache工作进程数;

MaxClients         4000                           每秒支持的最大客户端并发;

MinSpareThreads     25                            最小空闲线程数;

MaxSpareThreads     75                           最小空闲线程数;

ThreadLimit                                           每个子进程可能配置的线程上限

ThreadsPerChild     75                       每个进程启动的线程数;

MaxRequestsPerChild  0                     每个进程能处理的最大请求数,0表示无限制;

</IfModule>

 

为Apache配置线程访问,即每对WEB服务访问启动一个线程,这样对内存占用率比较小。

ServerLimit服务器允许配置进程数的上限。

ThreadLimit每个子进程可能配置的线程上限

StartServers启动两个httpd进程,

MaxClients同时最多能发起250个访问,超过的要进入队列等待,其大小有ServerLimit和ThreadsPerChild的乘积决定

ThreadsPerChild每个子进程生存期间常驻执行线程数,子线程建立之后将不再增加

MaxRequestsPerChild每个进程启动的最大线程数,如达到限制数时进程将结束,如置为0则子线程永不结束

LoadModule  mod_version.so               静态加载apache相关模块;

ServerAdmin support@jfedu.net            管理员邮箱,网站异常,错误信息会发生至该邮箱;

Listen 80                                               监听的端口,如有多块网卡,默认监听所有网卡

123 150 LoadModule auth_basic_module modules/mod_auth_basic.so

......

201 LoadModule version_module modules/mod_version.so   启动时加载的模块 mod_access已经更名为mod_authz_host

Include conf.d/*.conf                                                                     加载的配置文件

DocumentRoot   "/usr/local/apache2/htdocs/"  Apache网站默认发布目录;

User apache

Group apache                         启动服务后转换的身份,在启动服务时通常以root身份,然后转换身份,这样增加系统安全

ServerName www.example.com:80                    默认是不需要指定的,服务器通过名字解析过程来获得自己的名字,但如果解析有问题(如反向解析不正确),或者没有DNS名字,也可以在这里指定IP地址,当这项不正确的时候服务器不能正常启动。前面启动Apache时候提示正在启动 httpd:httpd: apr_sockaddr_info_get() failed forjustin httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1forServerName,解决方法就是启动该项把www.example.com:80修改为自己的域名或者直接修改为localhost

 

<Directory "/data/webapps/www1">     设置/data/webapps/www1目录权限;

    AllowOverride All

    Options -Indexes FollowSymLinks

    Order allow,deny

    Allow from all

</Directory>

AllowOverride                                      设置为None时,目录中.htaccess 文件将被完全忽略,当指令设置为All时,.htaccess文件生效;.htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。

Options -Indexes FollowSymLinks             禁止浏览目录,去掉”-“,表示浏览目录,常用于下载站点;

Order    allow,deny                              默认情况下禁止所有客户机访问;

Order   deny,allow                             默认情况下允许所有客户机访问;

Allow   from all                                允许所有客户机访问。

DirectoryIndex index.html index.html.var              指定所要访问的主页的默认主页名字,默认首页文件名为index.html

AccessFileName .htaccess            定义每个目录下的访问控制文件名,缺省为.htaccess

TypesConfig /etc/mime.types             用于设置保存有不同MIME类型数据的文件名

DefaultType text/plain           默认的网页的类型

ErrorLog logs/error_log      错误日志存放的位置

LogLevel warn                  Apache日志的级别

 

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent     定义了日志的格式,并用不同的代号表示


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM