apache-详细配置文件介绍+多种方式虚拟主机配置

grep -v "#" /etc/httpd/conf/httpd.conf

ServerTokens OS    返回Server :Apache/2.0.41(unix)

servertokens 指令

说明:配置HTTP服务器回应头,此指令控制了server回送给客户端的回应头域是否包含关于服务器OS类型和编译的模块描述信息

语法:

servertokens  major|minor|minimal|productonly|os|full

apache 启动后有9个进程,一个主进程 8个子进程主进程以root身份运行 进程ID在httpd.pid里  子进程以Apache进程运行,子进程是主进程产生的,

Apache  DSO

Apache是一个模块化设计的服务,核心只包含主要功能,扩展能通过模块实现,不同模块可以被静态编译进程序,也可以动态加载

查看模块 httpd -M

查看静态编译的程序的模块  httpd -l

如果加新的功能就需要重新编译,但是DSO不需要,可以通过Apache自带的apxs

apache MPM(multi process modules)

mpm负责实现网络监听,请求处理等功能,mpm有很多种,目的是为了在不同平台环境实现最优化的性能及稳性。

通过以下命令可以看出Apache所使用的MPM

httpd -l

httpd  -V   m默认是prefork

线程与进程的区别:

线程是指进程内的一个执行单元,也是进程内的可调度实体.

与进程的区别:

