httpd -> A Patchy Server -> apache
http://httpd.apache.org
ASF: Apache Software Foundation
FSF: GNU, GPL
主要版本: 2.0, 2.2, 2.4
httpd特性:
事先创建进程
按需维持适当的进程
模块设计:核心比较小,各种功能通过模块添加(包括PHP)
支持运行配置,支持单独编译模块
支持多种方式的虚拟主机
socket: IP+端口
虚拟主机:
基于IP的虚拟主机
基于端口的虚拟主机
基于域名的虚拟主机
支持https协议(mod_ssl)
支持用户认证
支持基于IP或主机名的ACL
支持每目录的访问控制
支持URL重写 /p_w_picpath/a.jpg -> /bbs/p_w_picpaths/abc.jpg
Redhat 安装httpd
rpm包
源码编译
httpd: SELinux(事先让其处于permissive,disabled)
getenforce
setenforce 0 (vim /etc/sysconfig/selinux)
httpd: 涉及文件
1, /usr/sbin/httpd (MPM: prefork) 事先创建多个进程
httpd: root, root (master process)
其他httpd: apache,apache (worker process)
2, Port:(80/tcp, SSL:443/tcp)
3, /etc/rc.d/init.d/httpd 脚本,对应的配置文件在/etc/sysconfig/httpd
4, /etc/httpd: 工作根目录,相当于程序安装目录
/etc/httpd/conf: 配置文件目录
主配置文件:httpd.conf
/etc/httpd/conf.d/*.conf
/etc/httpd/modules: 模块目录
/etc/httpd/logs --> /var/log/httpd: 日志目录
访问日志 access_log
错误日志 err_log
5, /var/www
html
cgi-bin
CGI: Common Gateway Interface
Client --> httpd(index.cgi) --> Spawn Process(index.cgi) --> httpd --> Client
fast CGI: 预先启动了CGI进程( 可以分离httpd)
三层: 静态内容层(apache),应用程序层(php),数据库层(MySQL)
-----------------------------------------
1.rpm安装
yum install httpd
rpm -ql httpd | less
2, 启动
service httpd start
netstat -tnlp | grep 80
ps aux | grep httpd
多个进程,其中1个是root,其他事apache
3,分析conf
grep "Section" httpd.conf
-----------------------------------------------------------------------------------
分3个部分: 2和3部分,同时只有1个生效
### Section 1: Global Environment
### Section 2: 'Main' server configuration
### Section 3: Virtual Hosts
★ httpd -t 可以测试配置文件语法是否有问题
格式: directive value
指令不区分字符大小写,值区分
具体指令参考 httpd.apache.org/docs/2.2
MPM 多道处理模块 Multi Path Module
mpm_winnt windows专用
prefork(1个请求用1个进程响应)
worker (1个请求用1个线程响应,启动多个进程,每个进程生成多个线程)
event (1个进程处理多个请求)
httpd -l
httpd.worker -l
httpd.event -l
/usr/sbin/httpd | httpd.worker | httpd.event
通过修改/etc/sysconfig/httpd 来修改MPM模式
<Directory>
option
None: 不支持任何选项
Indexes 允许列出目录
FollowSymLinks 允许访问软连接
Includes: 允许执行服务器端包含(SSI)
ExecCGI: 允许执行CGI脚本
AllowOverride
None 后面的Order生效
Order: 用于定义基于主机的访问功能的,IP,网络地址或主机定义访问控制机制
eg: 仅允许192.168.0.0/24访问
Order allow, deny
Allow from 192.168.0.0/24
通过配置
AllowOverride AuthConfig
AuthType Basic
AuthName "Restricted Site..."
AuthUserFile "/etc/httpd/conf/htpasswd"
Require valid-user
htpasswd:
第一次 htpasswd -c -m /etc/httpd/conf/htpasswd hadoop
以后: htpasswd -m /etc/httpd/conf/htpasswd Tom
httpd -l 当前支持的模块
httpd -M 所有支持的模块
AccessFileName 一般禁用
server-status
apache虚拟主机:
需要先取消中心主机:注释中心主机的DocumentRoot即可
定义
<VirtualHost Host>
</VirtualHost>
基于IP的虚拟主机
IP1:80
IP2:80
基于端口:
IP:80
IP:8080
基于域名:
*:80
ServerName需要不同
e.g. /etc/httpd/conf.d/vrtual.conf
NameVirtualHost *:80
<VirtualHost 192.168.0.100>
ServerName book1.com
DocumentRoot "/www/book1"
CustomLog "/var/www/log/book1/access_log combined"
</VirtualHost>
<VirtualHost 192.168.0.100>
ServerName book2.com
DocumentRoot "/www/book2"
CustomLog "/var/www/log/book2/access_log combined"
</VirtualHost>