2015-06-02 20:55:59 weixin_33962621 阅读数 3

  源码包安装
   1    远程传输工具winscp传输apachelinux

      httpd

   2    安装
      1)解压
      2cd  解压目录  
      3  查看安装文档

    INSTALL    README

        4)编译前准备

    ./configure --prefix=/usr/local/apache2

   功能:
       1   检测系统环境,生成Makefile
       2   定义软件选项
         5)编译         

     makeclean   #清除编译     
     make

          6)编译安装

     make  install

      报错判断:
                  第一:安装过程是否停止
                  第二:注意error  warning no 等错误报警
      3   启动  

     /usr/local/apache2/bin/apachectl start

      4   删除
              直接删除安装目录
   光盘yum源搭建
     1、挂载光盘

 #mount /dev/sr0 /mnt/cdrom

      2、让网络yum源文件失效

#cd /etc/yum.repos.d
#mv mv CentOS-Base.repo CentOS-Base.repo.bak
#mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
#mv CentOS-Vault.repo CentOS-Vault.repo.bak

   3、修改光盘yum源文件

#vim CentOS-Media.repo [c6-media]
  name=CentOS-$releasever - Media
  baseurl=file:///mnt/cdrom
#地址为你自己的光盘挂载地址
#   file:///media/cdrom/
#   fils:///media/cdrecorder/
#注释这两个不存在的地址
   gpgchech=1
   enabled=1
#把enable0改为enable=1,让这个yum源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

  源码包与RPM包的区别 

   安装之前的区别:概念上的区别

   安装之后的区别:安装位置不同

  2RPM包安装位置

  是安装在默认位置中

    RPM包默认安装路径

 /etc/     配置文件安装目录
 /usr/bin/ 可执行的命令安装目录
 /usr/lib  程序所使用的函数库保存位置
 /usr/share/doc 基本的软件使用手册保存位置
 /usr/share/man/ 帮助文件保存位置

 3、源码包安装位置

   安装在指定位置当中,一般是/usr/local/软件名

  4、安装位置不同带来的影响

  RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的apache的启动方法是:

 /etc/rc/init.d/httpdstart
 service httpdstart

  而源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,如:

 /usr/local/apache2/bin/apachectl start

  源码包安装过程

 1、安装准备、安装C语言编译器

     下载源码包

   http://mirror.bit.edu.cn/apache/httpd

  2、安装注意事项

    源码包保存位置:/usr/local/src.

    软件安装位置:/usr/local/

    如何确定安装过程报错:安装过程停止并出现errorwarningno的提示

  3、源码包安装过程

     下载源码包、解压缩下载的源码包、进入解压缩目录

   ./configure --prefix=/usr/local/apache2        #
软件配置与检查

     定义需要的功能选项

     检测系统环境是否符合安装要求。

     把定义好的功能选项和检测系统环境的信息

都写入Makefile文件,用于后续的编辑

    make   编译(如果保持用makeclean)
    makeinstall    编译安装   
    /usr/local/apache2/bin/apschect1 start #启动

    4、源码包的卸载

     不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件

   脚本安装方法

   1、脚本安装包

   脚本安装包并不是独立的软件包类型,常见安装的是源码包

   是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装

   非常类是与Windows下软件的安装方式。

   2Webmin的作用

 Webmin是一个基于WebLinux系统管理界面。您就可以通过图形化的方式设置用户帐号、ApacheDNS、文件共享等服务

 3Webmin安装过程

  下载软件

  http://sourceforge.net/projects/webadmin/files/webmin/

   解压缩,并进入加压缩目录

   执行安装脚本./setup.sh

    安装位置、日志位置、perl安装位置、端口、管理员名、管理员密码、ssl:不启用、开启启动


转载于:https://blog.51cto.com/9827789/1657647

2013-01-17 16:06:18 weixin_34308389 阅读数 13

 

 

 
 
