您的位置:首页 > 理论基础 > 计算机网络

使用rpm格式安装并配置httpd(Apache HTTP Server)

2014-06-12 15:17 555 查看
常用的WEB服务器软件:httpd(apache,a patchy server),nginx,lighttpd,IIS;
httpd:由Apache软件基金会开发的一个开放源码的网页服务器,是目前最流行的Web服务器软件之一;
httpd相关软件包说明
httpd 主软件包;
httpd-devel http相关的开发包;
httpd-manual 官方提供的手册;
httpd-tools httpd相关的工具(包括一些测试工具);
安装httpd(rhel6系统,使用rpm安装)
yum install -y httpd
服务脚本:/etc/rc.d/init.d/httpd;
工作目录:/etc/httpd;
配置文件存放目录:/etc/httpd/conf/;
主配置文件:/etc/httpd/conf/httpd.conf;
扩展配置文件:/etc/httpd/conf.d/*.conf;
socket:http(80/tcp),https(443/tcp);
网页文件存放目录:/var/www/html/
CGI脚本目录:/var/www/cgi-bin/
模块目录:/etc/httpd/modules(链接到/usr/lib/httpd/modules);
日志目录:/etc/httpd/logs(链接到/var/log/httpd);
启动httpd服务:service httpd start;
注意:在rhel系列中,启动httpd后会默认打开一个测试页面,如果不想显示该测试页,使用"mv -f /etc/httpd/conf.d/welcome.conf webcome.conf.bak",并重启服务即可;
配置文件语法
1,指令不区分大小写,但通常建议将首字母大写;
2,指令的值可能会区分大小写(比如路径);
3,指令和值之间用空格隔开即可;
4,某些指令可以重复出现多次(如listen);
5,紧跟在"#"符号后没有空格的为指令,是可以启用的,"#"符号后面紧跟有空格的为注释;
主配置文件的构成
1,全局配置:对主服务器或虚拟主机都生效,并且有些功能是服务器自身的工作属性;
2,主服务器:与主站相关的设置;
3,虚拟主机:虚拟主机相关的设置;
注意:主服务器和虚拟主机不能同时启用;
主配置文件的设置:/etc/httpd/conf/httpd.conf;
### Section 1: Global Environment
ServerTokens OS 定义页面显示的服务器信息详细程度,可以指定其他参数;
ServerRoot "/etc/httpd" 定义服务器的工作的根目录;
PidFile run/httpd.pid 定义pid配置文件的路径(这是一个相对路径);
Timeout 60 TCP连接的超时时间(如三次握手等等);
KeepAlive Off 是否打开长连接,开启后有助于提升服务器性能,但如果在比较繁忙的服务器中,应考虑是否开启(服务器处理客户端的数量是有限的,要避免客户端长时间占用资源);
MaxKeepAliveRequests 100 长连接请求的最大资源数,达到该限制后断开链接;
KeepAliveTimeout 15
<IfModule prefork.c> prefork模型的相关设置;
StartServers 8 服务器启动多少个空闲进程;
MinSpareServers 5 最少空闲进程(如果8个空闲进程使用了4个,则会再启动一个空闲进程,保证存在5个空闲进程);
MaxSpareServers 20 最大空闲进程(如果有500个用户访问,退出了450个,则kill掉30个);
ServerLimit 256 为MaxClients设定的上限值(需要将服务器进程kill掉,然后在重启)
MaxClients 256 最大客户端数量(最大允许多少个连接请求);
MaxRequestsPerChild 4000 一个进程最多响应多少个用户请求,当接收用户请求4000次后,将其kill掉,生成新的进程响应用户请求;
</IfModule>
<IfModule worker.c> worker模型的相关设置;
StartServers 4 默认启动的进程数;
MaxClients 300 最大客户端数量(最大允许多少个连接请求);
MinSpareThreads 25 最小空闲线程(所有进程的线程数之和);
MaxSpareThreads 75 最大空闲线程(所有进程的线程数之和);
ThreadsPerChild 25 一个进程生成多少个线程;
MaxRequestsPerChild 0 每个进程响应多少个用户请求(由于是由线程来控制,为0表示不限制);
</IfModule>
Listen 12.34.56.78:80 httpd监听的IP地址和端口,可以不指定IP地址表示监听本机所有地址(listen可以出现多次,用于监听多个端口);

LoadModule auth_basic_module modules/mod_auth_basic.so 指定httpd启动时装载的模块(前后分别为"模块名称/模块路径",路径为相对路径);
Include conf.d/*.conf 装载额外的配置文件(相对路径);
ExtendedStatus On 使用status时,是否显示更详细的信息(默认注释掉);
User apache httpd的work进程使用的用户;
Group apache httpd的work进程使用的组名;
### Section 2: 'Main' server configuration
ServerAdmin root@localhost 服务器管理员的邮箱地址;
ServerName www.example.com:80 服务器名称(如果不启用此指令,则服务器启动时会试图反解当前主机的IP地址,如果解析成功,则引用此主机名作为服务器名称,否则会使用"127.0.0.1"来作为默认主机名);
DocumentRoot "/var/www/html" 网页文件存放的根目录;
<Directory "/var/www/html"> 定义一个网站容器;
Options FollowSymLinks 定义容器名称内文件被访问时的访问属性;
Options的参数
Indexes 允许索引目录,即没有默认页面时,列出网页文件列表(生成环境中应该关闭,如果作为下载站点时可以开启);
none 不支持任何参数;
FollowSymLinks 允许符号链接(是否允许访问页面中的符号链接所指向的源文件,如果没有必要可以关闭,在一定程度上可以提高服务器性能);
Includes 允许执行服务器端包含"SSI"的文档,为了安全起见,应该关闭;
ExecCGI 是否允许执行CGI脚本;
MultViews 内容协商机制,根据客户端来源的语言来判定显示相匹配的的网页(消耗资源,没有必要不必开启);
All 支持所有参数;
AllowOverride None 是否使用.htacess覆写访问权限;
AuthConfig 需要进程用户认证后才可以访问网页;
Order allow,deny 定义基于主机的访问控制功能,可以实现基于IP、网络地址或主机名来定义,deny写在后面表示deny所有;
Allow from all 允许所有的主机访问,或者使用Deny from all拒绝所有主机,也可以使用以下写法:
Deny from 192.168.0.0/24
Allow from 192.168.1.0/24 172.16.100.0/24 .edu apache.org www.example.com 172.16
</Directory>
注意: 目录可能会继承父目录的选项,在选择前"-”符号表示取消从父目录继承的某项功能;
<IfModule mod_userdir.c> 是否支持用户在个人的家目录中建立网页文件,使用http://xxx/~home/的方式访问;
UserDir disabled 默认不允许,如果要启用此功能,将此项注释,去掉#UserDir public_html的注释,用户建立public_html目录,然后将网页文件放到该目录即可;
</IfModule>
DirectoryIndex index.html index.html.var 定义访问的默认页面,从左向右匹配;
AccessFileName .htaccess apache的每目录访问控制,在对应的目录下创建".htacess"文件,将访问控制机制写入即可,但会降低apache的执行效率,生产中通常禁用;
<Files ~ "^\.ht"> 模式匹配,以ht开头的文件,保障此类开头文件的安全性;
Order allow,deny
Deny from all
Satisfy All
</Files>
TypesConfig /etc/mime.types 定义httpd支持的mime类型的文件;
DefaultType text/plain 如果没有指定类型,默认使用的类型为:明文的纯文本类型;
HostnameLookups Off 日志记录中,是否将每个访问用户的IP地址反解成主机名(消耗系统资源,建议不启用);
EnableSendfile off
ErrorLog logs/error_log 定义错误日志的存放位置;
LogLevel warn 定义日志级别;
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 定义日志格式,最后面的一项为日志格式的名称;
%h 客户端地址;
%l 远端主机的登录名称(远程主机登录系统的用户名);
%u 登录网站使用的用户;
%t 日志事件产生的时间;
%r 请求报文的第一行(访问方法,URL获取的资源以及版本号);
%>s 最后一个请求对应的状态码;
%b 响应报文的大小;
%{Referer}i 从哪个页面的链接过来的;
%{User-Agent}i 客户端浏览器的类型;
CustomLog logs/access_log combined 定义访问日志格式的类型;
Alias /icons/ "/var/www/icons/" 定义路径别名;
注意:Alias /luntan "/bbs/forum" 如果luntan后面加了/符号,后面forum也一定要加/符号,如果没加则都不加;
ScriptAlias 定义执行CGI脚本的目录;
配置用户认证
<Directory "/var/www/html">
AllowOverride AuthConfig
AuthType Basic 使用基本用户认证;
AuthName "Restricted Site..." 认证提示信息;
AuthUserFile “/etc/httpd/conf/htpasswd” 认证用户的账号密码文件;
Require valid-user valid-user表示允许密码文件中所有用户登录,也可以指定特定用户;
AuthGroupFile "/etc/httpd/conf/group" 指定组名和包含的用户(语法"myusers:hadoop tom");
Require group groupname 允许哪些组可以登录;
Order allow,deny
Allow from all
</Directory>
### Section 3: Virtual Hosts
定义虚拟主机前,最好先取消中心主机,注释中心的DocumentRoot即可;
配置基于IP的虚拟主机
<VirtualHost 192.168.1.1:80>
ServerName www.example.com 域名;
DocumentRoot "/var/www/html" 网页文件存放目录;
</VirtualHost>
<VirtualHost 192.168.1.2:80>
ServerName www.linux.com
DocumentRoot "/var/www/linux"
</VirtualHost>
配置基于端口的虚拟主机
<VirtualHost 192.168.1.1:80>
ServerName www.example.com
DocumentRoot "/var/www/html"
CustomLog logs/example.com-access_log common 访问日志的记录位置和类型;
</VirtualHost>
<VirtualHost 192.168.1.1:8080> 需要在Listen指令上添加监听8080端口;
ServerName www.linux.com
DocumentRoot "/var/www/linux"
CustomLog logs/linux.com-access_log common 访问日志的记录位置和类型;
</VirtualHost>
配置基于域名的虚拟主机:使用基于域名的虚拟主机,需要启用"NameVirtualHost *:80"指令,可以指定监听的地址,*表示监听所有IP;
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot "/var/www/html"
CustomLog logs/example.com-access_log common
<Directory "/var/www/html">
Options none
AllowOverride none
Order deny,allow
Deny from 192.168.10.1
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName www.linux.com
DocumentRoot "/var/www/linux"
CustomLog logs/linux.com-access_log common
<Directory "/var/www/linux">
Options none
AllowOverride AuthConfig
AuthType Basic
AuthName "Restricted Site..."
AuthUserFile “/etc/httpd/conf/htpassw"
Require valid-user
</Directory>
</VirtualHost>
定义默认虚拟主机:需将其放在所有虚拟主机的最上面;
<VirtualHost _default_:80>
DocumentRoot "/var/www/default"
</VirtualHost>
配置httpd的status功能
<Location /status>
SetHandler server-status 实现所有匹配到的文件由一个处理器来处理,server-status可以显示服务器的状态信息;
Order deny,allow
Deny from all
Allow from .example.com 生产中应该对用户访问status做认证;
</Location>
配置基于openssl的https服务
1,安装ssl模块:yum install -y mod_ssl,安装后会生成以下文件
/etc/httpd/conf.d/ssl.conf ssl的配置文件,需要装载到httpd的主配置文件中(重启httpd会自动装载);
/usr/lib/httpd/modules/mod_ssl.so ssl的模块;
/var/cache/mod_ssl ssl会话的缓存目录
2,为服务器提供证书(测试环境中,可以自建CA,然后使用自签名证书);
3,配置https服务:编辑/etc/httpd/conf.d/ssl.conf
<VirtualHost 192.168.1.1:443>
DocumentRoot "/var/www/html"
ServerName www.example.com
ErrorLog logs/ssl_error_log 错误日志的存放位置;
TransferLog logs/ssl_access_log 访问日志的存放位置;
LogLevel warm 记录日志的级别;
SSLengine on 是否启用ssl功能;
SSLProtocal all -SSLv2 支持哪些ssl协议,ALL表示所有,-SSLv2表示不支持ssl v2;
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSL支持哪些加密机制,ALL表示所有,!表示排除;
SSLCertificateFile /etc/pki/tls/certs/localhost.crt 证书文件存放的位置;
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key 私钥文件的存放位置;
注意
1,证书中的主机名称必须与客户浏览器访问的名称一致;
2,一个IP地址上只能建立一个SSL主机;
3,将CA的证书(如cacert.pem)下载到客户机,改名为"cacert.crt",然后导入到客户端浏览器的"受信任的根证书颁发机构"中,客户端浏览器打开https就不会报错;
4,生产环境中的服务器,建议向权威的CA机构申请证书;
httpd配置文件语法测试
service httpd configtest 或 httpd -t;两个命令的效果是一样的,前者也是调用的后者;
注意:大部分配置被修改后,使用"service httpd reload"即可生效,而修改监听地址和端口需要重启服务才生效;
htpasswd:创建用户密码文件的命令;
-c:创建密码文件,只有在第一次的时候使用,如果密码文件已经存在,则将文件内的用户清空;
-m:用户的密码以md5格式加密存放;
-D:删除一个用户
htpasswd -c -m /etc/httpd/conf/htpasswd hadoop;
htpasswd -m /etc/httpd/conf/htpasswd tom;
关于<Directory>和<Location>的说明
<Directory "/var/a.org"></Directory> 定义用户访问某个文件系统路径的时候,应该具有何种访问属性;
<Location "/images"></Location> 定义用户访问该URL的时候,具有何种的访问属性;
关于MPM:多道处理模块,用于定义apache响应多个用户请求时所工作的模型;
mpm_winnt:windows专用;
prefork:一个请求用一个进程响应;
worker:一个进程响应多个用户请求;worker是基于线程,其启动多个进程,进程启动后启动多个线程一个请求用一个线程响应;
enent:基于事件驱动模型,一个进程响应多个用户请求;
httpd -l :查看httpd编译所支持的模型,如果没有编译又想使用其他模型可以使用httpd.event或httpd.worker;
在/etc/sysconfig/httpd 文件中可以修改httpd启动的默认模型,在2.2中event为测试模型,不建议使用;2.4默认为event模型;
虚拟主机的类型
基于IP:每个虚拟主机使用不同的IP地址,但使用的端口相同;
基于端口:每个虚拟主机的IP地址相同,但端口不同;
基于域名:每个虚拟主机的IP和端口相同,但使用的域名不用;

本文出自 “AD” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: