龙空技术网

CentOS7 - 配置基于名称的虚拟主机

运维阁 99

前言:

现在同学们对“centos7机器名称”可能比较关切,同学们都想要学习一些“centos7机器名称”的相关文章。那么小编也在网络上搜集了一些对于“centos7机器名称””的相关资讯,希望朋友们能喜欢,各位老铁们一起来学习一下吧!

配置基于名称的虚拟主机

您可能还记得我们在第8章“管理域和DNS”中围绕DNS的讨论,用户的浏览器需要先将网站的主机名转换为其IP地址,然后才能连接并检索所需的Web内容。 您可能还记得,这不一定是一对一映射 - 多个站点可以解析为相同的IP地址。 Apache非常灵活,因此同一服务器可以通过称为基于名称的虚拟主机配置为多个站点提供服务.

此配方教您如何设置基于名称的虚拟主机。 每个站点都有自己的配置(通常保存在自己的配置文件中以便更好地组织)。 根据请求中显示的站点名称,Apache然后从可用配置中进行选择,以正确地为所需站点提供服务.

准备

此配方要求CentOS系统具有有效的网络连接并运行Apache,如上一个配方中所述。 因为我们将通过域名而不是IP地址连接到服务器,所以您需要通过更新DNS记录或首先向/ etc / hosts添加条目来确保名称解析为正确的地址。 通过使用root帐户登录或使用sudo,还需要管理权限.

怎么做

请按照以下步骤设置基于名称的虚拟主机:

使用文本编辑器打开Apache的配置文件:

vi /etc/httpd/conf/httpd.conf
在文件的底部,添加以下“包含”选项:
Include sites/*.conf
保存更新的配置并关闭文件。创建配置中引用的站点目录:
mkdir /etc/httpd/sites
在第一个站点的新站点目录中创建虚拟主机配置文件:
vi /etc/httpd/sites/
将以下代码添加到站点的配置文件中:
 <VirtualHost *:80> ServerName  DocumentRoot "/var/www/example.com/www/html"  <IfModule proxy_fcgi_module> ProxyPassMatch ^/(.*\.php)$  fcgi://127.0.0.1:9000/var/www/example.com/www/html/$1 </IfModule> </VirtualHost>

保存更改并关闭文件.

创建配置选项中引用的站点文档根目录:

mkdir -p /var/www/example.com/www/html
对将要托管的每个其他站点重复步骤4-8,使用主机或域名为每个站点创建唯一的目录路径。重新启动HTTP服务器以使配置更改生效:
systemctl restart httpd.service
工作原理

配置Apache以服务多个域是为每个站点创建VirtualHostdefinition的问题。 此配方在/ etc / httpd / sites目录下的自己的文件中组织定义,然后使用Include指令在主httpd.confconfiguration文件中引用它们:

Include sites/*.conf

您如何组织您的网站取决于您。 此配方使用一种方案,其中每个站点都是从基于域名的路径提供的,后面是以/ var / www为根的子域。 路径/var/www/example.com/www/html包含网站上的文件。 web.example.com上该站点的文件将放在/var/www/example.com/web/html中。 html目录只是该站点的Web可访问根目录。 通过包含它而不是直接从example.com/www中提供文件,我们可以将任何支持文件放在root之外,这些文件不是直接访问的(例如,带有PHP网站配置选项的脚本),但是 仍然保持他们与网站的其余文件组织.

注意

命名可公开访问的目录root html是一种惯例,但是我发现它不仅仅是HTML文件而已经过时了。 我经常将自己的根目录命名为public或public_files,并相应地更新它们在配置文件中的引用.

虚拟主机的每个定义都包含在VirtualHost块中。 该开口提供服务器正在侦听的接口的IP地址,后跟端口号。 *表示该定义适用于所有系统的接口,80表示HTTP流量的默认端口:

<VirtualHost *:80>

假定未在定义中显式出现的选项具有与主配置中相同的设置,因此至少需要定义ServerName和DocumentRootoptions以使定义唯一。 如果您正在使用PHP,那么您还需要提供ProxyPassMatch选项,以便将请求映射到正确的PHP文件:

 <VirtualHost *:80> ServerName  DocumentRoot "/var/www/example.com/www/html" <IfModule proxy_fcgi_module> ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/  example.com/www/html/$1 </IfModule> </VirtualHost>
注意

加载虚拟主机定义的顺序有点重要; 加载的第一个用作默认值,并将处理与任何虚拟主机定义都不匹配的任何请求。 以数字方式对配置文件进行前缀(例如10-)可以帮助您控制加载顺序.

每个请求都记录到/ var / log / httpd / access_log,并将任何错误记录到error_log。 当然,如果您只为一个站点提供服务,这很好。 但是,在为多个站点提供服务时,您可能会发现将日志条目路由到不同站点的不同文件是有益的。 CustomLog选项命名一个写入访问和常规日志消息的文件以及条目的格式。 ErrorLog指定写入错误消息的文件。 这两个选项都可以出现在虚拟主机的配置中:

 <VirtualHost *:80> ServerName  DocumentRoot "/var/www/example.com/www/html" CustomLog "/var/log/httpd/example.com/www/access_log" "%h %u  %t "%r" %>s %b" ErrorLog "/var/log/httpd/example.com/www/error_log" <IfModule proxy_fcgi_module> ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/ example.com/www/html/$1 </IfModule> </VirtualHost>

CustomLog的第二个参数可以是格式字符串本身,也可以是表示格式字符串的别名。 格式字符串只是定义记录的消息中包含的详细信息。

有许多格式说明符可用,它们都记录在Apache HTTPd Server的文档中。 以下是您可能使用的一些较常见的列表,您可以在在线查找完整列表。:

%b: 这是返回给客户端的响应大小(以字节为单位)%D: 这是以毫秒为单位处理请求所花费的时间(%T表示以秒为单位的时间)%h: 这是请求系统的IP或主机名%H: 这是用于发出请求的协议%m: 这是用于发出请求的方法%q: 这是请求的URI的查询字符串部分%r: 这是请求的第一行%>s: 这是请求的最终状态代码(%s表示重定向的请求的初始状态)%t: 这是收到请求的时间%u: 这是收到请求时经过身份验证的请求的用户名%v: 这是处理请求的服务器(ServerName)的名称

LogFormat选项使用别名命名格式字符串。 例如,httpd.conf文件使用LogFormat来定义名为common和combined的字符串,这些字符串可以在别处使用。 为您的虚拟主机日志记录定义自己的别名是个好主意,并在各个配置文件中使用别名,而不是分散隐藏的格式字符串。 在httpd.conf中,只需在与公共和组合条目相同的区域中添加自定义LogFormat条目:

LogFormat "%v %h %u %t "%r" %>s %b" vhostcommon

然后,您可以在站点的配置文件中引用别名:

CustomLog "/var/www/example.com/www/logs/access_log" vhostcommon

进行更改后,重新启动Apache以使配置生效。

无论目的地是什么,请确保安全上下文允许Apache运行的所有权/权限写入日志文件。 如果日志位于/ var / log / httpd下,则创建必要的子目录就足够了。 服务器将在启动时自行创建日志文件:

mkidr -p /var/log/httpd/example.com/www

但是,如果您希望将日志保留在另一个目录(例如/var/www/example.com/www/logs)中,则可能会阻止服务器写入它们。 无论文件系统权限是否正常,SELinux都会启用。 要解决此问题,请首先使用ls -Z验证安全上下文:

ls -Z /var/www/example.com/www | grep logsdrwxr-xr-x. apache apache unconfined_u:object_r:httpd_sys_content_ t:s0 logs

在这种情况下,logs目录由Apache运行的apache用户拥有,目录上的权限应该允许服务器创建日志文件。 但是,我们还可以看到该目录已继承标识,该标签将其标识为httpd_sys_content_t指示的Web内容。 要解决此问题,我们需要使用chcon重新标记目录以进行日志记录:

chcon -Rv --type=httpd_log_t /var/www/example.com/www/logs
See also

Refer to the following resources for more information on working with virtual hosting:

Apache Virtual Host documentation ()Apache mod_log_config documentation ()VirtualHost examples ()CentOS Wiki: SELinux HowTo ()

标签: #centos7机器名称 #apache虚拟主机权限 #centosapache配置域名 #apache虚拟主机配置别名 #apachevirtualhost