linuxhttpd.conf配置详解(全文注释翻译)  
2012-06-19 09:55:30|  分类:UNIX&LINUX |  标签:linux  httpd.conf  配置详解   |字号大中小 订阅
这个教程非常适合初学者,两个小时搞定apache配置!
#
#
基于 NCSA 服务的配置文件。
#
#
这是Apache服务器主要配置文件。
#
它包含服务器的影响服务器运行的配置指令。
#
参见<http://httpd.ache.org/doc-2.0/>以取得关于这些指令的详细信息
#
#
不要只是简单的阅读这些指令信息而不去理解它。
#
这里只是做了简单的说明,如果你没有参考在线文件,你就会被警告。
#
#
这些配置指令被分为下面三个部分:
#1.
控制整个Apache服务器行为的部分(即全局环境变量)
#2.
定义主要或者默认服务参数的指令,也为所有虚拟主机提供默认的设置参数
#3.
虚拟主机的设置参数
#
#
配置和日志文件名:如果你指定的文件名以“/”开始(win32下以“dirver:/”),
#
服务器将使用绝对路径,如果文件名不是以“/”开始的,那么它将把ServerRoot
#
的值附加在文件名的前面,例如,对“logs/foo.log",如果ServerRoot的值
#
“/usr/local/apache2”,则该文件应为“/usr/local/apache2/logs/foo.log”
#
##
第一区:全局环境参数
#
#
这里设置的参数将影响整个Apache服务器的行为;
#
例如Apache能够处理的并发请求的数量等。
#
#ServerRoot:
指出服务器保存其配置、出错和日志文件等的根目录。
#
#
注意!如果你想要将它指定为NFS或其它网络上的位置,
#
请一定要去阅读与LockFile有关的文档(可能在
#<http://httpd.apache.org/docs-2.0/mod/mpm_common.html#lockfile>)

#
这将会使你自己也能解决很多问题。
#
#
路径的结尾不要添加斜线。
#
ServerRoot "/usr/loacl/apache2"
#
#
串行访问的锁文件必须保存在本地磁盘上
#
<IfModule !mpm_winnt.c>
<IfModule !mpm_neware.c>
#LockFile logs/accept.lock
</IfModule>
</IfModule>
#ScoreBoardFile:
用来保存内部服务进程信息的文件。
#
如果未指明(默认),记分板(scoreboard)将被保存在一个匿名的共享内存段中,
#
并且它不能被第三方软件所使用。
#
如果指定了,要确保不能使用两个Apache使用同一个记分板文件,
#
这个记分板文件必须保存在本地磁盘上。
#
<IfModule !mpm_netware.c>
<IfModule !perchild.c>
#ScoreBoardFile logs/apache_runtime_status
<IfModule>
<IfModule>
#
#PidFile:
记录服务器启动进程号的文件。
#
<IfModule !mpm_neware.c>
PidFile logs/httpd.pid
</IfModule>
#
#Timeout:
接收和发送前超时秒数
#
Timeout 300
#
#KeepAlive:
是否允许稳固的连接(每个连接有多个请求),
#
设为"Off"则停用。
#
KeepAlive On
#
#MaxKeepAliveRequests:
在稳固连接期间允许的最大请求数,
#
设为0表示无限制接入。
#
我们推荐你将其设为一个较大的值,以便提高性能
MaxKeepAliveRequests 100
#
#KeepAliveTimeout:
在同一个连接上从同一台客户上接收请求的秒数
#
KeepAliveTimeout 15
##
##Server-Pool
大小设定(针对MPM的)
##
# prefork MPM
# StartServers:
启动时服务器启动的进程数
# MinSpareServers:
保有的备用进程的最小数目
# MaxSpareServers:
保有的备用进程的最大数目
# MaxClients:
服务器允许启动的最大进程数
# MaxRequestsPerChild:
一个服务进程允许的最大请求数
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestPerChild 0
</IfModule>
# worker MPM
# StartServers:
服务器启动时的服务进程数目
# MaxClients:
允许同时连接的最大用户数目
# MinSpareThreads:
保有的最小工作线程数目
# MaxSpareThreads:
允许保有的最大工作线程数目
# ThreadsPerChild:
每个服务进程中的工作线程常数
# MaxRequestsPerChild:
服务进程中允许的最大请求数目
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
# perchild MPM
# NumServers:
服务进程数量
# StartThreads:
每个服务进程中的起始线程数量
# MinSpareThreads:
保有的最小线程数量
# MaxSpareThreads:
保有的最大线程数量
# MaxThreadsPerChild:
每个服务进程允许的最大线程数
# MaxRequestsPerChild:
每个服务进程允许连接的最大数量
<IfModule perchild.c>
NumServers 5
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
MaxRequestsPerChild 0
</IfModule>
# WinNT MPM
# ThreadsPerChild:
服务进程中工作线程常数
# MaxRequestsPerChild:
服务进程允许的最大请求数
<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 0
</IfModule>
# BeOS MPM
# StartThreads:
服务器启动时启动的线程数
# MaxClients:
可以启动的最大线程数(一个线程等于一个用户)
# MaxRequestsPerThread:
每个线程允许的最大请求数
<IfModule beos.c>
StartThreads 10
MaxClients 50
MaxRequestsPerThread 10000
</IfModule>
# NetWare MPM
# ThreadStachSize:
为每个工作线程分配的堆栈尺寸
# StartThreads:
服务器启动时启动的线程数
# MinSpareThreads:
用于处理实发请求的空闲线程数
# MaxSpareThreads:
空闲线程的最大数量
# MaxThreads:
在同一时间活动的最大线程数
# MaxRequestPerChild:
一个线程服务请求的最大数量,
#
推荐将其设置为0,以实现无限制的接入
<IfModule mpm_netware.c>
ThreadStackSize 65536
StartThreads 250
MinSpareThreads 25
MaxSpareThreads 250
MaxThreads 1000
MaxRequestPerChild 0
</IfModule>
# OS/2 MPM
# StartServers:
启动的服务进程数量
# MinSpareThreads:
每个进程允许的最小空闲线程
# MaxSpareThreads:
每个进程允许的最大空闲线程
# MaxRequestsPerChild:
每个服务进程允许的最大连接数
<IfModule mpmt_os2.c>
StartServers 2
MinSpareThreads 5
MaxSpareThreads 10
MaxRequestsPerChild 0
</IfModule>
#
# Listen:
允许你绑定Apache服务到指定的IP地址和端口上,以取代默认值
#
参见<VirtualHost>指令
#
使用如下命令使Apache只在指定的IP地址上监听,
#
以防止它在IP地址0.0.0.0上监听
#
# Listen 12.34.56.78:80
Listen 80
#
#
动态共享支持(DSO
#
#
为了能够使用那些以DSO模式编译的模块中的函数,你必须有相应的“LoadModule”行,
#
因此,在这里包含了这些指令,以便能在使用它之前激活。
#
那些静态编译的模块不需要在这里列出 (即以“httpd -l”列出的模块)
#
#
示例:
# LoadModule foo_module modules/mod_foo.so
#
#
# ExtendedStatus
:当调用“server-status”时,控制Apache是产生状态
#
信息(ExtendedStatus On),还是产生基本信息(ExtendedStatus Off)。
#
默认为off
#
# ExtendedStatus On
###
第二区:服务配置
#
#
这一区建立被服务器用的指令值,以回应那些不被 <VirtualHost>
#
定义处理的任何请求。
#
这些数值也提供默认值给后面定义的<VirtualHost>容器。
#
如果<VirtualHost>中有定义,那么这里定义的指令值将被
# <VirtualHost>
中的定义所覆盖。
#
<IfModule !mpm_winnt.c>
<IfModule !mpm_neware.c>
#
#
如果你想使httpd以另外的用户或组来运行,你必须在开始时以root方式启动
#
然后再将它切换为你想要使用的用户或组。
#
# User/Group:
运行httpd的用户和组
#
SCO (ODT3)上使用“User nouser”“Group nogroup”
#
HPUX上,你可能不能以nobody身份使用共享内存,建议创建一个www用户。
#
注意一些核心(kernel)在组ID大于60000时拒绝setgid(Group)semctl(IPC_SET)
#
节在这些系统上不要使用“Group #-1”
#
User nobody
Group #-1
</IfModule>
</IfModule>
#
# ServerAdmin:
你的邮件地址,当发生问题时Apache将向你发出邮件。
#
作为一个出错文档,这个地址显示在server-generated页上,
#
例如:admin@your-domain.com
#
ServerAdmin kreny@sina.com
#
# ServerName
指定Apache用于识别自身的名字和端口号。
#
通常这个值是自动指定的,但是我们推荐你显式的指定它以防止启动时出错
#
#
如果你为你的主机指定了一个无效的DNS名,server-generated重定向将不能工作。
#
参见UseCanonicalName指令
#
#
如果你的主机没有注册DNS名,在这里键入它的IP地址
#
无论如何,你必须使用它的IP地址来提供服务,
#
这里使用一种容易理解的方式重定向服务
ServerName http://www.dalouis.com/
#
# UseCanonicalName:
决定Apache如何构造URLS SERVER_NAME SERVER_PORT 的指令。
#
当设置为 “Off”,Apache会使用用户端提供的主机名和端口号。
#
当设置为“On”,Apache会使用ServerName指令的值。
#
UseCanonicalName Off
#
# DocumentRoot:
你的文档的根目录。默认情况下,所有的请求从这个目录进行应答。
#
但是可以使用符号链接和别名来指向到其他的位置。
#
DocumentRoot "/home/redhat/public_html"
#
# Apache
可以存取的每个目录都可以配置存取权限(包括它的子目录)。
#
#
首先,我们配置一个高限制的特征。
#
这将禁止访问文件系统所在的目录,并添加你希望允许访问的目录块。
#
如下所示
<Directory />
Order Deny,Allow
Deny from all
</Directory>
#
#
注意从这里开始你一定要明确地允许哪些特别的特征能够被使用。
# -
所以,如果Apache没有象你所期待的那样工作的话,
#
请检查你是否在下面明确的指定它可用。
#
#
#
这将改变到你设置的DocumentRoot
#
<Directory "/home/redhat/public_html">
#
# Options
:这个指令的值可以是“None”“All”,或者下列选项的任意组合:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
#
注意,“MultiViews”必须被显式的指定,“Options All”不能为你提供这个特性。
#
#
这个指令既复杂又重要,请参见
#“http://httpd.apache.org/docs-2.0/mod/core.html#optioins”
以取得更多的信息。
#
Options FollowSymLinks
#
# AllowOverride
控制那些被放置在.htaccess文件中的指令。
#
它可以是“All”“None”,或者下列指令的组合:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
#
控制谁可以获得服务。
#
Order allow,deny
Allow from all
</Directory>
#
# UserDir:
指定在得到一个~user请求时将会添加到用户home目录后的目录名。
#
UserDir public_html
#
为防止在UserDir指令上的漏洞,对root用户设置
#
“./”这样的UserDir是非常有用的。
#
如果你使用Apache 1.3或以上版本,我们强烈建议你
#
在你的服务器配置文件中包含下面的行
UserDir disabled root
#
#
下面是一个使用UserDir指令使一个站点的目录具有只读属性的示例:
#
# <Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit Indexes
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludeNoExec
# <Limit GET POST OPTIONS PROPFIND>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS PROPFIND>
# Order deny,allow
# Deny from all
# </LimitExcept>
# </Directory>
#
# DirectoryIndex:
定义请求是一个目录时,Apache向用户提供服务的文件名
#
# index.html.var
文件(一个类型映象文件)用于提供一个文档处理列表,
#
出于同样的目的,也可以使用MultiViews选项,但是它会非常慢。
#
DirectoryIndex index.php index.html index.html.var
#
# AccessFileName:
在每个目录中查询为目录提供附加配置指令的文件的文件名。
#
参见AllowOverride指令。
#
AccessFileName .htaccess
#
#
下面的行防止.htaccess.htpasswd文件被Web客户查看。
#
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
#
# Typeconfig:
定义在哪里查询mime.types文件。
#
TypeConfig conf/mime.types
#
# DefaultType:
定义当不能确定MIME类型时服务器提供的默认MIME类型。
#
如果你的服务主要包含textHTML文档,“text/plain”是一个好的选择;
#
如果大多是二进制文档,诸如软件或图像,你应使用
# “application/octer-stream”
来防止浏览器象显示文本那样显示二进制文件。
#
DefaultType text/plain
#
# mod_mime_magic
允许服务器从自己定义自己类型的文件中使用不同的线索(hints),
#
这个MIMEMagicFile指令定义hints定义所在的文件。
#
<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>
#
# HostnameLookups
:指定记录用户端的名字还是IP地址,例如,本指令为on
#
记录主机名,如http://www.apache.org/;为off时记录IP地址,204.62.129.132
#
默认值为off,这要比设为on好得多,因为如果设为on则每个用户端请求都将会
#
至少造成对 nameserver 进行一次查询。
#
HostnameLookups Off
#
# EnableMMAP:
控制是否进行内存转储(如果操作系统支持的话)。
#
默认为on,如果你的服务器安装在网络文件系统上(NFS),请关闭它。
#
在一些系统上,关闭它会提升系统性能(与文件系统类型无关);
#
具体情况请参阅http://httpd.apache.org/docs-2.0/mod/core.html#enablemmap
#
# EnableMMAP off
#
# EnableSendfile:
控制是否使用sendfile kernel支持发送文件
#
(如果操作系统支持的话)。默认为on,如果你的服务器安装在网络文件系统
#
NFS)上,请你关闭它。
#
参见http://httpd.apache.org/docs-2.0/mod/core.html#enablesendfile
#
# EnableSendfile off
#
# ErrorLog:
错误日志文件定位。
#
如果你没有在<VirtualHost>内定义ErrorLog指令,这个虚拟主机的错误信息
#
将记录在这里。如果你在那儿定义了ErrorLog,这些错误信息将记录在你所
#
定义的文件里,而不是这儿定义的文件。
#
ErrorLog logs/error_log
#
# LogLevel:
控制记录在错误日志文件中的日志信息数量。
#
可能的值包括:debuginfonoticewarnerrorcritalertemerg
#
LogLevel warn
#
#
下面的指令为CustomLog指令定义格式别名。
#
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
#
你需要安装了mod_logio.c模块才能使用%I%O
# LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
#
#
指定接入日志文件的定位和格式(一般日志格式)。
#
如果你没有在<VirtualHost>内定义这个指令,传输信息将记录在这里,
#
如果你定义了这个指令,则记录在你指定的位置,而不是这儿定义的位置。
#
CustomLog logs/access_log common
#
#
如果你想要记录agentreferer信息,可以使用下面的指令
#
# CustomLog logs/referer_log referer
# CustomLog logs/agent_log agent
#
#
如果你想要使用一个文件记录accessagentreferer信息,
#
你可以如下定义这个指令:
#
# CustomLog logs/access_log combined
#
# ServerTokens
#
这个指令定义包含在HTTP回应头中的信息类型。默认为“Full”
#
这表示在回应头中将包含模块中的操作系统类型和编译信息。
#
可以设为列各值中的一个:
# Full | OS | Minor | Minimal | Major | Prod
# Full
传达的信息最多,而Prod最少。
#
ServerTokens Full
#
#
随意的添加包含服务器版本和虚拟主机名字一行信息到server-generated输出页中
#
(内部错误文档,FTP目录列表,mod_statusmod_info输出等等,除了CGI错误
#
或自定义的错误文档以外)。
#
设为“EMail”将包含一个指向ServerAdminmailto:连接。
#
可以为如下值:On | Off | EMail
#
ServerSignature On
#
# Aliases:
在这时添加你需要的别名,格式如下:
# Alias
别名真实名
#
#
注意,如果你在别名的未尾包含了“/”,那么在URL中也需要包含“/”
#
因此,“/icons”不是这个示例中的别名。
#
如果别名中以“/”结尾,那么真实名也必须以“/”结尾,
#
如果别名中省略了结尾的“/”,那么真实名也必须省略。
#
#
我们使用别名“/icons/”来表示FancyIndexed目录列表,如果你不使用、
# FancyIndexing
,你可以注释掉它。
#
# Alias /icons/ "/usr/local/apache2/icons/"
# <Directory "/usr/local/apache2/icons">
# Options Indexes MultiViews
# AllowOverride None
# Order allow,deny
## Allow from all
# </Directory>
#
#
这将改变ServerRoot/manual。这个别名提供了手册页所在的位置,
#
即使你改变了你的DocumentRoot。如果你对有无手册页并不在意的话,
#
你可以注释掉它。
#
Alias /manual "/usr/loacl/apache2/manual"
<Directory "/usr/local/apache2/manual">
Options Indexes FollowSymLinks MultiViews IncludesNoExec
AddOutputFilter Includes html
Order allow,deny
Allow from all
</Directory>
#
# ScriptAlias:
指定包含服务脚本的目录。
# ScriptAliases
本质上与Aliases一样,除了这里的文档在请求时做为程序处理处理以外。
#
尾部的“/”规则与Alias一样
#
ScriptAlias /cgi-bin/ "/usr/loacl/apache2/cgi-bin/"
#
这里是添加php 4支持的指令
AddType application/x-httpd-php .php
LoadModule php4_module modules/libphp4.so
<IfModule mod_cgid.c>
#
#
添加mod_cgid.c设置,mod_cgid提供使用cgid进行通讯的UNIX套接字的
#
脚本接口路径。
#
# Scriptsock logs/cgisock
</IfModule>
#
#
"/usr/local/apache2/cgi-bin"改为你的ScriptAliased指定的CGI目录,
#
如果你配置了的话。
#
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
#
# Redirect
允许你告诉客户端使用存在于服务器名字空间中的文档,
#
而不是现在的,这帮助客户定位那些改变了位置的文档。
#
例如:
# Redirect permanent /foo http://www.example.com/bar
#
#
控制server-generated目录列表显示的指令
#
#
# IndexOptions:
控制server-generated目录列表显示特征。
#
IndexOptions FancyIndexing VersionSort
#
# AddIcon*
指令告诉服务器不同扩展名的图象文件如何显示,
#
只适用于FancyIndexed指令
#
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/p_w_picpath2.gif) p_w_picpath/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
#
# DefaultIcon
为那些没有显式定义图标的文件提供处理
#
DefaultIcon /icons/unknown.gif
#
# AddDescription
允许你在server-generated索引后放置一个简短的说明。
#
只对FancyIndexed指令有效。
#
格式:AddDescription "说明" 文件名
#
# AddDescription "GZIP compressed document" .gz
# AddDescription "tar archive" .tar
# AddDescription "GZIP compressed tar archive" .tgz
#
# ReadmeName
指定服务器默认查找的README文件的名字,并添加到目录列表中
#
# HeaderName
指定目录列表前缀文件的文件名
ReadmeName README.html
HeaderName HEADER.html
#
# IndexIgnore
指定目录索引忽略并且不包含在列表中的文件名集合,
#
支持shell类型的通配符。
#
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
#
# AddEncoding
允许你在信息传送中使用(Mosaic/X 2.1+)解压缩信息,
#
注意:不是所有的浏览器都支持这个选项。
#
尽管名字相似,但是下列的指令与上面的FancyIndexing定制指令不同。
#
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
#
# DefaultLanguage
AddLanguage允许你指定文档的语言。
#
这使你可以让用户用容易理解的语言浏览文档。
#
#
指定默认的语言,这意味着所有没有指定语言的包都将使用该语言。
#
多数情况下,你也许并不想设置它,除非你确信这样做是正确的。
#
通常,不使用确定的语言比使用错误的语言要好。
#
# DefaultLanguage nl
#
#
注意1:作为语言关键字的词缀毫无疑问是不能一样的--采用波兰
#
文的文档(网络标准语言代码是pl)将希望使用“AddLanguage pl .po”
#
来避免与perl脚本的一般词缀产生二义性。
#
#
注意2: 下面的例子举例说明在一些范例中语言的二字符缩写与它的国家
#
的二字符缩写不相同,例如 “Danmark/dk” “Danmark/da” 的比较.
#
#
注意3: “ltz” 的情况下我们使用三字符词缀,违犯了 RFC的规定,
#
运行中将修复它并使用RFC1766标准取得参考数据。
#
# Danish (da) - Dutch (nl) - English (en) - Estonian (et)
# French (fr) - German (de) - Greek-Modern (el)
# Italian (it) - Norwegian (no) - Norwegian Nynorsk (nn) - Korean (ko)
# Portugese (pt) - Luxembourgeois* (ltz)
# Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)
# Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
# Russian (ru) - Croatian (hr)
#
AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .et
AddLanguage fr .fr
AddLanguage de .de
AddLanguage he .he
AddLanguage el .el
AddLanguage it .it
AddLanguage ja .ja
AddLanguage pl .po
AddLanguage ko .ko
AddLanguage pt .pt
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pt-br .pt-br
AddLanguage ltz .ltz
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .sv
AddLanguage cz .cz
AddLanguage ru .ru
AddLanguage tw .tw
AddLanguage zh-tw .tw
AddLanguage hr .hr
# LanguagePriority
允许你在会话过程中优先使用一些语言。
#
#
以优先次序递减的方式列出它们。我们或多或少地采用按字母排列顺序的方式
#
排列它们。也许你想要改变这个顺序。
LanguagePriority en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw
#
# ForceLanguagePriority
允许你为MULTIPLE CHOICES(Prefer)[在通讯的情况下]
#
NOT ACCEPTABLE(Fallback)[没有可接受的语言匹配的情况]提供一个结果页。
#
ForceLanguagePriority Prefer Fallback
#
#
为发送出的所有页指定默认的字符集,这总是一个好主意,并且为你的
# web
站点的国际化打开了大门,这不正是你曾经想要的吗。同样地,指定
#
默认字符集有一些小的损害,如一个使用iso-8859-1(latin1)标准命令
#
的页面,除非以别的方式指定例如你仅仅以显式方式声明它。
#
也有一些与那些总是鼓励你使用默认字符集的javascroptURL语法有关
#
的浏览器安全原因。
#
#AddDefaultCharset ISO-8859-1
AddDefaultCharse GB2312
#
#
一般以文件扩展名的方式使用字符集。也许你想要避免与语言扩展发生
#
碰撞,除非你在每次改变后都做了很好的测试。
#
参见http://www.iana.org/assignments/character-sets以取得字符集
#
的名字列表和它们各自的RFCs
#
AddCharset ISO-8859-1 .iso8859-1 .latin1
AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen
AddCharset ISO-8859-3 .iso8859-3 .latin3
AddCharset ISO-8859-4 .iso8859-4 .latin4
AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru
AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb
AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk
AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb
AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk
AddCharset ISO-2022-JP .iso2022-jp .jis
AddCharset ISO-2022-KR .iso2022-kr .kis
AddCharset ISO-2022-CN .iso2022-cn .cis
AddCharset Big5 .Big5 .big5
#
对于俄语,使用了多个字符集(如何使用主要依靠客户端):
AddCharset WINDOWS-1251 .cp-1251 .win-1251
AddCharset CP866 .cp866
AddCharset KOI8-r .koi8-r .koi8-ru
AddCharset KOI8-ru .koi8-uk .ua
AddCharset ISO-10646-UCS-2 .ucs2
AddCharset ISO-10646-UCS-4 .ucs4
AddCharset UTF-8 .utf8

