1.web服务器的主要操作:
⑴建立连接——接受或拒绝客户端的连接请求;
⑵接受请求——通过网络读取HTTP报文;
⑶处理请求——解析请求报文并作出相应的动作;
⑷访问资源——访问请求报文中的相关资源;
⑸生成响应报文——使用正确的首部生成响应报文;
⑹发送响应报文——向客户端发送生成的响应报文;
⑺记录日志——将已完成的HTTP事务记录进日志文件;
2.httpd特性:
(1)事先创建进程,如果此刻没有客户端请求就作为空闲进程等待直到有客户端发出请求;
(2)根据需要维持适当数目的进程,不会在完成很多请求后还保持很多的进程,而是杀死进程之保留一定数目的进程等待客户端连接;
(3)模块化设计,其核心比较小,各种暂不支持的功能可以以模块的方式添加,而且支持运行时配置,支持单独编译模块;
3.http进程
主导进程:root用户 root组
工作进程:apache用户 apache组
[root@localhost conf]# ps aux | grep httpd
root 12388 0.0 0.3 11760 3388 ? Ss 03:30 0:02 /usr/sbin/httpd
apache 12391 0.0 0.2 11892 2628 ? S 03:30 0:00 /usr/sbin/httpd
apache 12392 0.0 0.2 11952 2864 ? S 03:30 0:00 /usr/sbin/httpd
apache 12393 0.0 0.2 11892 2668 ? S 03:30 0:00 /usr/sbin/httpd
apache 12394 0.0 0.2 11952 2876 ? S 03:30 0:00 /usr/sbin/httpd
apache 12395 0.0 0.2 11892 2632 ? S 03:30 0:00 /usr/sbin/httpd
apache 12396 0.0 0.2 11952 2864 ? S 03:30 0:00 /usr/sbin/httpd
apache 12397 0.0 0.2 11952 2856 ? S 03:30 0:00 /usr/sbin/httpd
apache 12398 0.0 0.2 11760 2132 ? S 03:30 0:00 /usr/sbin/httpd
4.多路处理模块MPM
下表列出了不同操作系统上默认的MPM。如果你在编译时没有进行选择(在使用configure
脚本时用 --with-mpm=NAME
选项指定MPM,NAME就是你想使用的MPM的名称),这将是默认选择的MPM。
(1)prefork 一个请求用一个进程响应;
(2)worker 一个请求用一个线程响应;就是请求会生成多个进程,每个进程再生成多个线程来响应请求;
(3)event 一个进程处理多个请求;
可用httpd -l来查看httpd.prefork被编译到服务器中的模块
[root@localhost conf]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
同理,httpd.worker -l
[root@localhost conf]# httpd.worker -l
Compiled in modules:
core.c
worker.c
http_core.c
mod_so.c
还有,httpd.event -l
[root@localhost conf]# httpd.event -l
Compiled in modules:
core.c
event.c
http_core.c
mod_so.c
对于prefork这一种MPM是默认的,如果想转换成worker的可以编辑/etc/sysconfig/httpd文件
[root@localhost 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 #启用即可
#
# To pass additional options (for instance, -D definitions) to the
# httpd binary at startup, set OPTIONS here.
#
#OPTIONS=
#
# By default, the httpd process is started in the C locale; to
# change the locale in which the server runs, the HTTPD_LANG
# variable can be set.
#
#HTTPD_LANG=C
#
# By default, the httpd process will create the file
# /var/run/httpd/httpd.pid in which it records its process
# identification number when it starts. If an alternate location is
# specified in httpd.conf (via the PidFile directive), the new
# location needs to be reported in the PIDFILE.
#
#PIDFILE=/var/run/httpd/httpd.pid
5.配置httpd支持用户认证
一般的,Apache的认证授权是以目录为单位的,通过在特定目录中配置相关的指令来保护该目录中的文件不被非法访问
5.1 配置主文件中修改此段为
<Directory "/var/www/html">
Options Indexes FollowSymLinks #是否支持目录索引和跟随符号链接的,可根据需要配置
AllowOverride none #表示不允许覆盖当前配置,即不使用.htaccess
AuthType Basic #设置认证类型;其值有两种,一是Basic基本类型,另一个是Digest摘要类型
AuthName "LiWei" #设置认证名称,可以使任意的字符串
AuthUserFile "/etc/httpd/conf/httpd_passwd" #指定认证时所采用的用户口令文件及位置,还可以AuthGroupFile来指定认证时
Require valid-user #授权给合法的用户,还可指定文件中的特定用户 所采用的组文件及位置
</Directory>
5.2 创建口令文件和用户
htpasswd -c -m /etc/httpd/conf/httpd_passwd http1
其中-c表示创建,只在第一次创建时使用,以后再添加用户不要带该参数
口令文件中内容:
[root@localhost conf]# cat httpd_passwd
http1:$apr1$BGiwXXiy$R4lByo6WISqhSZDK/lU5D0
重启服务后再浏览器上测试即可
5.3 还有一种方法就是在主配置文件中只有
<Directory "/var/www/html">
AllowOverride AuthConfig #表示允许覆盖,即允许在文件.htaccess中手机用认证授权
</Directory>
然后再需要认证授权的目录
/var/www/html目录中创建一个名为.htaccess的文件,内容为
AuthType Basic
AuthName "LiWei"
AuthUserFile "/etc/httpd/conf/httpd_passwd"
Require valid-user
接着创建口令文件并把其属主改为apache
最后重启服务后在浏览器上测试;
6. 对于组的认证授权
6.1 主配置文件中修改为
AllowOverride none
AuthType Basic
AuthName "LiWei"
AuthUserFile "/etc/httpd/conf/httpd_passwd" #此行不可缺即不可缺少用户的密码文件
AuthGroupFile "/etc/httpd/conf/httpd_group" #指定组文件
Require
group httpgroup #指定httpgroup组中的用户可以认证授权登录
6.2 创建该组并导入用户
[root@localhost conf]# pwd
/etc/httpd/conf
[root@localhost conf]# vim httpd_group
httpgroup:http1 #将多个用户添加进来,用户之间用空格隔开,且用户需要事先创建好密码文件;
6.3 测试是否有语法错误并重启服务并在浏览器上测试
[root@localhost conf]# httpd -t
Syntax OK
注意:在出错时多去看一下httpd的错误日志/var/log/httod/error_log找出错误