码迷,mamicode.com
首页 > Web开发 > 详细

apache

时间:2015-08-13 14:20:29      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

apache

apache

http://httpd.apache.org/docs/2.4/mod/directives.html

apache

高度模块化 (core + modules)

  • DSO: Dynamic Shared Object 动态模块对象, 动态指的是想用就启动, 不用也可以禁止
  • MPM: Multipath Processing Module, 多道处理模块, 非一个模块, 而是对一种特性的称谓
    1. prefork: 一个进程一个请求 (预先创建多个进程), 非线程型, 每个请求相互独立
      select(): 1024
    2. worker: 一个进程多个线程, 一个线程一个请求 (由于资源竞争, 性能并一定比 prefork 高)
    3. event: 一个进程响应多个请求, 不生成线程
      event-driven: 事件驱动, 主要目的在于实现单线程响应多个请求

httpd 的功能特性:

  • 路径别名: alias
  • 用户认证: authentication
  • 虚拟主机: virtual host
  • 反向代理:
  • 负载均衡:
  • 用户站点:
  • CGI:Common Gateway Interface

日志滚动:

  1. 日志切割
  2. 时间, 空间

Docroot: 文档根目录

key value
配置指令不区分字符大小写
值有可能区分大小写
有些指令可以重复出现多次

配置文件格式
全局配置
主机配置: 用于仅提供一个站点时
虚拟主机配置: 用于提供多个站点时

配置文件语法测试
serviice httpd configtest
httpd -t
service httpd reload

监听套接字

Listen 80
Listen 8080
此指令可以出现多次, 用于指定监听多个不同的套接字

Keepalive

KeepAlive {On|Off}
KeepAliveTimeout     50 超时时间 50 秒
MaxKeepAliveRequests 50 最多请求 50 次连接

MPM

多道处理模块
httpd -l 查看编译进内核的模块
想使用不同的机制, 修改配置文件即可 /etc/syconfig/httpd 文件

<IfModule preforck.c>              判断模块是否存在
     StartServers           8      默认启动的工作进程数
     MinSpareServers        5      最少空闲进程数
     MaxSpareServers       20      最大空闲进程数
     ServerLimit          256      最大活动进程数
     MaxClients           256      最大并发连接数, 最多允许发起的连接请求的个数
     MaxRequestsPerChild  4000     每个子进程在生命周期内最大允许服务的最多请求个数
 </IfModule>
<IfModule worker.c>
     StartServers           4      启动的子进程的个数
     MaxClients           300      最大并发连接数, 最多允许发起的连接请求的个数
     MinSpareThreads       25      最少空闲线程数
     MaxSpareThreads       75      最大空闲线程数
     ThreadsPerChild       25      每个子进程生成的线程数
     MaxRequestsPerChild    0      每个子进程在声明周期内最大允许服务的最多请求个数
</IfModule>

DSO 模块的加载方式

LoadModule module_name /path/to/module
如果使用相对路径, 则对于 ServerRoot 所定义的位置而言
LoadMoudule php5_module /usr/lib64/httpd/modules/php.so
让服务重载配置文件方能生效
httpd -M 列出与加载到所有 DSO 模块与非 DOS 模块

配置站点根目录

DocumentRoot /path/to/somewhere

页面访问属性

<Directory "xxx">
  Options Indexes               # 不存在 index.html 的时候, 列出当前目录的所有文件
  Options FollowSymLinks        # 允许符号连接, 降低服务器性能, 不安全, ln -s /etc/fstab DOCUMENT_ROOT/b.thml 然后打开 localhost/b.html
  Options SymLinksIfOwnerMatch  # 在链接文件属主属组与原始文件的属主属组相同时, 允许跟随符号连接所指向的原始文件
  Options Includes              # 允许执行服务端脚本
  Options IncludesNOEXEC        # 允许包含但不允许执行脚本
  Options ExecCGI               # 是否允许运行 CGI 脚本
  Options MultiViews            # 内容协商, 根据不同地区提供不同的内容, 比如语言, 消耗资源
  Options None
  Options All
