httpd:
安装方法:yum -y install httpd
rpm -ql httpd #查看有哪些配置文件的;
/etc/httpd/conf/magic #定义本地主机如何识别mime格式的,通过mime编码而来的其他的非纯文本文档。
/etc/rc.d/init.d/httpd #服务脚本的启动文件
/etc/sysconfig/httpd #服务脚本的配置文件
我们将/etc/sysconfig/httpd下面的配置文件进行更改,我们的服务脚本就可以允许在不同的模式下了。
/usr/bin/ab #apache压力测试所用的配置文件;
/usr/bin/htpasswd #基于权限进行创建;
下面我们查看下服务是否开启使用这个命令:
[[email protected] test]# netstat -tnlp |grep 80
tcp 0 0 :::80 :::* LISTEN 27259/httpd
[[email protected] test]# ps -aux |grep http
[[email protected] test]# ps -aux |grep http
Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.7/FAQ
root 27259 0.0 0.3 175308 3192 ? Ss 17:46 0:00 /usr/sbin/httpd
apache 27260 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27261 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27262 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27263 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27264 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27266 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27267 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/httpd
apache 27268 0.0 0.2 175308 2380 ? S 17:46 0:00 /usr/sbin/htt
这个时候就可以在客户端查看web服务器的欢迎页面了;这个时候我们看到的这个欢迎页面的默认地址为/etc/httpd/conf.d/welcom.conf
修改web服务器的页面路径下的配置文件:
[[email protected] html]# pwd
/var/www/html
[[email protected] html]# cat a.html
<html>
<tittle>haha</tittle>
<body>
welcom to my test file.
</body>
</html>
[[email protected] html]# service httpd restart
这个时候,我们去访问的时候,给个页面。发现还是没法查看,因为默认的页面需要手动去指定。
[[email protected] conf]# pwd
/etc/httpd/conf
[[email protected] conf]# grep "Section" httpd.conf
### Section 1: Global Environment
### Section 2: ‘Main‘ server configuration
### Section 3: Virtual Hosts
注意:要有主服务器段,就不能有虚拟主机,有虚拟主机就不能有主服务器段。因为我们安装的apache是系统自带的,所以版本比较低。
[[email protected] conf]# more /etc/httpd/conf/httpd.conf
KeepAlive Off #是否开启长链接;
长链接的时间针对不同的服务器来讲,需要进行不同的测试。
我们可以使用ab参数进行测试,LoadRunner。
APACHE MPM模块:
Apache HTTP 服务器被设计为一个功能强大,并且灵活的 web 服务器, 可以在很多平台与环境中工作。不同平台和不同的环境往往需要不同 的特性,或可能以不同的方式实现相同的特性最有效率。Apache httpd 通过模块化的设计来适应各种环境。这种设计允许网站管理员通过在 编译时或运行时,选择哪些模块将会加载在服务器中,来选择服务器特性。
Apache HTTP 服务器 2.0 扩展此模块化设计到最基本的 web 服务器功能。 它提供了可以选择的多处理模块(MPM),用来绑定到网络端口上,接受请求, 以及调度子进程处理请求。
扩展到这一级别的服务器模块化设计,带来两个重要的好处:
Apache httpd 能更优雅,更高效率的支持不同的平台。尤其是 Apache httpd 的 Windows 版本现在更有效率了,因为 mpm_winnt 能使用原生网络特性取代在 Apache httpd 1.3 中使用的 POSIX 层。它也可以扩展到其它平台 来使用专用的 MPM。
Apache httpd 能更好的为有特殊要求的站点定制。例如,要求 更高伸缩性的站点可以选择使用线程的 MPM,即 worker 或 event; 需要可靠性或者与旧软件兼容的站点可以使用 prefork。
在用户看来,MPM 很像其它 Apache httpd 模块。主要是区别是,在任何时间, 必须有一个,而且只有一个 MPM 加载到服务器中。可用的 MPM 列表位于 模块索引页面
下表列出了不同系统的默认 MPM。如果你不在编译时选择,那么它就是你将要使用的 MPM。
Netware mpm_netware
OS/2 mpmt_os2
Unix prefork,worker 或 event,取决于平台特性
Windows mpm_winnt
在 Unix 或类似平台中,MPM 可以构建为动态模块,与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过修改 LoadModule 指令内容来改变 MPM,而不用重新构建服务器程序。
在执行 configure 脚本时,使用 --enable-mpms-shared 选项可以启用此特性。 当给出的参数为 all 时,所有此平台支持的 MPM 模块都会被安装。还可以在参数中给出模块列表。
默认 MPM,可以自动选择或者在执行 configure 脚本时通过 --with-mpm 选项来指定,然后出现在生成的服务器配置文件中。 编辑 LoadModule 指令内容可以选择不同的 MPM。
MPM: Multi Path Modules (多道处理模块)定义apache来处理多个用户请求时候的模型 98分钟
mpm_winnt
prefork (一个请求用一个进程响应)
worker (一个请求用一个线程响应) (web服务器生成多个进程,同时每个进程可以生成多个线程,用一个线程响应一个用户请求。默认情况下,服务启动的时候,
生成两个进程。linux上经过测试发现worker模型没有event模型好)
event (一个进程处理多个请求) 2.4以后默认就支持event这个机制。多路复用多线程web服务器
2.2默认使用的是prefork,稳定性可以。
当前服务器使用的模块有哪些:可以使用如下命令:这些都是编译好的。
[[email protected] conf]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
[[email protected] conf]# rpm -ql httpd|grep bin
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
如果想使用某一个模型只需要更改另外一个配置文件即可:
[[email protected] conf]# cat /etc/sysconfig/httpd #全局的配置文件
# Configuration file for the httpd service.
#
# The default processing model (MPM) is the process-based
# ‘prefork‘ model. A thread-based model, ‘worker‘, is also
# available, but does not work with some modules (such as PHP).
# The service must be stopped before changing this variable.
#
#HTTPD=/usr/sbin/httpd.worker
2.2中event不建议用,bug多。测试版本。2.4以后使用event比较好。
以上说明了如何在redhat上切换MPM可执行的对应程序的。而这个可执行程序编译完成后,就确定使用哪一些MPM了。因此红帽编译了三次,生成了三个MPM。
同时在主配置文件中,有三个模型.下面说明模块的使用属性:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 #最多允许多少个用户请求
MaxClients 256 #最多允许多少个用户,修改这个参数之后需要将此进程kill掉,然后再开启。
MaxRequestsPerChild 4000 #一个进程最多响应多少个用户请求,达到这个次数之后,无论如何将其kill掉,再生成一个新的进程。
</IfModule> #注意所有的数据都需要自己进行测试。
<IfModule worker.c>
StartServers 2 #默认启动的进程数
MaxClients 150
MinSpareThreads 25 #最小空闲线程
MaxSpareThreads 75 #最大空闲线程数
ThreadsPerChild 25 #一个进程可以生成多少个线程
MaxRequestsPerChild 0 #每一个进程最多响应多少个请求,因为进程不处理用户请求,所以设置为0,表示不做限定。
</IfModule>
#Listen 12.34.56.78:80
Listen 80#说明监听当前主机上的所有80端口。listen指令可以出现多次。
LoadModules#指定apache要装载的模块;
Include conf.d/*.conf
User apache #开启服务器所用的用户
Group apache #开启服务所用的组名
httpd属性配置:
[[email protected] conf]# grep "Section" httpd.conf
### Section 1: Global Environment
### Section 2: ‘Main‘ server configuration
### Section 3: Virtual Hosts
分为三段当你,2,3段是冲突的。只能启用一个。
UseCanonicalName Off #使用正式名称;
DocumentRoot "/var/www/html" #文档根目录,这个目录也是可以更改的;
URL路径与本地系统路径不是一个概念;URL路径是对应于DocumentRoot路径而言的。同时默认需要定义它可以被那些用户访问。
options定义其下的路径如何被访问,默认路径的权限这里也做限定。
这个就是做默认路径的访问控制的;
<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.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks #定义索引文件,将该目录下的所有内容都看到,默认是开放的,需要禁用。但是
当我们做下载的时候不需要禁用。Indexes 允许索引目录的。Options后面加none表示所有都不支持。
FollowSymLinks是否支持链接文件。这里的是允许使用符号链接。
Options有五个默认没有任何功能;
Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
None: 不支持任何选项
Indexes: 允许索引目录
FollowSynLinks: 允许访问符号链接指向的原文件
Includes: 允许执行服务端包含(SSI)SEVER SIDE INCLUDE #这个也不安全,除非特殊需要
SymLinksifOwnerMatch:允许执行符号链接,同时制定属主跟httpd进程一直;
ExecCGI: 允许运行CGI脚本;是否允许CGI脚本。有的时候需要打开这个功能;
MultiViews:多视图的一种机制;
All: 支持所有选项;
#
# 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 #是否允许覆盖
AllowOverride Authconfig #
#
# Controls who can get stuff from this server.
#
# Order allow,deny #用于定义IP或基于主机的访问控制功能的。定义列表,先allow,后deny。deny是默认值。allow和deny的次序很关键。
# Allow from all #仅允许172.16.100.0访问;
#拒绝:192.168.0.1访问;
Order deny,allow
deny from 192.168.0.1 172.16.100.1
</Directory>
地址的表示方式:
IP
network/netmask
HOSTNAME: www.a.com
DOMAINNAME: zledu.com
Partial IP: 172.16, 172.16.0.0/16
在http2.4之后,不使用allow和deny的机制了。
修改完配置文件之后,可以使用httpd -t这个选项来查看配置文件的语法是否正确。
自己如何访问自己?使用elinks纯文本的浏览器。在纯文本的界面下,浏览网页的一个工具。
远程链接的情况下,由于语言不匹配可能会出现乱码。
elinks http://172.16.100.1
-dump 表示把网页内容显示完成之后,立即退出。
-source 显示网页的源码;
AllowOverride Authconfig #如果改成none,就不会去读取.htaccess配置文件。
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /usr/local/apache/passwd/passwords
Require user zl
这个文件的创建只能用某一特定命令:
htpasswd -c -m AuthUserFile /usr/local/apache/passwd/passwords zl
如果要添加第二个用户将-c参数去掉即可。
htpasswd -m AuthUserFile /usr/local/apache/passwd/passwords zl2
option:-D删除用户时使用。
AuthType Basic
AuthName "By Invitation Only"
# Optional line:
AuthBasicProvider file
AuthUserFile /usr/local/apache/passwd/passwords
AuthGroupFile /usr/local/apache/passwd/groups
Require group GroupName
如果使用Group验证,则需要事先将这几个用户进行创建,创建完成后,编辑某一文件,在其下面写上:
GroupName: rbowen dpitts sungo rshersey
Require valid-user #说明只要是AuthUserFile或者AuthGroupFile里面有的用户都可以拿过来使用。
httpd -M 查看系统装的http的的模块文件有哪些。
PV:page view页面访问量。网站统计值里面经常用的指标;PV是按照天数来统计的;每天的页面访问量。必须是一个完整的页面才行。
UV:USER VIEW ;每天的独立IP访问量。
apache:服务器
虚拟主机:
apache服务:
中心主机
虚拟主机
基于IP
IP1:80
IP2:80
基于端口
IP:80
IP:8080
基于域名
IP:80
主机名不同
www.zldu.com
www.a.org
www2.a.org
www.b.net
基于主机名,虽然也经过地址解析,但是http协议自身所带的http头信息里面的host能够帮我们找到正确的资源。
apache:
中心主机
虚拟主机
apache 2.4以后想定义什么样的主机就定义什么样的主机。
ServerName:
ServerAlias: #服务器也是可以有别名的;
DocumentRoot /www/a.org/
<Directory "/www/a.org"> #Directory封装的是文件系统路径
Option
AllowOverride
</Directory>
Alias
ErrorLog
CustomLog
<Location "/images"> #定义URL的时候用的;所使用的方法只有Get方法,其他任何方法都不支持。
ScriptAlias #允许执行CGI脚本的路径;有了CGI技术,我们的APACHE进程就能够通过CGI协议调用另外一个进程,使其允许一段程序;将其允许结果返回给apache。
</Location>
html,text。
MVC
那么如何将这所有的属性用一个容器进行封装:virtualhost
如何使用虚拟主机,得先取消中心主机,注释中心主机的DocumentRoot即可。
虚拟主机的定义:
<VirtualHost HOST>
</VirtualHost>
HOST的格式:
基于IP,HOST的写法
HOST
IP1:80
IP2:80
基于端口:
HOST
IP:80
IP:8080
基于域名:
*:80
ServerName 不同
如何建立自己的虚拟主机呢?方法如下:
编辑vim /etc/httpd/conf/httpd.conf将里面的主配置文档DocumentRoot进行注释;
然后在/etc/httpd/conf.d目录下面建个文件:
virtual.conf
[[email protected] conf.d]# cat virtual.conf
<VirtualHost 172.16.100.1:80>
ServerName www.zledu.com
DocumentRoot "/www/zledu.com"
CustomLog /var/www/httpd/zledu.com/access_log combined
<Directory "/www/d.gov">
Options None
AllowOverride none
Deny from 172.16.100.177
</Directory>
</VirtualHost>
<VirtualHost 172.16.100.2:80>
ServerName www.a.org
DocumentRoot "/www/a.org"
<Directory "/www/a.org">
Options None
AuthOverride authconfig
AuthType basic
AuthName "Restrict area"
AuthUserFile "/etc/httpd/.htpasswd"
Required valid-user
</Directory>
</VirtualHost>
htpasswd -c -m /etc/httpd/.htpasswd tom
htpasswd -m /etc/httpd/.htpasswd jerry
<VirtualHost 172.16.100.2:80>
ServerName www.d.goy
DocumentRoot "/www/d.goy"
</VirtualHost>
<VirtualHost 172.16.100.1:8080>
ServerName www.a.org
DocumentRoot "/www/b.net"
</VirtualHost>
[[email protected] conf.d]#
设定默认虚拟主机
<VirtualHost _default_:80>
DocumentRoot /www/default80
# ...
</VirtualHost>
<VirtualHost _default_:*>
DocumentRoot /www/default
# ...
</VirtualHost>
<Location /status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com
</Location>
服务器的状态信息,一般情况下不开启。只开启给特定IP的特定用户。
基于OPENSSL的HTTPS服务:
client server(443)
ssl协商完成之后,将公钥信息发送给客户端,客户端对整数进行验证,客户端验证完成后,发送一个对称秘钥给服务器端。
客户端要信任证书颁发机构,能够信任别人发的证书所用。
SSL会话在建立的时候跟主机名关系不大。ssl是没法基于主机名进行区分的。
如果服务器只有一个IP地址,ssl的功能只能提供给一个虚拟主机。
yum install mod_ssl
rpm -ql mod_ssl
[[email protected] ~]# rpm -ql mod_ssl
/etc/httpd/conf.d/ssl.conf
/usr/lib64/httpd/modules/mod_ssl.so
/var/cache/mod_ssl
/var/cache/mod_ssl/scache.dir
/var/cache/mod_ssl/scache.pag
/var/cache/mod_ssl/scache.sem
下面模拟100.8做CA;
cd /etc/pki
ls
cd CA/
(umask 077;openssl genrsa -out private/cakey.pem 2048) #生成一个私有钥匙对
ls -l private/
openssl req -new -x509 -key private//cakey.pem -out cacert.pem -days 3655
生成一个自签证书,发给自己。
[[email protected] CA]# mkdir certs crl newcerts
[[email protected] CA]# touch index.txt
[[email protected] CA]# echo 01 >serial
more /etc/pki/tls/openssl.cnf
# the resulting certificates are compatible with Netscape
string_mask = MASK:0x2002
# req_extensions = v3_req # The extensions to add to a cer
tificate request
[ req_distinguished_name ]
countryName = Country Name (2 letter c
ode)
countryName_default = CN
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (
full name)
stateOrProvinceName_default = Henan
localityName = Locality Name (eg, city)
localityName_default = Zhengzhou
0.organizationName = Organization Name (eg, c
ompany)
0.organizationName_default = zl
# we can do this but it is not needed normally :-)
#1.organizationName = Second Organization Name
(eg, company)
#1.organizationName_default = World Wide Web Pty Ltd
organizationalUnitName = Organizational Unit Name
(eg, section)
organizationalUnitName_default =Tech
[[email protected] CA]# openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650
[[email protected] tmp]# rm httpd.c* -f
在172.16.100.1上进行配置:
[[email protected] httpd]# ls
conf conf.d logs modules run
[[email protected] httpd]# mkdir ssl
[[email protected] httpd]# cd ssl
[[email protected] ssl]# ls
[[email protected] ssl]# pwd
/etc/httpd/ssl
[[email protected] ssl]
(umask 077;openssl genrsa 1024 >httpd.key)
[[email protected] ssl]# openssl req -new -key httpd.key -out httpd.csr #生成一个证书颁发请求,注意里面的内容跟配置文件一致;
[[email protected] ssl]# scp httpd.csr 172.16.100.8:/tmp #将证书申请放到172.16.100.8这个服务器上面去;
[[email protected] ssl]# scp 172.16.100.8:/tmp/httpd.crt ./ #将签发好的证书放到本地;
[[email protected] ssl]# cd /etc/httpd/conf.d/
vi ssl.conf
<VirtualHost 172.16.100.1:443>
# General setup for the virtual host, inherited from global configuration
#DocumentRoot "/var/www/html"
#ServerName www.example.com:443
ServerName www.zledu.com
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
将如下目录下的证书给windows进行传输一份,并改名字叫.crt结尾即可。直接安装即可。受信任的证书颁发。
[[email protected] CA]# pwd
/etc/pki/CA
[[email protected] CA]# ls
cacert.pem
做测试的时候,要将这个证书颁发机构给加入到windows服务器里面来。