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 xxx@xxx.com

DocumentRoot /var/www/html/s1

ServerName s1.domain1.com

ErrorLog logs/ error_log

TransferLog logs/ access_log

</VirtualHost>

<VirtualHost *>

ServerAdmin xxx@ixxx.com

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 xxx@xxx.com

DocumentRoot /var/www/html/s1

ErrorLog logs/error_log

TransferLog logs/ access_log

</VirtualHost>

<VirtualHost *:81>

ServerAdmin xxx@xxx.com

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 xxx@xxx.com

DocumentRoot /var/www/html/s1

ServerName s1.domain1.com

ErrorLog logs/ error_log

TransferLog logs/ access_log

</VirtualHost>

<VirtualHost *:80>

ServerAdmin xxx@xxx.com

DocumentRoot /var/www/html/s2

ServerName  s2.domain1.com

ErrorLog logs/ error_log

TransferLog logs/access_log

</VirtualHost>

<VirtualHost *:81>

ServerAdmin xxx@xxx.com

DocumentRoot /var/www/html/s3

ServerName  s3.domain2.com

ErrorLog logs/error_log

TransferLog logs/access_log

</VirtualHost>

<VirtualHost *:81>

ServerAdmin xxx@xxx.com

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

[root@server1 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0

[root@server1 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

激活这个设备

[root@server1 network-scripts]# ifdown eth0;ifup eth0

查看当前ip设置

[root@server1 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 xxx@xxx.com

DocumentRoot /var/www/html/s1

#    ServerName s1.domain1.com

ErrorLog logs/ error_log

TransferLog logs/ access_log

</VirtualHost>

<VirtualHost 192.168.0.112>

ServerAdmin xxx@xxx.com

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

[root@server1 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 hong.yao@infonaligy.com

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 hong.yao@infonaligy.com

DocumentRoot /var/www/html/s2

ServerName s2

ErrorLog logs/dbpi_web-error_log

TransferLog logs/dbpi_web-access_log

</VirtualHost>

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

[root@server1 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或者域名

转载于:https://blog.51cto.com/douya/1546599

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

  1. php 虚拟主机ip配置文件,基于IP的虚拟主机配置

    Linux操作系统允许添加IP别名,IP别名就是在一块物理网卡上绑定多个lP地址.这样就能够在使用单一网卡的同一个服务器上运行多个基于IP的虚拟主机. 需求: 一台nginx服务器绑定两个ip:192 ...

  2. 简单介绍apache虚拟主机配置的三种方式

    本文主要介绍了apache虚拟主机配置的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 记事本打开httpd.conf文 ...

  3. apache虚拟主机配置的三种方式

    Apache 配置虚拟主机三种方式 记事本打开httpd.conf文件 ,该文件在apache的目录下,如: D:\AppServ\Apache2.2\conf,修改如下两处: LoadModule ...

  4. Ubuntu 16.04与Apache虚拟主机配置的步骤详解

    这篇文章主要给大家介绍了关于Ubuntu 16.04与Apache虚拟主机配置的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ubuntu16.04系统具有一定的参考学习价值,需要的朋友 ...

  5. Tomcat介绍和安装,以及tomcat的虚拟主机配置

    为什么Tomcat火了 Tomcat介绍 Tomcat核心组件 简述Tomcat处理请求过程 Tomcat目录机构 Tomcat安装 虚拟主机配置 Tomcat介绍 ●自从JSP发布之后,推出了各式各 ...

  6. mac中apache服务器及虚拟主机配置

    输入 sudo apachectl start,这样Apache就启动了.打开Safari浏览器地址栏输入 "http://localhost",可以看到内容为"It w ...

  7. apache基于端口的虚拟主机配置

    同一个服务器只能有一个ip,这样如果在一个服务器上配置多个网站的话,如果用ip访问,访问的时候怎么才能区分你要访问的是哪个网站呢? 这就需要虚拟主机配置了,本文只介绍如何根据端口配置虚拟主机: 需要修 ...

  8. nginx之配置文件解读及虚拟主机配置

    文章目录 一.认识配置文件 1.整体结构 2.各"块"功能 3.最详细的配置文件解释 二.配置虚拟主机 1.什么是虚拟主机? 2.虚拟主机类型 3.配置虚拟主机   如果你还没有搭 ...

  9. 访问限制和身份验证和虚拟主机配置的三种方式

    实验:配置访问限制和身份验证登录和三种方式配置虚拟主机访问 设置服务访问控制 限制策略规则 all 表示任意IP地址 Require all granted 允许所有主机访问 Require all ...

最新文章

  1. 智能实验室-杀马(Defendio) 4.16.0.840
  2. 用python画玫瑰花代码-用python画一朵玫瑰花
  3. Oracle 序列的创建和使用
  4. java 学习(一)冒泡排序
  5. Spring could 使用Feign超时问题
  6. 只卖男人,年赚5.6亿!全网最火“爱情骗子”,被戳穿了
  7. 监控oracle等待事件
  8. Cent Os下安装软件之---源码安装
  9. PHP中define定义的常量如何在smarty模板调用
  10. c php curl post,php curl post
  11. mac ssh key 的获取 (转)
  12. 电脑上计算机软件一直自动弹出,win7系统开机一直自动弹出计算器窗口怎么解决...
  13. moodle基本配置
  14. java调用webService方法
  15. Codeforces1183 E. Subsequences (easy version)(bfs)
  16. 【MATLAB】矩阵运算
  17. python分析方向的第三方库_Python 机器学习方向的第三方库是
  18. 表情分析计算机,利用深度学习和计算机视觉进行面部表情分析
  19. 微信小程序图片在不同设备显示保持图片比例并且居中
  20. 抖音和tiktok是什么关系?TikTok和抖音差别大吗?

热门文章

  1. 用python计算准确率_Python中计算模型精度的几种方法,Pytorch,中求,准确率
  2. linux内核优化哪些参数,linux内核参数优化 互联网技术圈 互联网技术圈
  3. 使用GDI+实现圆形进度条控件的平滑效果
  4. 关于计算机和人物的英语短文,人脑和电脑英语作文
  5. c#sort升序还是降序_被玩坏的数组排序之sort函数
  6. mxnet基础到提高(46)-ndarray.zeros,CSRNDArray稀疏矩阵
  7. 漫画:别人的35岁!
  8. 周志华《机器学习》课后习题解析(第二章)模型评估与选择
  9. wuhan2020新型冠状病毒防疫信息收集平台社区版非正式发布
  10. 技术系列课|“主动降噪”到底有多厉害?