</Directory>
Options Indexes FollowSymLinks 同时开启两个

可以使用正则表达式, 使用~

目录访问权限

Forbidden
You don‘t have permission to access /index.html on this server.

如果根目录被禁止

<Directory />
    AllowOverride none
    Require all denied
</Directory>

那么以后设置虚拟主机的权限的时候一定要开启

<Directory ...>
    AllowOverride all
    # Allow open access:
    Require all granted
</Directory>

基于主机的访问控制

基于 IP 访问控制:
允许所有主机访问:Require all granted
拒绝所有主机访问:Require all denied
控制某主机的访问

Require ip IPADDR
Require not ip IPADDR        # 无法使用, 报错

IPADDR:
单个 IP 地址,例如 172.16.100.7
network/netmask 例如 172.16.0.0/255.255.0.0
network/Length 例如 172.16.0.0/16
Net 例如 172.16

Require host IPADDR
Require not host IPADDR

下面的内容 2.4 已经废除

<Direcotry "/path/to/somewhere">
  Options
  AllowOverride None 不禁用
   order 次序, 写在后面的为默认
   allow,deny: 没有允许的都拒绝
   deny,allow: 没有拒绝的都允许
  Allow from
  Deny from
 </Direcotry>

order allow, deny            # 禁用全部
allow from 192.168.1/24      # 允许...

如果 allow 匹配, deny 匹配, 则 deny 优先
如果 allow 匹配, deny 不匹配, 则 allow 优先
如果 allow 不匹配, deny 不匹配, 则 deny 优先

没写规则就是 allow from all, deny from all

虚拟主机

视频系统 video.sunznx.com
论坛系统 bbs.sunznx.com
办公 oa.sunznx.com
让三个域名指向同一个 ip, 每个域名提供不同的功能

修改客户端的 host 文件 模拟 dns 解析

192.168.100.129 server1
192.168.100.129 video.server1
192.168.100.129 bbs.server1
192.168.100.129 oa.server1

在服务器端执行这样的操作 (192.168.100.129)

yum install -y httpd
service httpd start
iptables -F   # 关闭防火墙
setenforce 0  # 关闭 selinux

现在在客户端打开 http://server1 测试是否可行

mkdir -p /www/{video,bbs,oa}
ls /www
echo bbs    > www/bbs/index.html
echo oa     > www/oa/index.html
echo video  > www/video/index.html

配置虚拟主机
vi /etc/httpd/conf/httpd.conf

# DocumentRoot "/var/www/html"   # 注释掉原来主机的家目录, 因为我们现在要使用的是 虚拟主机的

vi conf.d/virtual.conf

NameVirtualHost *:80                # 重要, httpd2.4 就不需要这句话
<VirtualHost *:80>
   ServerName video.server1
   ServerAdmin test@localhost
   DocumentRoot /www/video
</VirtualHost>
<VirtualHost *:80>
   ServerName bbs.server1
   ServerAdmin test@localhost
   DocumentRoot /www/bbs
</VirtualHost>

浏览器打开
http://video.server1

显示 video

http://bbs.server1

显示 bbs

定义默认主页面

DirectoryIndex index.html index.php

路径别名

Alias alias "/path/to/somewhere"
意味着访问 http://Server_IP/alias 时, 其页面文件来自于/path/to/somewhere 中

error

#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_i    nfo.html

用户目录 (跳过)

如果期望让每个用户都可以创建个人站点: http://Server_IP/~Username/
userdir disablied:禁止
userdir public_html:
public_html 是用户家目录下的目录名称, 所有位于此目录中的文件均可通过前述的访问路径进行访问
用户的家目录得赋予进行 httpd 进程的用户拥有执行权限
setfacl -m u:apache:x ~Username

