RedHat (httpd):
rpm 包:
源码编译
elinks http://192.168.21.123 (交互式,纯文本)
-dump 显示网页之后直接退出,不在进行交互式
-source 显示网页源码
curl http://192.168.21.123
httpd: SELinux 事先将其配置为 permissive 或 disabled
httpd:
/usr/sbin/httpd (MPM: preforx)
httpd: root,root (master process)
httpd: apache,apache (worker process)
/etc/rc.d/init.d/httpd
port:(80/tcp), (ssl:443/tcp)
/etc/httpd/ :工作跟目录,相当于程序安装目录
/etc/httpd/conf/ :配置文件目录
主配置文件 :httpd.conf
/etc/httpd/conf.d/*.conf 是主配置文件的组成部分
/etc/httpd/modules/ :模块目录
/etc/httpd/logs/ :日志目录
日志文件有两类:访问日志 access_log,错误日志:err_log
/var/www/
html
cgi-bin
cgi :Common Gateway Interface
Client --> httpd (index.cgi) --> Spawn process (index.cgi) --> httpd --> client
fastcgi :
http://httpd.apache.org
自己安装帮助手册
# yum -y install httpd-manual
http://192.168.21.117/munual
httpd.conf:
directive value
指令不区分大小写
value 区分大小写
MPM : Multi-Processing Modules
mpm_winnt
prefork (一个请求用一个进程响应)
worker (一个请求用一个线程响应,(启动多个进程,每个进程生成多个线程))
event (一个进程处理多个请求)
# rpm -ql | grep sbin
# httpd -l
# less /etc/sysconfig/httpd
#prefork 模型
<IfModule prefork.c>
StartServers 8 #httpd启动是启动的进程个数
MinSpareServers 5 #保持最少空闲进程的个数
MaxSpareServers 20 #最多空闲进程的个数
ServerLimit 256 #限制MaxClients
MaxClients 256 #最大同时连接的请求数
MaxRequestsPerChild 4000 #单个进程最大处理的请求数,超过阀值后kill之后重新生成一个新的进程
</IfModule>
#worker 模型
<IfModule worker.c>
StartServers 4 #启动进程的个数
MaxClients 300 #最大同时连接的请求数
MinSpareThreads 25 #最小的空闲总线程数
MaxSpareThreads 75 #最大的空闲总线程数
ThreadsPerChild 25 #每个进程的线程数
MaxRequestsPerChild 0
</IfModule>
#监听地址和端口,可以有多行
Listen [IP:]port
Listen 80
Listen 172.16.10.1:8080
#包含的配置文件
Include cond.d/*.conf
#URL根目录相对应的本地路径
DocumentRoot "/var/www/html"
URL路径<>本地文件路径,URL是相对于DocumentRoot的路径而言
<Directory "/var/www/html">
Options None
AllowOverride None
Order allow,deny
Allow from 192.168.100.0/24
</Directory>
Options
None :不支持任何选项
Indexes :允许索引目录 (不安全的)
FollwSymLinks :允许访问符号链接指向的源文件,不要开启,影响访问速度
Includes :允许执行服务端包含(SSI) (不安全的)
ExecCGI :允许运行CGI脚本
Multiviews :根据客户端来源的语言显示相应的资源
All :启用所有选项
AllowOverride : 是否覆盖Order项,none all,或者使用密码验证等
#使用用户密码验证:
AllowOverride AuthConfig
Authtype Basic
AuthName "受限制的访问站点"
AuthUserFile "/etc/httpd/conf/htpasswd"
AuthGroupFile "/etc/httpd/conf/htgroup"
Require user user_name | valid-user | group mygroup
# user_name 允许登录的用户
# valid-user 允许所有的用户登录
# group mygroup 允许登录的用户组
Order :用于定义基于主机的访问控制功能,IP,网络地址或主机定义访问控制机制
order allow,deny
allow from xx
deny from xx
地址的表示方式
IP
network/netmask
HOSTNAME :www.a.com
DOMAINNAME :test.com
Partial IP :172.1172.16.0.0/16
建立AuthUserFile
[root@rs1 ~]# htpasswd -c -m /etc/httpd/conf/htpasswd hadoop
New password:
Re-type new password:
Adding password for user hadoop
向存在的htpasswd 中添加用户
[root@rs1 ~]# htpasswd -m /etc/httpd/conf/htpasswd hale
New password:
Re-type new password:
Adding password for user hale
创建AuthGroupFile
[root@rs1 ~]# cd /etc/httpd/conf
[root@rs1 conf]# ll
total 56
-rw-r--r-- 1 root root 88 Dec 16 18:02 htpasswd
-rw-r--r-- 1 root root 34422 Dec 16 15:53 httpd.conf
-rw-r--r--. 1 root root 13139 Oct 16 2014 magic
[root@rs1 conf]# vim htgroup
[root@rs1 conf]# httpd -t
Syntax OK
vim htgroup
mygroup:hadoop hale #此处添加的用户必须存在于 AuthUserFile
#定义URI别名,它有自己的本地文件路径,与DocumentRoot根无关
# curl http://192.168.21.117/icons/
Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
apache 虚拟主机:
apache:服务器,Host,物理主机
虚拟主机:
一个apache服务器服务于多个不同的站点:
apache:
中心主机:
虚拟主机:
基于端口:
IP:80
IP:8080
基于IP:
IP1:80
IP2:80
基于域名:
IP:80
主机名不同
www.a.com
www.b.com
www.c.com
apache 2.2
启用 NameVirtualHost
apache 2.4
直接定义虚拟主机,不需要指令NameVirtualHost
serverName
serverAlias
DocumentRoot "/www/a.com"
<Directory "/www/a.com">
Options None
AllowOverride None
</Directory>
Alias
ErrorLog
CustomLog
<Location "/status">
SetHandler server_status
</Location>
ScriptAlias
要使用虚拟主机,需要先取消中心主机,注释中心的DocumentRoot即可
虚拟主机的定义:
#DocumentRoot "/var/www/html"
#基于端口和IP的虚拟主机
<VirtualHost 172.16.10.1:80>
ServerName ip1.hale.com
DocumentRoot "www/ip1"
</VirtualHost>
<VirtualHost 172.16.10.2:80>
ServerName ip2.hale.com
DocumentRoot "/www/ip2"
</VirtualHost>
<VirtualHost 172.16.10.1:8080>
ServerName port2.hale.com
DocumentRoot "/www/port2"
</VirtualHost>
#基于主机名的虚拟主机
NameVirtualHost 192.168.10.2:80
<VirtualHost 192.168.10.2:80>
ServerName name1.hale.com
DocumentRoot "/www/name1"
</VirtualHost>
<VirtualHost 192.168.10.2:80>
ServerName name2.hale.com
DocumentRoot "/www/name2"
</VirtualHost>
基于openssl的https
apache的ssl需要 mod_ssl 的支持
# yum install mod_ssl
# rpm -ql mod_ssl
一个apache服务可以有多个http虚拟主机,但只能有一个https虚拟主机
#使用openssl创建需要的CA,此处直接在http服务器上生成证书
# vim /etc/pki/tls/openssl.cnf
# cd /etc/pki/CA/
# ls
# (umask 077; openssl genrsa 2048 > private/cakey.pem)
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem
# echo 01 > serial
# touch index.txt
# cd /var/www/ssl
# mkdir /var/www/ssl
# cd /var/www/ssl
# (umask 077; openssl genrsa 1024 > https.key)
# openssl req -new -key https.key -out https.csr
# openssl ca -in https.csr -out https.crt -days 3650
# ls
#修改ssl.conf配置
#需要修改的主要配置项,其他的项目根据需求进行修改
# vim /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>
ServerName https.hale.com
DocumentRoot "/var/www/ssl"
<Directory "/var/www/ssl">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
SSLEngine on
SSLCertificateFile /var/www/ssl/https.crt
SSLCertificateKeyFile /var/www/ssl/https.key
</VirtualHost>