#
下面的字符集没有映射到一个特定的标准(iso)上,但是它们在浏览器
#
中被广泛的支持。注意那些大写字母。
# (
它不应该,但是它是为兼容一些浏览器而做)
#
#
参见http://www.iana.org/assianments/character-sets以取得
#
它们的列表。但是浏览器支持较少。
#
AddCharset GB2312 .gb2312 .gb
AddCharset utf-7 .utf7
AddCharset utf-8 .utf8
AddCharset big5 .big5 .b5
AddCharset EUC-TW .euc-tw
AddCharset EUC-JP .euc-jp
AddCharset EUC-KR .euc-kr
AddCharset shift_jis .sjis
#
# AddType
允许你为指定的文件类型添加或覆盖mime.types文件中配置的MIME
#
AddType application/x-tar .tgz
AddType p_w_picpath/x-icon .ico
#
# AddHandler
允许你映射确定的文件扩展名到“handlers”:
#
与文件类型无关的行为。这既能编译到服务器中也可以添加到Action指令
#
中(看下面)。
#
为了在ScriptAliased指令指定的以外使用CGI脚本:
#
(要使它可用,你还需要在Options中添加“ExecCGI”
#
# AddHandler cgi-script .cgi
#
#
对于那些包含他们自己的HTTP头的文件
#
# AddHandler send-as-is asis
#
#
对于server-parsed p_w_picpathmap文件:
#
# AddHandler imap-file map
#
# agemap
文件:
#
#AddHandler imap-
文件映像
#
#
对于类型映像:(转移资源)
#(
这是默认的设定以允许Apache“It Worked”页能多种语言分发)
#
AddHandler type-map var
#
#
过滤器允许你在将它发送到客户端前进行处理。
#
#
为了在服务器端分析包含(SSI).shtml文档:
#
(要执行这个指令,你还需要在Options指令中添加“Includes”。)
#
# AddType text/html .shtml
# AddOutputFilter INCLUDES .shtml
#
# Action
让你定义当调用匹配的媒体文件时将要执行的脚本。这将减少
#
那些经常使用的CGI脚本的URL路径名的重复输入。
#
格式:Action media/type /cgi-script/location
#
格式:Action handler-name /cgi-script/location
#
#
#
可配置的错误应答有三种风格:
# 1
plain text 2)local redirects 3) external redirects
#
#
一些示例:
# ErrorDocument 500 "The server made a boo boo."
# ErrorDocument 404 /missing.html
# ErrorDocument 404 "/cgi-bin/missing_handler.pl"
# ErrorDocument 402 http://www.example.com/subscription_info.html
#
#
#
综合应用这些指令,我们可以创建一个国际化的出错应答。
#
#
我们使用Alias来重定向任意/error/HTTP_<error>.html.var应答到
#
我们的多语言错误消息集合。使用正确的文本替代它。
#
#
通过加入下面的行,你就能够改变这些消息的显示,而不必改变
# HTTP_<error>.html.var
文件。
#
# Alias /error/include/ "/your/include/path/"
#
#
以将/usr/local/apache2/error/include/下的文件拷贝到/your/inclue/path/
#
开始,你可以创建你自己的文件集合,甚至是其于每个虚拟主机的。
#
不管你的ServerSignature如何设置,默认的包含文件将显示你的
# Aapche
版本号和你的ServerAdmin邮件地址
#
#
国际化的错误文档需要mod_aliasmod_includemod_negotiation三个
#
模块。要激活它们,取消下面30行的注释符号
# Alias /error/ "/usr/local/apache2/error/"
#
# <Directory "/usr/local/apache2/error">
# AllowOverride None
# Options IncludesNoExec
# AddOutputFilter Includes html
# AddHandler type-map var
# Order allow,deny
# Allow from all
# LanguagePriority en de es fr it nl sv
# ForceLanguagePriority Prefer Fallback
# </Directory>
#
# ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
# ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
ErrorDocument 403 /error.php
# ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
# ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
# ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
# ErrorDocument 410 /error/HTTP_GONE.html.var
# ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
# ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
# ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
# ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
# ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
# ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
# ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
# ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
# ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
# ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
#
#
下面的命令更改标准的HTTP应答行为以处理己知的浏览器问题。
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
#
#
下面命令关闭对那些没有尾部“/”的目录的非GET请求的重定向,
#
这些命令修复了微软的采用DAV方法不能正确处理重定向的WEB文件夹的问题。
# Apple
下的DAV文件系统和Gnome下的VFSDAV的支持也是采用这样的方法
#
进行处理的。
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
BrowserMatch "^gnome-vfs" redirect-carefully
#
#
允许你使用URLhttp://servername/server-status来通过mod_status
#
成并报告服务器状态信息。改变.example.com为你自己的域名。
#
# <Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .example.com
# </Location>
#
#
允许使用http://servername/server-info来远程报告服务器配置信息
#
(需要mod_info.c支持)。改变“.example.com”为你自己的域名。
#
# <Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .example.com
# </Location>
#
#
代理服务器命令,去掉下面的行使代理服务可用。
#
# <IfModule mod_proxy.c>
# ProxyRequests On
# <Proxy *>
# Order deny,allow
# Deny from all
# Allow from .example.com
# </Proxy>
#
#
安装或关闭HTTP/1.1“通道头处理。
#
“Full”添加服务器版本信息,“Block”移掉所有输出通道头信息。
#
可以设为下面各选项之一:Off | On | Full | Block
#
# ProxyVia On
#
最好为代理服务安装高速缓冲,去掉下面几行的注释符号:
#
(没有CacheRoot则不缓冲)
#
# CacheRoot "/usr/local/apache2/proxy"
# CacheSize 5
# CacheGcInterval 4
# CacheMaxExpire 24
# CacheLastModifiedFactor 01
# CacheDefaultExpire 1
# NoCache a-domain.com another-domain.edu joes.garage-sale.com
# </IfModule>
#
代理命令结束。
#
#
附加的特定模块配置。
#
<IfModule mod_ssl.c>
Include conf/ssl.conf
</IfModule>
##
第三区:虚拟主机
#
# VirtualHost:
你可以通过设置虚拟主机容器以实现在你的主机上保有多个
#
域名/主机名。大多数配置信息只使用基于名字的虚拟主机,因此服务器
#
不必担心IP地址的问题,下面的命令以*号代替虚拟主机名。
#
#
在你试着配置你的虚拟主机以前,请参见
# http://httpd.apache.org/docs-2.0/vhosts/>
以取得更多的信息。
#
#
你可以使用命令行选项“-S”来检验你的虚拟主机配置。
#
#
使用基于名字的虚拟主机。
#
#
 
 