配置日志功能 (跳过)

var/log/http
access.log: 访问日志, 其需要记录的内容需要自定义
error.log

访问日志:
CustomLog "/path/to/log_file" LogFormat
LogFormat 定义日志格式
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
%h:客户端地址
%l:远程的登录名, 通常为-
%u:认证时的远程用户名, 通常为-
%t: 接收到的请求时的时间, 为标准英文格式时间+时区
\" : 转义, 显示""
%r:请求报文的起始行
%>s: 响应状态码,
%b: 以字节响应报文的长度, 不包含 http 报文
%{Header_Name}i:记录指定请求报文首部的内容(value)
%u: 请求的 URL

详情请参考: http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
错误日志: ErrorLog

指定默认的字符集

AddDefaultCharset UTF-8

cgi

cgi Common Gateway Interface
缺点: 每次执行完一个请求之后就退出, 但请求多的时候就麻烦了

fast cgi
每次执行完一个请求之后不马上退出, 等待处理下一个请求

yum search php  | grep -i cgi
php-fpm.x86_64 : PHP FastCGI Process Manager
systemctl enable php-fpm
systemctl start php-fpm
让 apache 支持 fastcgi
yum 模式
yum install mod_fcgid -y
编译模式
# wget http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz
# make top_dir=/usr/lib64/httpd
# make install top_dir=/usr/lib64/httpd

基于用户的访问控制 (跳过)

虚拟用户:不是系统用户,只是为了获取某种资源类型的一种虚拟的用户
文件/etc/httpd/conf/.htpasswd
SQL 数据库
dbm:
ldap:轻量级目录访问协议
认证类型(auth):
basic:基本认证,账号和密码明文发送
digest:摘要认证,hash 编码之后发送
认证提供者(authentication provider):账号和密码的存放位置
authn
授权机制(authorization):根据什么进行授权
案例:基于文件,做基本认证根据用户和组进行授权
1、编辑配置文件,为需要认证的目录配置认证机制
<Directory "/www/htdocs/fin">A
options None
AllowOverride AuthConfig 使用认证配置
AuthType Basic 使用基本认证
AuthName "Private Area" 质询时标题
AuthUserFile etc/http/conf.htpasswd 密码的存放位置
Require vaild-user 可访问的用户

</Directory>
2、使用 htpsswdm 命令使用生成认证库
htpasswd
-c 创建密码,创建第一个用户时使用
htpasswd -c -m etc/http/conf.htpasswd tom
-m MD5 格式存放
-b 批量模式
-D 删除用户
3、基于组认证
<Directory "/www/htdocs/fin">
options None
AllowOverride AuthConfig 使用认证配置
AuthType Basic 使用基本认证
AuthName "Private Area" 质询时标题
AuthgroupFile etc/http/conf.htpasswd 密码的存放位置
Require group GroupName 可访问的用户

</Directory>
先创建用户,在创建组
组文件:
组名:用户 1 用户 2 用户 3

服务器 status 页面 (跳过)

内生的 status 信息,且此信息可以通过 web 予以显示

基于 URL 访问属性
<Location [~] "">
</Location >

基于单个文件的访问属性
<File [~] "">
</File>

也可以使用<LocationMatch "">
</LocationMatch>来实现正则表达式的配置

如果要配置其属性的 URL 能映射到某具体文件系统路径,建议使用<Directory>

处理器:当文件被调用时,Apache 内部表现形式:一般每种文件类型都有其隐式处理器;否则需要自己定义
显式的定义使用的处理器:SetHandler

<Location /URL>
setHeandler server-status
</Location>

定义访问控制机制
基于 IP 控制
基于用户控制

示例:

<Location /server-status>
   SetHandler sever-status
   AuthType Basic
   AuthName "Sever Status"
   AuthUserFile "/etc/http/conf/.htpasswd"
   Require valid-user
   Order deny,allow
   Allow from all
</Location>