(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;

(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源

(3)线程是处理器调度的基本单位,但进程不是.

4)二者均可并发执行.

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。

进程和线程的区别在于:

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点

在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

prefork 与worker

prefork: prefork是非线程的,预生成进程型的MPM,使用多子进程,每个子进程只有一个线程,每个进程在某个时间只能维持一个连接,效率高,但内存占用量较大。。它适合于没有线程安全库,需要避免线程兼容性问题的系统

worker:是线程化多进程的MPM,每个子进程可以生成多个线程,每个线程处理一个请求。内存占用率小,适用于流量搞得http服务器。缺点,假如一个线程崩溃,整个进程连同其他任何其中线程一起死掉

Apache 中prefork的最大进程数是 在prefork的配置中

Apache三个配置

1 global 1 environment

2 main configuration

3 virtual host

first one class  1

全局配置影响整个Apache

ServerTokens OS    返回Server的信息 :Apache/2.0.41(unix)

ServerRoot         "/etc/httpd"   服务的主目录   不能更改,也即是安装目录

pidfile  run/httpd.pid    主进程id的号

timeout   连接时间。

keepalived  off 是否开启TCP连接请求(是否开启持久连接功能,即客户端练到服务器下载数据完成后任然保持连接状态)   开启效率较好,默认关闭

MaxKeepAliveRequests 100          一个连接服务的最多请求次数

KeepAliveTimeout 15   一个TCP连接两次请求时间的间,即连续连接多长时间

LISTEN 80  监听端口号,以及在那个ip上监听80端口

DSO

include   conf.d/*.conf  模块加载路径

user

group  Apache  指定Apache是以什么身份运行子进程

second   class  2

Apache缺省服务目录主配置

serveradmin  管理员邮件地址

servername 服务器域名,也就是网站的域名

UseCanonicalName Off   是否严格使用合格域名   如果使用虚拟主机,一定要关闭

DocumentRoot "/var/www/html"  根目录  主站点目录

<Directory  /var/www/html>   主站点目录访问控制  ,缺省配置

Options FollowSymLinks

AllowOverride None

Order?allow,deny

?Allow?from?all

</Directory>

Options:配置在特定目录使用哪些特性,常用的值和基本含义如下:

ExecCGI:?在该目录下允许执行CGI脚本。

FollowSymLinks:?在该目录下允许文件系统使用符号连接。

Indexes:?当用户访问该目录时,如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户。 一般不建议使用

SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。

AllowOverride  None:允许存在于.htaccess文件中的指令类型(.htaccess文件名是可以改变的,其文件名由AccessFileName指令决定)

None:?当AllowOverride被设置为None时。不搜索该目录下的.htaccess文件(可以减小服务器开销)

Allow:允许访问的主机列表(可用域名或子网,例如:Allow?from?192.168.0.0/16)

Deny:拒绝访问的主机列表

Apache的MPM优化

# prefork MPM

<IfModule prefork.c>

StartServers       8     启动Apache时候启动的httpd进程个数

MinSpareServers    5     最小空闲的进程数

MaxSpareServers   20     最大空闲的进程数

ServerLimit      256

MaxClients       256    最大允许连接数,即最大并发数,最大限值由serverlimit 控制

MaxRequestsPerChild  4000 子进程最大请求数,0表示不限制,推荐位1000

</IfModule>

#worker MPM

<IfModule worker.c>

StartServers         4   启动Apache时候启动的httpd的个数

MaxClients         300   最大并发连接数

MinSpareThreads     25   最小空闲线程数

MaxSpareThreads     75   最大空闲线程数

ThreadsPerChild     25   每个子进程产生的线程数

MaxRequestsPerChild  0   每个子进程被请求的最大次数

</IfModule>

别名设置

对于不在DocumentRoot指定的目录内的页面,既可以使用符号连接,也可以使用别名。

Alias /error/ "/var/www/error/"    访问时候可以输入  、HTTP://www.node.com/error

<IfModule mod_negotiation.c>

<IfModule mod_include.c>

<Directory "/var/www/error">

AllowOverride None

Options IncludesNoExec

AddOutputFilter Includes html

AddHandler type-map var

Order allow,deny

Allow from all

LanguagePriority en es de fr

ForceLanguagePriority Prefer Fallback

</Directory>

对Apache服务器的根访问不生成目录列表,同时指定错误页面

<locationmatch "^/$>

options-indexes

errordocument 403 /error/noindex.html

<locationmatch>

当访问服务器时候依次访问页面 index.html  index.html.var

directoryindex   index.html  index.html.var

DirectoryIndex index.html index.html.var  不指定任何首页时候,默认读取的首页

指定保护目录配置文件的名称

AccessFileName .htaccess                   分布式访问控制文件

//指定负责处理MIME 对应格式的配置文件的存放位置

TypesConfig /etc/mime.types

//指定默认的MIME 文件类型为纯文本或HTML 文件

DefaultType text/plain

//只记录连接Apache 服务器的IP 地址,而不记录主机名

HostnameLookups Off

访问日志设置

ErrorLog logs/error_log     错误日志的位置

#LogLevel:   debug, info, notice, warn, error, crit,

LogLevel warn

自定义访问日志

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

LogFormat "%h %l %u %t \"%r\" %>s %b" common  #common为日志格式名称

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

LogFormat "%{User-agent}i" agent

# "combinedio" includes actual counts of actual bytes received (%I) and sent (%O); this

# requires the mod_logio module to be loaded.

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

CustomLog logs/access_log common

格式中各个参数如下

%h -客户端的IP地址或主机名

%l –The 这是由客户端 identd 判断的RFC 1413身份,输出中的符号 "-" 表示此处信息无效。

%u –由HTTP认证系统得到的访问该网页的客户名。有认证时才有效,输出中的符号 "-" 表示此处信息无效。

%t –服务器完成对请求的处理时的时间。

"%r" –引号中是客户发出的包含了许多有用信息的请求内容。

%>s –这个是服务器返回给客户端的状态码。

%b –最后这项是返回给客户端的不包括响应头的字节数。

"%{Referer}i" –此项指明了该请求是从被哪个网页提交过来的

"%{User-Agent}i" –此项是客户浏览器提供的浏览器识别信息。

用户认证的配置

<IfModule mod_userdir.c>   条件化模块判断

如果有这个模块,默认将使用这个功能

UserDir disabled

#UserDir public_html

</IfModule>

<Files ~ "^\.ht">            文件访问控制

Order allow,deny

Deny from all

Satisfy All

</Files>

ServerSignature on   表示在错误页面中不显示Apache的版本

servertokens prod     在错误页面中不显示操作系统的名称

+==========================================================================================

虚拟主机

===========================================================================================

虚拟主机(VirtualHost).通常分为这样3种:

基于域名,基于端口,基于IP,以及它们的混合

下面是每种虚拟主机的配置过程

1.基于域名

这是一种最通用的情况,已经给服务器设置了多个域名,然后希望访问不同的域名来访问不同的网站文件.

修改httpd.conf的配置

Use name-based virtual hosting.

#

NameVirtualHost *  表示在apache监听的所有IP和所有端口(此时只有80)上做多域名虚拟主机

<VirtualHost *>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s1

ServerName s1.domain1.com

ErrorLog logs/ error_log

TransferLog logs/ access_log

</VirtualHost>

<VirtualHost *>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s2

ServerName  s2.domain1.com

ErrorLog logs/error_log

TransferLog logs/access_log

</VirtualHost>

2.基于端口

通过访问同一个IP(或者域名)的不同端口来访问到不同的文件

对httpd.conf做如下修改

增加监听口

Listen 80

Listen 81

将之前做的多域名虚拟主机去掉(因为此时是用IP加端口来访问的),即

# Use name-based virtual hosting.

#

# NameVirtualHost *    注释掉这句话

以下是虚拟主机配置(注意下面的配置部分我并没用ServerName字段)

<VirtualHost *:80>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s1

ErrorLog logs/error_log

TransferLog logs/ access_log

</VirtualHost>

<VirtualHost *:81>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s2

ErrorLog logs/ error_log

TransferLog logs/ access_log

</VirtualHost>

混合实验

看到这里我们就可以做一个稍微复杂的实验,在不同的端口上做不同域名的访问.例如

在80上访问s1.domain1.com和s2.domain1.com

在81上访问s3.domain2.com和s4.domain2.com当然这样访问是要带端口号的,上面因为是80默认端口所以不需要写端口号

访问这四个域名+端口分别访问到不同的页面.

配置过程

首先在bind上增加两个域名指向服务器. s3.domain2.com,s4.domain2.com,增加之后记得要重启bind.

然后修改httpd.conf文件

增加监听口

Listen 80

Listen 81

虚拟主机设置

# Use name-based virtual hosting.

#

NameVirtualHost *:80

NameVirtualHost *:81

表示要在本机的所有IP的80和81上面做多域名(NameVirtualHost:即为名称虚拟主机的意思)

<VirtualHost *:80>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s1

ServerName s1.domain1.com

ErrorLog logs/ error_log

TransferLog logs/ access_log

</VirtualHost>

<VirtualHost *:80>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s2

ServerName  s2.domain1.com

ErrorLog logs/ error_log

TransferLog logs/access_log

</VirtualHost>

<VirtualHost *:81>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s3

ServerName  s3.domain2.com

ErrorLog logs/error_log

TransferLog logs/access_log

</VirtualHost>

<VirtualHost *:81>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s4

ServerName  s4.domain2.com

ErrorLog logs/error_log

TransferLog logs/access_log

</VirtualHost>

检查虚拟主机设置

3.基于IP的虚拟主机

将不同的网站挂在不同的IP上,访问不同的IP,所看到的是不同网站.因为一般服务器没那么多公网IP,而且大家一般都是用域名访问的.所以这

个基本没用.但是可以用来测试和学习.

适用环境:server上没有配置域名,只能用IP访问.

为了实验效果,我们先来停掉DNS服务.

首先为服务器增加一个IP,192.168.0.112

[[email protected] network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0

[[email protected] network-scripts]# vi ifcfg-eth0:0

DEVICE=eth0:0     //设备名称

ONBOOT=yes       //随系统启动

BOOTPROTO=static

IPADDR=192.168.0.112 //新设的IP

NETMASK=255.255.255.0

GATEWAY=192.168.0.1

激活这个设备

[[email protected] network-scripts]# ifdown eth0;ifup eth0

查看当前ip设置

[[email protected] network-scripts]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0A:EB:XX:XX:XX

inet addr:192.168.0.111  Bcast:192.168.0.255  Mask:255.255.255.0

eth0:0    Link encap:Ethernet  HWaddr 00:0A:EB:XX:XX:XX

inet addr:192.168.0.112  Bcast:192.168.0.255  Mask:255.255.255.0

ping这个112确实启用成功.

这样增加IP的工作就完成了,下面对httpd.conf做修改

# Use name-based virtual hosting.

#

#NameVirtualHost *   去掉基于多域名的主机

<VirtualHost 192.168.0.111>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s1

#    ServerName s1.domain1.com

ErrorLog logs/ error_log

TransferLog logs/ access_log

</VirtualHost>

<VirtualHost 192.168.0.112>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s2

#    ServerName  ss2.domain1.com

ErrorLog logs/ error_log

TransferLog logs/ access_log

</VirtualHost>

注意上面红色的部分,由于此时没用多域名所以我将ServerName字段去掉了(在多端口的时候这样做是可以的).但是出现了下面的错误,可以看

到它是把IP作为域名给解析了.

"httpd.conf" 1157L, 38072C written

[[email protected] conf]# ../bin/httpd -S

[Mon Jul 30 14:09:06 2007] [error] (EAI 2)Name or service not known: Failed to resolve server name for 192.168.0.112 (check

DNS) -- or specify an explicit ServerName

[Mon Jul 30 14:09:06 2007] [error] (EAI 2)Name or service not known: Failed to resolve server name for 192.168.0.111 (check

DNS) -- or specify an explicit ServerName

VirtualHost configuration:

192.168.0.111:*        bogus_host_without_reverse_dns (/usr/local/apache2/conf/httpd.conf:1065)

192.168.0.112:*        bogus_host_without_reverse_dns (/usr/local/apache2/conf/httpd.conf:1074)

Syntax OK

下面我们将ServerName字段加上去,后面的名称我们随意写

<VirtualHost 192.168.0.111>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s1

ServerName s1

ErrorLog logs/dbpi_web-error_log

TransferLog logs/dbpi_web-access_log

</VirtualHost>

<VirtualHost 192.168.0.112>

ServerAdmin [email protected]

DocumentRoot /var/www/html/s2

ServerName s2

ErrorLog logs/dbpi_web-error_log

TransferLog logs/dbpi_web-access_log

</VirtualHost>

然后再来检查虚拟主机配置

[[email protected] conf]# ../bin/httpd -S

VirtualHost configuration:

192.168.0.111:*        s1 (/usr/local/apache2/conf/httpd.conf:1065)

192.168.0.112:*        s2 (/usr/local/apache2/conf/httpd.conf:1075)

Syntax OK

在客户机上测试访问192.168.0.111和192.168.0.112成功.

个人觉得这应该是一处bug,因为在这种情况下并不需要域名访问,采用的是完全以实际IP进行访问.相应的ServerName这个字段应该是没有意义

的(正如多端口时我们这样做,完全没问题).事实也表明了我们任意起名字也是可以通过的.

最后说一个Apache常常会碰到的问题

启动apache时会有警告

httpd: Could not determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName

还是能够正常的启动和访问,只是有这个问题.

解决:

#ServerName [url]www.example.com:80[/url] 将这句话修改如下

ServerName 192.168.0.111 当然根据你的实际情况修改为本机的IP或者域名

时间: 2024-10-23 13:56:53

apache-详细配置文件介绍+多种方式虚拟主机配置的相关文章

apache配置文件之虚拟主机配置

虚拟主机的配置 (1)基于IP地址的虚拟主机配置 Listen 80 <VirtualHost 172.20.30.40> DocumentRoot /www/example1 ServerName www.example1.com </VirtualHost> <VirtualHost 172.20.30.50> DocumentRoot /www/example2 ServerName www.example2.org </VirtualHost> (2

Apache虚拟主机配置

在一个Apache服务器上可以配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录.Apache虚拟主机配置有3中方法:基于IP配置.基于域名配置和基于端口配置,这里介绍基于域名配置和基于端口配置,基于IP配置方法类似. 1. Apache基于域名配置虚拟主机: 打开Apache安装目录下的配置文件conf/extra/httpd-vhosts.conf,添加如下配置信息: <VirtualHost _default_:80> DocumentRoot &quo

red hat 6&red hat 7 Apache网站搭建(二)虚拟主机

虚拟Web 主机指的是在同一台服务器中运行多个Web 站点,其中的每一个站点实际上并不 独立占用整个服务器,因此被称为'虚拟"Web 主机.通过虚拟Web 主机服务可以充分利用服务 器的硬件资源,从而大大降低网站构建及运行成本. 使用httpd 可以非常方便地构建虚拟主机服务器,只需要运行一个httpd 服务就能够同时支撑 大量的Web站点.httpd支持的虚拟主机类型包括以下三种. 基于域名: 为每个虚拟主机使用不同的域名,但是其对应的IP 地址是相同的.例如, www.benet.com和w

CentOS 7运维管理笔记(7)----Apache基于域名的虚拟主机配置

使用基于域名的虚拟主机配置是比较流行的方式,可以在同一个IP上配置多个域名并且都通过80端口访问. (1) 在网卡 eth0的第五个接口上配置 192.168.1.215 这个地址: (2) 配置/etc/hosts文件,192.168.1.215 对应的域名如下: 做ping测试,保证ip是导通的: (3) 建立虚拟主机存放网页的根目录,并创建首页文件的 index.html 文件 (4)修改 /usr/local/apache2/conf/httpd.conf 文件,使得服务器开始Liste

CentOS 7运维管理笔记(6)----Apache 基于 IP 的虚拟主机配置

Apache 配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置.本篇随笔记录自己基于IP的虚拟主机配置. 如果同一台服务器有多个IP,可以使用基于IP的虚拟主机配置,将不同的服务绑定在不同的IP上. (1)绑定IP: 在虚拟机中搭建的CentOS 7 服务器的IP被自己设置为了静态IP 192.168.1.210,现在使用ifconfig在同一个网络接口上绑定192.168.1.211~213这三个IP: ifconfig eth0:1 192.1

[单选题]一个php文件的地址为c:/apache/htdocs/phptutor/index.php,虚拟主机的地址是c:/apache/htdocs,那么$_SERVER[&#39;PHP_SELF&#39;]应该评价到哪个页面

index.php /htdocs/phptutor/index.php /phptutor/index.php c:/apache/htdocs/phptutor/index.php $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关.$_SERVER['argv'] #传递给该脚本的参数.$_SERVER['argc'] #包含传递给程序的命令行参数的个数(如果运行在命令行模式).$_SERVER['GATEWAY_INTERFACE']

apache工作机制,压缩,虚拟主机,用户认证

从服务器角度一次web资源请求具体过程 建立连接:tcp三次握手 接收请求 处理请求 访问资源 构建响应报文 发送响应 记录日志 =================================================================== httpd工作模型 阻塞模型,单进程模型.缺点:每次只能响应一个请求,对于现代的高并发无满足 只有一个进程,每次只能响应一个用户的请求 . 多进程模型,缺点:不停的创建和收回进程,进程间切换也耗费时间. httpd监听在套接字上,每当

【转载】【nginx运维基础(2)】Nginx的配置文件说明及虚拟主机配置示例

转自 :http://www.cnblogs.com/nixi8/p/4869760.html 配置文件说明 #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为当前主机的CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log ar/loginx/error.log info; #进程文件 pid /usr/loc

apache虚拟主机配置及解析

Apache虚拟主机配置及解析 1.修改httpd-vhosts.conf 打开apache(Apache24)/conf/extra/httpd-vhosts.conf文件,添加虚拟主机信息,可以这只不同的域名指向不同的文件目录 <VirtualHost *:80> ServerAdmin [email protected]163.com # 服务管理员邮箱地址,出问题时发送邮件到这个邮箱 DocumentRoot "D:/AppServ/www/wx" # apache