转载于:https://blog.51cto.com/meiyue/1120732

2018-10-19 02:52:13 weixin_40001704 阅读数 729

httpd

提供web服务的软件apache
官网:http://httpd.apache.org/
yum install httpd

一、Rpm安装程序环境:

1、配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf

2、模块相关的配置文件:(配置文件模块化)
/etc/httpd/conf.modules.d/*.conf

3、systemdunit file:
/usr/lib/systemd/system/httpd.service

4、主程序文件:
/usr/sbin/httpd
httpd-2.4支持MPM的动态切换

5、日志文件:
/var/log/httpd
access_log:访问日志
error_log:错误日志

6、站点文档:
/var/www/html

7、模块文件路径:
/usr/lib64/httpd/modules

8、服务控制:
systemctl enable|disable httpd.service
systemctl{start|stop|restart|status} httpd.service


二、主配置文件

/etc/httpd/conf/httpd.conf:

  • [root@centos7-7 conf]#cp httpd.conf{,.origin} 最好复制一份,以免误删改

  • 配置文件中格式:Directive Value (指令+加值)指令首字母大写(路径需注意大小写)

[root@centos7-7 ~]#vim /etc/httpd/conf/httpd.conf
....
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# Do not add a slash at the end of the directory path.  If you point
# ServerRoot at a non-local disk, be sure to specify a local disk on the
# Mutex directive, if file-based mutexes are used.  If you wish to share the
# same ServerRoot for multiple httpd daemons, you will need to change at
# least PidFile.
#
ServerRoot "/etc/httpd"(应用程序的基准目录,所有设置相对路径的起始位置)

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80 (监听的套接字,使用所有的IP的80端口)
Listen 172.20.0.61:8080 (可指定IP地址及端口)
# Dynamic Shared Object (DSO) Support

#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
Include conf.modules.d/*.conf (配置文件模块化的组成部分,相对路径)

#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.  
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User apache   (以哪个用户身份运行当前程序,ps aux可查看)
Group apache

三、MPM工作模式

•prefork:多进程I/O模型,每个进程响应一个请求,默认模型
一个主进程:生成和回收n个子进程,创建套接字,不响应请求
多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预
先生成多个空闲进程,等待请求,最大不超过1024个

prefork的默认配置:
StartServers8
MinSpareServers5
MaxSpareServers20
ServerLimit256 最多进程数,最大20000
MaxClients256 最大并发
MaxRequestsPerChild4000 子进程最多能处理的请求数量。在处理MaxRequestsPerChild个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)

•worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型
一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响
应一个请求,并发响应请求:m*n

worker的默认配置:
StartServers4
MaxClients300
MinSpareThreads25
MaxSpareThreads75
ThreadsPerChild25
MaxRequestsPerChild0 无限制

•event:事件驱动模型(worker模型的变种)
一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求
:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时
,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发
场景下的请求处理能力
(最大连接并发数MaxRequestWorkers/ThreadsPerChild应小于等于ServerLimit)
使用event 系统必须支持事件驱动机制
epoll -Linux
kqueue -BSD
event ports -Solaris

/etc/httpd/conf.modules.d/00-mpm.conf

[root@centos7-7 ~]#cd /etc/httpd/conf.modules.d/
[root@centos7-7 conf.modules.d]#ls       (00,01文件名前面数字是启动顺序,因为存在依赖关系,模块不适用,更改后缀即可)
00-base.conf  00-dav.conf  00-lua.conf  00-mpm.conf  00-proxy.conf  00-systemd.conf  01-cgi.conf
[root@centos7-7 conf.modules.d]#vim 00-mpm.conf 
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so (默认开启prefork:预生成)

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so 
(切换注意需重启才可生效,生产用利用排干,灰度方式替换)

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so 


可直接在此配置文件中自定义相应模块的参数(注意不能混搭,如prefork写worker参数)
StartServers8
MinSpareServers5
MaxSpareServers20
ServerLimit256 
MaxClients256 
MaxRequestsPerChild4000

httpd 选项

httpd -M 可查看启用的模块
httpd -t 检查语法
httpd -l 查看静态模块(编译进去的模块)
httpd -L 列出所有可用的模块


四、httpd上主机主要需定义的参数

1、ServerName:主机名,以标识当前主机

2、DocumentRoot:url的根,映射到本地文件系统的路径 /path/to/somedir

3、对路径/path/to/somedir下的网页文件,定义,允许那些人访问,不允许哪些人访问,怎么能够被访问,做属性设定

4、Require:更加精细访问设置 (-59512)

<Directory ""> 
Require all granted 所有人可访问
Require user dadda  只允许dadda访问
Require 192.168     只允许192.168.0.0网段访问
</Directory>

<File ""> 指定文件
</File>

<DirectoryMatch "">支持正则表达式
</DiretoryMatch>

<Location " ">url路径   LocationMatch也支持正则表达式,但是不建议用,会降低性能
</Location " ">

etc/httpd/conf/httpd.conf

# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80  
ServerName centos7.dushan.com:80(互联网名称DNS解析到当前的主机名)

#
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other 
# <Directory> blocks below.
#
<Directory />            
    AllowOverride none
    Require all denied    /直接访问拒绝,不允许任何人更改,只允许访问documentroot即可
</Directory>

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html" 真正访问的页面

#
# Relax access to content within /var/www.
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted  
</Directory>

# Further relax access to the default document root:
<Directory "/var/www/html">     以下定义访问/var/www/html规则
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks        访问网页时时如何响应,默认链接index.html文件,可改为none
    (删除Indexes 则显示被拒  注:当没有index.html文件时)
    (删除FollowSymLinks,则不允许链接源文件)
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None   是否允许对应的配置文件覆盖

    #
    # Controls who can get stuff from this server.
    #
    Require all granted   

(Require可以做更为精细设置,Require user和Require ip给出以后就算设置了白名单,其他的则被拒绝)
(若引用Require not,需配合<RequireAll>使用)
...

五、基于用户的访问控制

不建议基于ip地址的认证,虽然高效,但是灵活性极差,并且很容易被伪装

• 认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求
客户端提供账号和密码
• 认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证
通过时,则服务器发送响应的资源
• 认证方式两种:
basic:明文
digest:消息摘要认证,兼容性差
• 安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便
于告知用户认证的原因
定义安全域格式:

<Directory “/path">
Options None
AllowOverride None  是否允许覆盖
AuthType Basic      认证类型
AuthName "String"   认证提示,"string"内容自行修改
AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" 认证密码文件路径,通过htpasswd生成
Require user username  允许的用户
</Directory>


Require valid-user 允许账号文件中的所有用户登录访问

AuthGroupFile "/etc/httpd/conf/.htgroup"  创建组用户文件访问(需手动创建)
vim /etc/httpd/conf/.htgroup 
(编辑内容disney: tom jerry) 
Require group disney

• 用户的账号和密码
虚拟账号:仅用于访问某服务时用到的认证标识
存储:文本文件,SQL数据库,ldap目录存储,nis等

提供账号和密码存储(文本文件)

使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c 自动创建文件,仅应该在文件不存在时使用
-p 明文密码
-d CRYPT格式加密,默认
-m md5格式加密
-s sha格式加密
-D 删除指定用户,或直接删除文件
-b 使用命令行直接添加密码

构建实验

[root@centos7-7 ~]#vim /etc/httpd/conf/httpd.conf
...
# Further relax access to the default document root:
<Directory "/var/www/html">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options none    (none为/var/www/html/下,无index.html文件则拒绝访问)

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
<Directory "/var/www/html/admin">
    Options Indexes
    AllowOverride none
    AuthType basic
    AuthName "some private area..."
    AuthUserFile "/etc/httpd/conf/.htpasswd"
    Require user tom 
</Directory>
...
[root@centos7-7 ~]#htpasswd -b -c -m /etc/httpd/conf/.htpasswd tom dushan 创建tom用户设置密码dushan
Adding password for user tom
[root@centos7-7 ~]#htpasswd -b -m /etc/httpd/conf/.htpasswd jerry shandu 第二次注意不需添加-c选项
Adding password for user jerry
[root@centos7-7 ~]#tail /etc/httpd/conf/.htpasswd                         
tom:$apr1$aX9.XL42$dzjpLk5MB5ivprfjiY/1D0
jerry:$apr1$E21f3YMg$TTaviG84A8bzaQXxwsGK01
[root@centos7-7 ~]#cd /var/www/html/
[root@centos7-7 html]#mkdir admin
[root@centos7-7 html]#cp index.html.origin /var/www/html/admin/admin.html

浏览器浏览http://192.168.32.7/admin/admin.html输入用户名及密码即可访问


六、定义路径别名

访问不是DocumentRoot子路径下的html页面则需设置别名

[root@centos7-7 ~]#cd /app
[root@centos7-7 app]#cp /var/www/html/index.html /app/biemiing/
[root@centos7-7 bbs]#cat >index.html<<EOF 
> This is /app/bieming/index.html !!!
> EOF
[root@centos7-7 bbs]#vim /etc/httpd/conf/httpd.conf
...
Alias /bieming/ /app/bieming/
    <Directory "/app/bieming/">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
...
[root@centos7-7 ~]#httpd -t
Syntax OK
[root@centos7-7 ~]#systemctl restart httpd

浏览器访问http://192.168.32.7/bieming/ 显示/app/bieming/index.html内容及成功

注意:/var/www/html路径下(document路径下若文件夹有和Alias重名的,优先显示Alias页面)

七、日志文件

/var/log/httpd/access_log

访问日志

[root@centos7-7 ~]#tail /var/log/httpd/access_log
···
192.168.32.1 - - [18/Oct/2018:07:03:00 +0800] "GET /bbs/ HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; 
         1                    2                          3          4  5  6          7
···
1.哪个客户端
2.时间
3.请求报文的起始行(方法:GET,请求/bbs/这个URL,基于hTTP/1.1版本)
4.响应码
5.响应内容长度
6.表示从什么位置跳转来的
7.用户代理

/var/log/httpd/error_log

错误日志

[root@centos7-7 ~]#tail /var/log/httpd/error_log
···
[Thu Oct 18 07:00:24.356714 2018] [lbmethod_heartbeat:notice] [pid 4114] AH02282: No slotmem from mod_heartmonitor
          1                             2                        3                     4
···
1.时间
2.加载的模块
3.进程
4.哪里出的问题

定义日志格式:LogFormat format strings

LogFormat "%h %l %u %{%Y-%m-%d %H:%M:%S}t \"%r\" %>s %b
\"%{Referer}i\" \"%{User-Agent}i\"" testlog
•使用日志格式:
CustomLog logs/access_log testlog

参考帮助:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

•%h 客户端IP地址
•%l 远程用户,启用mod_ident才有效,通常为减号“-”
•%u 验证(basic,digest)远程用户,非登录访问时,为一个减号“-”
•%t 服务器收到请求时的时间
•%r First line of request,即表示请求报文的首行;记录了此次请求的“
方法”,“URL”以及协议版本
•%>s 响应状态码
•%b 响应报文的大小,单位是字节;不包括响应报文http首部
•%{Referer}i 请求报文中首部“referer”的值;即从哪个页面中的超链
接跳转至当前页面的
•%{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的
应用程序,浏览器型号
[root@centos7-7 ~]#vim /etc/httpd/conf/httpd.conf
<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined    系统第一种格式 ,需引号注意转译\
    LogFormat "%h %l %u %t \"%r\" %>s %b" common                                         系统第二种格式 

    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    #
    # The location and format of the access logfile (Common Logfile Format).
    # If you do not define any access logfiles within a <VirtualHost>
    # container, they will be logged here.  Contrariwise, if you *do*
    # define per-<VirtualHost> access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    #CustomLog "logs/access_log" common                  (两种格式可切换)

    #
    # If you prefer a logfile with access, agent, and referer information
    # (Combined Logfile Format) you can use the following directive.
    #
    CustomLog "logs/access_log" combined                 (默认启用)
</IfModule>
...

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog "logs/error_log"                            错误日志路径

#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn                                        错误日志级别

八、虚拟主机

  • 站点标识: socket
    IP相同,但端口不同
    IP不同,但端口均为默认端口
    FQDN不同: 请求报文中首部 Host: www.baidu.com

  • 有三种实现方案:
    基于ip:为每个虚拟主机准备至少一个ip地址
    基于port:为每个虚拟主机使用至少一个独立的port
    基于FQDN:为每个虚拟主机使用至少一个FQDN

!!!注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,
一般先禁用main主机
禁用方法:注释中心主机的DocumentRoot指令即可!!!

虚拟主机的配置方法:

<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot “/path"
</VirtualHost>
建议:上述配置存放在独立的配置文件中  /etc/httpd/conf.d/子配置文件中
•其它可用指令:
ServerAlias:虚拟主机的别名;可多次使用
ErrorLog: 错误日志
CustomLog:访问日志
<Directory “/path"> 
</Directory>
Alias

基于IP的虚拟主机示例:

<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.7:80>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.8:80>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>

基于端口的虚拟主机:可和基于IP的虚拟主机混和使用

listen 808
listen 8080
<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.6:808>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.6:8080>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>

基于FQDN的虚拟主机:http2.2版本需添加一句 NameVirtualHost *:80

NameVirtualHost *:80 httpd2.4不需要此指令
<VirtualHost *:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost *:80>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
<VirtualHost *:80>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>

构建实验

[root@centos7-7 ~]#cd /etc/httpd
[root@centos7-7 httpd]#ls
conf  conf.d  conf.modules.d  logs  modules  run
[root@centos7-7 httpd]#vim conf.d/www.conf   
<VirtualHost 192.168.32.7:80>
    ServerName www.dushan.com
    DocumentRoot "/vhosts/www/htdocs"
        <Direcotry "/vhosts/www/htdocs">
                Options none
                AllowOverride none
                Require all Granted
        </Directory>
                ErrorLog "/vhosts/logs/www_access_log"
                CustomLog "/vhosts/logs/www_error_log" combined
</VirtualHost>
[root@centos7-7 httpd]#cp conf.d/www.conf conf.d/bbs.conf
[root@centos7-7 httpd]#vim conf.d/bbs.conf 
<VirtualHost 192.168.32.77:80>
    ServerName bbs.dushan.com
    DocumentRoot "/vhosts/bbs/htdocs"
        <Direcotry "/vhosts/bbs/htdocs">
                Options none
                AllowOverride none
                Require all Granted
        </Directory>
                CustomLog "/vhosts/logs/bbs_error_log" combined(指定格式)
                ErrorLog "/vhosts/logs/bbs_access_log" 
</VirtualHost>
[root@centos7-7 httpd]#mkdir -pv /vhosts/{www,bbs}/htdocs  /vhosts/logs
[root@centos7-7 httpd]#vim /vhosts/bbs/htdocs/index.html
/vhost/bbs/htdocs/index.html
[root@centos7-7 httpd]#vim /vhosts/www/htdocs/index.html 
/vhosts/www/htdocs/index.html
[root@centos7-7 httpd]#ifconfig eth0:1 192.168.32.77/24 up
[root@centos7-7 httpd]#systemctl restart httpd

构建实验(只够一个ip地址都使用80端口时,名字至关重要,不一样就可以)

[root@centos7-7 httpd]#vim conf.d/www.conf 
<VirtualHost *:80>
    ServerName www.dushan.com           使用名字到达
    ServerAlias wwws.dushan.com         也可设置别名,这样两个名字都可
    DocumentRoot "/vhosts/www/htdocs"
        <Direcotry "/vhosts/www/htdocs">
                Options none
                AllowOverride none
                Require all Granted
        </Directory>
                CustomLog "/vhosts/logs/www_error_log" combined(指定格式)
                ErrorLog "/vhosts/logs/www_access_log" 
</VirtualHost>

[root@centos7-7 httpd]#vim conf.d/bbs.conf 
<VirtualHost *:80>
    ServerName bbs.dushan.com           设置名字
    DocumentRoot "/vhosts/bbs/htdocs"
        <Direcotry "/vhosts/bbs/htdocs">
                Options none
                AllowOverride none
                Require all Granted
        </Directory>
                CustomLog "/vhosts/logs/bbs_error_log" combined(指定格式)
                ErrorLog "/vhosts/logs/bbs_access_log" 
[root@centos7-7 ~]#vim /etc/hosts
192.168.32.7   www.dushan.com wwws.dushan.com bbs.dushan.com

九、keepAlive 保持持久连接,以满足上百个资源加载时提升性能

服务器负载很轻时可打开,服务器负载较重时注意关闭。
KeepAlive on下包含两个方面:
1、KeepAliveTimeout #ms 保持连接超时时长
2、MaxKeepAliveRequests 100 最大并发请求数量
两者同时生效,哪个先到达,遵循哪个

[root@centos7-7 ~]# vim /etc/httpd/conf/httpd.conf
...
KeepAlive on
KeepAlive Timeout 10s
MaxKeepAliveRequests 100
[root@centos7-7 ~]#httpd -t
Syntax OK
[root@centos7-7 ~]#!sys
systemctl restart httpd

十、mod_deflate 模块

1、使用mod_deflate模块压缩页面优化传输速度
2、适用场景:
(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持。
(2) 压缩适于压缩的资源,例如文本文件

LoadModule deflate_module modules/mod_deflate.so 装载模块
SetOutputFilter DEFLATE                          利用过滤器指定哪些类型
类型:
# Restrict compression to these MIME types            
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css

3、Level of compression (Highest 9 - Lowest 1) 设定压缩比
DeflateCompressionLevel 9 指定命令

4、排除特定旧版本的浏览器,不支持压缩
1)Netscape 4.x 只压缩text/html

BrowserMatch ^Mozilla/4 gzip-only-text/html

2)Netscape 4.06-08三个版本 不压缩

BrowserMatch ^Mozilla/4\.0[678] no-gzip

3)Internet Explorer标识本身为“Mozilla / 4”,但实际上是能够处理请求的压缩。
如果用户代理首部匹配字符串“MSIE”(“B”为单词边界”),就关闭之前定
义的限制

BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

实验环境

[root@centos7-7 ~]#httpd -M |grep deflate   查看是否加载
 deflate_module (shared)
[root@centos7-7 ~]#vim /etc/httpd/conf.d/deflate.conf
SetOutputFilter DEFLATE
# Restrict compression to these MIME types            
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css
DeflateCompressionLevel 6
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
[root@centos7-7 ~]#httpd -t
Syntax OK
[root@centos7-7 ~]#!sys
systemctl restart httpd
[root@centos7-7 ~]#cp /var/log/messages /var/www/html/
admin/             index.html         index.html.origin  
[root@centos7-7 ~]#cp /var/log/messages /var/www/html/index.html
cp: overwrite ‘/var/www/html/index.html’? y
[root@centos7-7 ~]#ll /var/www/html/
total 1296
drwxr-xr-x 2 root root      24 Oct 19 12:33 admin
-rw-r--r-- 1 root root 1321814 Oct 19 22:03 index.html  注意权限,若无读权限则apache用户无法访问chmod +r /var/www/html/index.html

十一、https

1、https:http over ssl 基于ssl的http

2、SSL会话的简化过程

(1) 客户端发送可供选择的加密方式,并向服务器请求证书
(2) 服务器端发送证书以及选定的加密方式给客户端
(3) 客户端取得证书并进行证书验证
如果信任给其发证书的CA
(a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名
(b) 验证证书的内容的合法性:完整性验证
(c) 检查证书的有效期限
(d) 检查证书是否被吊销
(e) 证书中拥有者的名字,与访问的目标主机要一致
(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完
成密钥交换
(5) 服务用此密钥加密用户请求的资源,响应给客户端
• 注意:SSL是基于IP地址实现,单IP的主机仅可以使用一个https虚拟主机

3、https实现

• (1) 为服务器申请数字证书
测试:通过私建CA发证书
(a) 创建私有CA
(b) 在服务器创建证书签署请求
(c) CA签证
• (2) 配置httpd支持使用ssl,及使用的证书
yum -y install mod_ssl
配置文件:/etc/httpd/conf.d/ssl.conf
DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile
• (3) 测试基于https访问相应的主机
openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]

实验环境,直接生成一个秘钥举例

[root@centos7-7 ~]#cd /etc/httpd
[root@centos7-7 httpd]#ls
conf  conf.d  conf.modules.d  logs  modules  run
[root@centos7-7 httpd]#mkdir ssl
[root@centos7-7 httpd]#cd ssl/
[root@centos7-7 ssl]#(umask 077; openssl genrsa -out httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
......................................................................................................................+++
..................................+++
e is 65537 (0x10001)
[root@centos7-7 ssl]#ll
total 4
-rw------- 1 root root 1675 Oct 19 22:25 httpd.key
[root@centos7-7 ssl]#openssl req -new -x509 -key ./httpd.key -out httpd.crt -subj "/CN=www.dushan.com/0=dushan" -days 3650
[root@centos7-7 ssl]#yum install mod_ssl
[root@centos7-7 ssl]#cd /etc/httpd/conf.d/
[root@centos7-7 conf.d]#vim ssl.conf 
#   Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate.  If
# the certificate is encrypted, then you will be prompted for a
# pass phrase.  Note that a kill -HUP will prompt again.  A new
# certificate can be generated using the genkey(1) command.
SSLCertificateFile /etc/httpd/ssl/httpd.crt             更改路径

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key          更改路径

十二、http重定向https

将http请求转发至https的URL

  • 重定向
    Redirect [status] URL-path URL

  • status状态:

• Permanent: 返回永久重定向状态码 301

• Temp:返回临时重定向状态码302. 此为默认值

添加至配置文件结尾即可:
vim /etc/httpd/conf/httpd.conf 或 /etc/httpd/conf.d/*.conf 
Redirect temp / https://www.dushan.com/

Linux下安装Apache httpd

阅读数 20236

没有更多推荐了,返回首页