使用 mod_deflate 模块压缩页面优化传输速度, 可以写为一行, 也可以写多行, 默认为 gzip

? vi /etc/httpd/conf.d/deflate.conf
SetOutputFilter DEFLATE

# mod_deflate configuration
<IfModule mod_deflate.c>
    # Restrict compression to these MIME types
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/css

    # Level of compression (Highest 9 - Lowest 1)默认为 6
    DeflateCompressionLevel 9

    # Netscape 4.x has some problems.
    BrowserMatch ^Mozilla/4 gzip-only-text/html

    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip

    # MSIE masquerades as Netscape, but it is fine
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
</IfModule>

扩展功能
apachectl, Apache HTTP 服务控制工具
ab, Apache HTTP 服务器性能测试工具
apxs, Apache 扩展工具
configure, 配置源代码
dbmmanage, 为基本认证创建和更新 DBM 格式的用户认证文件
htcacheclean, 清理磁盘缓存
htdigest, 为摘要认证创建和更新用户认证文件
htdbm, 操作 DBM 密码数据库
htpasswd, 为基本认证创建和更新用户认证文件
httxt2dbm, 为 RewriteMap 创建 dbm 文件
logresolve, 将 Apache 日志文件中的 IP 地址解析到主机名称
rotatelogs, 不关闭 Apache 而切换日志文件
suexec, 执行外部程序前切换用户

httpd-2.4 编译安装

apr 全程 apache portable runtime
yum -y install pcre-devel

cd
wget http://mirror.bit.edu.cn/apache//apr/apr-1.5.2.tar.gz
tar xf apr-1.5.2.tar.gz && cd apr-1.5.2
./configure –prefix=/usr/local/apr
make && make install

cd
wget http://mirror.bit.edu.cn/apache//apr/apr-iconv-1.2.1.tar.gz
tar xf apr-iconv-1.2.1.tar.gz && cd apr-iconv-1.2.1
./configure –prefix=/usr/local/apr-iconv –with-apr=/usr/local/apr
make && make install

cd
wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
tar xf apr-util-1.5.4.tar.gz && cd apr-util-1.5.4
./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr
make && make install

httpd2.4 新特性

  1. MPM 支持在运行时装载
    –enable-mpms-shared=all –with-mpm=event 启用默认的 event
  2. 支持 event
  3. 异步读写
  4. 在每模块及每目录上指定日志级别

5)每请求配置:<If> <Elseif>

  1. 增强版的表达式分析器
  2. 毫秒级的 keepalive timeout
  3. 支持主机名的虚拟主机不在需要 NameVirtualHost 指令
  4. 支持使用自定义变量
    新增一些模块:mod_proxy_fcgi,mod_ratelimit,mod_request,mod_remoteip
    对于基于 IP 的访问做了修改,不在使用 order,allow,deny 这些机制;而是统一使用 require 进行

编译 httpd
wget http://apache.fayea.com//httpd/httpd-2.4.16.tar.bz2
tar xf httpd-2.4.16.tar.bz2
cd httpd-2.4.16
./configure –prefix=/usr/local/apache \
–sysconfdir=/etc/httpd24 \
–enable-so \
–enable–ssl \
–enable-cgi \
–enable-rewrite \
–with-zlib \
–with-pcre \
–with-apr=/usr/local/apr \
–with-apr-util=/usr/local/apr-util \
–enable-modeles=most \
–enable-mpms-shared=all \
–with-mpm=event

make && make install

头文件
ln -sv /usr/local/appache/include /usr/include/httpd

库文件
ldconfig -p 显示当前系统的库文件

帮助文档

? vi /etc/man.config
MANPATH /usr/local/apache/man

修改环境变量

? vi /etc/profile.d/httpd.sh
export PATH=${PATH}:/usr/local/appache/bin/

apache

标签:

原文地址:http://www.cnblogs.com/sunznx/p/4727036.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!