linux httpd的安装配置和使用

版本

httpd-1.3
httpd-2.0
httpd-2.2
httpd-2.4
目前为止最新的版本是httpd-2.4.6,最新版本配置可能会有所不同

httpd的特性

  • 高度模块化:core + modules
  • DSO: Dynamic Shared Object,查看安装了的模块:httpd -M,查看静态编译入程序的模块:httpd -l
  • MPM:Multipath Processing Module多道处理模块,负责实现网络监听、请求的处理等功能,MPM有很多种,查看当前apache服务所使用的MPM:httpd -l或httpd -V
    • prefork: 多进程模型,每个进程响应一个用户请求;一个主进程,负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;
    • worker: 启动多个进程,每个进程生成多个线程,每个线程响应一个用户请求;
    • event: 启动多个线程,每个线程响应N个请求;

安装

rpm安装
编译安装

程序环境(CentOS6)

服务脚本:/etc/rc.d/init.d/httpd
服务脚本配置文件:/etc/sysconfig/httpd

主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker

配置文件:/etc/httpd/conf
主配置文件:/etc/httpd/conf/httpd.conf
扩展配置:/etc/httpd/conf.d/*.conf

日志文件目录:/var/log/httpd
- access_log:访问日志
- error_log:错误日志

站点文件目录(DocumentRoot):/var/www/html

默认主页面文件:/var/www/html/index.html

测试配置和查看的命令

apache服务默认会启动一个主进程(控制进程)和多个子进程,其中以root身份运行的是主进程,以apache身份运行的是子进程,主进程的进程id保存在/etc/httpd/run/httpd.pid文件内
apache默认监听TCP协议80端口 netstat -tupln | grep 80
查看apache相关进程:ps aux | grep httpd
service httpd configtest #测试配置文件有没有语法错误
httpd -t #同上
httpd -l #当前服务器所使用的模型及开启模块
httpd -D DUMP_MODULES #当前服务器支持的模块
service httpd reload #重新加载配置文件
service httpd restart #重启httpd服务
注意:修改配置文件后要重新加载配置文件,修改服务器监听端口后要重启服务

基本配置

温馨提示:配置httpd的工作属性时,指令不区分大小写,但有约定俗成的习惯:单词的首字母大写;指令的值很有可能区分大小写;有些指令可以重复使用多次;

配置监听的端口:

Listen [IP:]PORT
例如:Listen 172.16.3.1:80

配置所选用的MPM的属性

prefork模型:默认使用
StartServers 8 #服务启动后默认开启的进程数
MinSpareServers 5 #最少空闲进程数
MaxSpareServers 20 #最多空闲进程数
ServerLimit 256 #每个进程允许开启最多的子进程数
MaxClients 256 #每个进程最多用户链接数
MaxRequestsPerChild 4000 #长连接时每个用户最多请求数

worker模型:要支持worker模型需要配置/etc/sysconfig/httpd开启
HTTPD=/usr/sbin/httpd.worker
StartServers 4 #服务启动默认开启的进程数
MaxClients 300 #最多同时客户连接数
MinSpareThreads 25 #最少空闲进程数
MaxSpareThreads 75 #最好空闲进程数
ThreadsPerChild 25 #每个进程开启的线程数
MaxRequestsPerChild 0

配置服务器支持keep-alived(长连接)

KeepAlive {On|Off} #是否支持长连接
KeepAliveTimeout 2 #长连接超时时间
MaxKeepAliveRequests 50 #超时时间内允许请求的次数

配置加载模块

LoadModule foo_module modules/mod_foo.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so

配置网站根目录

DocumentRoot “/var/www/html” #指定网站的主目录
- 容器内定义站点的访问权限
- 容器内限定用户的访问方法

定义默认主页

DirectoryIndex index.php index.jsp index.html

配置页面文件的访问属性

Options
Indexes #是否允许索引页面文件,建议关闭
FollowSymLinks #是否跟随软连接文件
SymLinksifOwnerMatch #跟随符号链接,只允许访问运行apache的用户有属主权限的文件
ExecCGI: #是否允许执行CGI脚本;
All
None(一般使用此项)

基于客户端访问控制

注意:系统默认允许所有人访问
Order #定义allow和deny哪个为默认法则,写在后面的为默认法则,写在前面的指令没有显示定义的即受后面的指令控制。
Order allow,deny(白名单)
Allow from all #所有人可以访问
例如,配置允许172.16.0.0/16访问,但不允许172.16.3.1访问
Order allow,deny
Deny from 172.16.3.1 #禁用一个IP访问
Allow from 172.16.0.0/16 #允许一个网段访问

基于用户访问控制

当你的网站或者站点的某个路径只想让你授权的用户访问时,就可以使用基于用户的访问控制。

  • 认证质询:响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码;
  • 认证:客户端用户填入账号和密码后再次发送请求报文,认证通过则服务器发送响应的资源;
    • 认证类型:basic明文、digest消息摘要

这里使用htpasswd命令建立用户帐号文件
htpasswd
-c #第一次使用-c创建新文件,不是第一次不要使用此选项
-m #用户密码使用MD5加密后存放
-s #用户密码使用SHA加密后存放
-p #用户密码不加密
-d #禁用一个账户
-e #启用一个账户
例如:
htpasswd -c -m /etc/httpd/conf/.htpass tom
命令 选项 生成的用户文件路径及文件名 用户名
htpasswd -m /etc/httpd/conf/.htpass jerry
再次添加用户时就不要使用-c选项了,否则会覆盖之前内容先生成
(1)建立用户帐号文件
htpasswd -c -m /etc/httpd/conf/.htpass tom
(2)修改主配置文件
vi /etc/httpd/conf/httpd.con
DocumentRoot “/www/html” #此时网站根目录就是/www/html
Optins None
AllowOverride None
AuthName “Oaly for employees.” #登录提示信息,可自定义
AuthType Basic #认证方式
AuthUserFile /etc/httpd/conf/.htpass #用户帐号文件
Require valid-user #允许的用户
Require 指定可以访问的用户,可以指定单个用户,直接写用户名就可以了,用户名可以写多个用空格分开,也可以指定所有用户就用 valid-user
注意,如果允许用户较多,也要设置基于组认证方式。

配置日志功能

日志有两类:访问日志(格式自定义)、错误日志

错误日志:
ErrorLog “/path/to/error_log_file”

访问日志:
CustomLog “/path/to/custom_log_file” logformat

日志格式:{combined|common|agent}
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
%h #客户端ip
%l #
%u #用户名
%t #请求到达的时间
%r #请求报文的起始行,方法
%s #
%b #响应报文的大小
%{Referer}i #请求报文中“referer”首部的值。当前资源的访问入口,即从哪个页面中的超链接跳转而来;
%{Foobar}i #显示从发那个站点跳转过来
%{User-Agent}i ##请求报文中“User-Agent”首部的值。即发出请求用到的应用程序。
####路径别名
作用:可以隐藏网站的真实目录
Alias /test/ “/www/test/” #配置别名

支持的字符集

AddDefaultCharset UTF-8

Apache之自带工具(详细参考)

密码文件生成工具:htpasswd

指令:htpasswd

语法格式:
htpasswd  [-cmdpsD] passwordfile username
htpasswd  -b[cmdpsD] passwordfile username password
htpasswd  -n[mdps] username

选项说明:
   -c 创建一个加密文件
  -n 不更新加密文件,只将apache htpasswd命令加密后的用户名密码显示在屏幕上
  -m 默认apache htpassswd命令采用MD5算法对密码进行加密
  -d apache htpassswd命令采用CRYPT算法对密码进行加密
  -p apache htpassswd命令不对密码进行进行加密,即明文密码
  -s apache htpassswd命令采用SHA算法对密码进行加密
  -b 在apache htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码
  -D 删除指定的用户
  在Windows, NetWare and TPF 系统中 ‘-m’选项是默认的,在使用apache htpasswd命令时可以忽略。在其他系统中,’-p’选项可能不能工作。
  
使用实例:
  1、如何利用htpasswd命令添加用户?
  htpasswd -bc .passwd www.leapsoul.cn php
  在bin目录下生成一个.passwd文件,用户名www.leapsoul.cn,密码:php,默认采用MD5加密方式
  2、如何在原有密码文件中增加下一个用户?
  htpasswd -b .passwd leapsoul phpdev
  去掉c选项,即可在第一个用户之后添加第二个用户,依此类推
  3、如何不更新密码文件,只显示加密后的用户名和密码?
  htpasswd -nb leapsoul phpdev
  不更新.passwd文件,只在屏幕上输出用户名和经过加密后的密码
  4、如何利用htpasswd命令删除用户名和密码?
  htpasswd -D .passwd leapsoul
  5、如何利用htpasswd命令修改密码?
  htpasswd -D .passwd leapsoul
  htpasswd -b .passwd leapsoul phpdev
  即先使用htpasswd删除命令删除指定用户,再利用htpasswd添加用户命令创建用户即可实现修改密码的功能

httpd程序的控制脚本:apachectl

语法格式:
apachectl [configtest][fullstatus][graceful][help][restart][start][status][stop]

补充说明:
    apachectl是slackware内附Apache HTTP的script文件,可供管理员控制服务器,但在其他Linux的Apache HTTP服务器不一定有这个文件

参数说明:
   configtest 检查设置文件中的语法是否正确。
  fullstatus 显示服务器完整的状态信息。
  graceful 重新启动Apache服务器,但不会中断原有的连接。
  help 显示帮助信息。
  restart 重新启动Apache服务器。
  start 启动Apache服务器。
  status 显示服务器摘要的状态信息。
  stop 停止Apache服务器

压力测试工具:ab

日志轮转工具:rotatelogs

动态模块扩展工具:apxs

猜你喜欢

转载自blog.csdn.net/borntodieee/article/details/78948434