httpd基本配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httpd基本配置相关的知识,希望对你有一定的参考价值。

一、常用配置

1、修改监听的IP和Port

 Listen[IP:]PORT
  省略ip表示监听本机所有IP;Listen可重复出现多次;

2、持久连接

  PersistentConnection:

  连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成;

   如何断开?

    数量限制:100

    时间限制:可配置

  副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应;

  折衷:使用较短的持久连接时间;

     httpd-2.4支持毫秒级持久时间;

  非持久连接

    KeepAlive {On|Off}   #默认为关闭

    MaxKeepAliveRequests #

    KeepAliveTimeout #


    测试:

    telnetHOSTPORT

    GET/URLHTTP/1.1

    Host:HOSTNAMEorIP


3、MPM参数

 MultipathProcessModule:多道处理模块

    prefork,worker,event

<IfModule prefork.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    #每个子进程可处理的请求数,0表示无限制
</IfModule>

4、DSO

配置指令实现模块加载
LoadModule <mod_name> <mod_path>
#要卸载某个模块直接将其注释掉即可,不用重读配置文件就可立即生效;模块路径为相对于ServerRoot而言的路径
显示DSO动态装载的模块:
# httpd -D DUMP_MODULES
Loaded Modules:
 core_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_file_module (shared)
 authn_alias_module (shared)
 ...
# httpd -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c
# httpd.worker -l
Compiled in modules:
  core.c
  worker.c
  http_core.c
  mod_so.c

5、定义‘Main‘server的文档页面路径

DocumentRoot "/path/to/somefile"
文档路径映射:
DocumentRoot 指向的路径为URL路径的起始位置;
DocumentRoot "/var/www/html"   #默认为这个位置
test/index.html-->http://HOST:PORT/test/index.html

6、站点访问控制

可基于两种类型的路径指明对哪些资源进行访问控制

文件系统路径:
<Directory "/path/to/somewhere">
...
</Direcotry>
<File [~] "/path/to/somewhere">
...
</File>
基于URL访问路径做访问控制:
<Location"">
...
</Location>
#另外,路径可做模式匹配,但若非迫不得已不建议使用
#如果即能使用Diretoory控制,也能使用Location控制,建议使用Directory

7、Directory中“基于来源地址”实现访问控制

(1)Options
所有可用特性:Indexes,Includes,FollowSymLinks,SymLinksifOwnerMatch 
         ExecCGI,MultiViews,None,All
Indexes:索引;在无默认主页面又无欢迎页时,将所有资源以列表形式呈现给用户。
     危险,慎用;在选项前添加减号即为禁用。如-Indexes
FollowSymlinks:允许跟踪符号链接文件;
# vim /etc/httpd/conf/httpd.conf
<Directory "/www/html">
    Options Indexes FollowSymLinks   #默认是开启的
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
(2)AllowOverride
支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能;
.htaccess文件会影响httpd的性能
(3)基于IP做访问控制机制
    Order:检查次序
        Order allow,deny
        Allow form 192.168.10.0/24
            form后面能够接受的地址格式:
                IP,Network Address
                网络地址格式较为灵活:
                    172.16
                    172.16.0.0
                    172.16.0.0/16
                    172.16.0.0/255.255.0.0

8、定义默认主页面

DirecotryIndex index.htm lindex.html.var

9、日志设定

ErrorLog "/path/to/error_log"   #错误日志,路径为相对于ServerRoot而言的路径
LogLevel {debug|info|notice|warn|error|crit|alert|emerg}
   指定级别及比其更高级别的信息都会被记录      
LogFormat 格式 格式名
  %h: 客户端地址
  %l: 远程登录名,通常为-
  %u: 认证时输入用户名,没有认证时为-
  %t: 服务器收到 用户请求时的时间
  %r:请求报名的起始行
  %>s: 响应状态码
  %b: 响应报文的长度,单位是字节
  %{HEADER_NAME}i: 记录指定首部对应的值
例如 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined    
#格式中若要使用引号则要使用反斜线转义
    CustomLog "/path/to/access_log" LogFormat_Name

10、路径别名

实现URL路径的映射,从而所访问的资源不再依赖于站点根目录。

Alias /URL/ "/path/to/somewhere/"

例如 Alias /images/ "/www/tupian/" #后面映射的路径是绝对路径,而不是相对于站点根目录而言的路径;此时若站点根目录(以/var/www/html为例)下也有一个images目录,那么将无法访问/var/www/html/images中的资源,因为images已被别名征用

# mkdir test hello
# cat test/a.html 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
# cat hello/b.html 
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
# vim /etc/httpd/conf/httpd.conf
Alias /test/ "/www/html/hello/"
# service httpd restart
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

# curl http://localhost/test/a.html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /test/a.html was not found on this server.</p>
<hr>
<address>Apache/2.2.15 (CentOS) Server at localhost Port 80</address>
</body></html>
# curl http://localhost/test/b.html
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

11、设定默认字符集

    AddDefaultCharset UTF-8
    字符集:GBK,GB2312,GB18030

12、基于用户的访问控制

用户认证类型:
  基本认证:Basic,明文发送
  摘要认证:digest
虚拟用户:仅用于访问某服务或获取某资源的凭证;
  账号和密码的存储机制:
    文本文件:.htpasswd
    SQL数据库
    dbm:数据库引擎,提供API
    ldap:
案例:基于文件做访问控制
(1)基于用户进行认证
    <Directory />
        Options none
        AllowOverride AuthConfig
        AuthType Basic
        AuthName "admin area"
        AuthBasicProvider file
        AuthUserFile /etc/httpd/conf/.htpasswd
        Require valid-user
    </Directory>
    # Require valid-user:文件中所有用户均可访问
    # Require user USERNAME,... 指定用户访问
(2)提供认证文件
    htpasswd [option] passwdfile username
    选项:
    -c:创建一个passwdfile,如果passwdfile已经存在,那么它会重新写入并删除原有内容
    -m:以md5的格式编码存储用户的密码信息
    -s:sha1加密用户密码;
    -D:删除指定用户
(3)基于组认证
    <Directory />
        Options none
        AllowOverride AuthConfig
        AuthType Basic
        AuthName "admin area"
        AuthBasicProvider file
        AuthUserFile /etc/httpd/conf/.htpasswd
        AuthGroupFile /etc/httpd/conf/.htgroup
        Require group GROUP_NAME
    </Directory>
    组文件(.htgroup)格式    组名:user1 user2 user3
例如:
# cd /var/www/html
# mkdir admin
# cat admin/admin.html  
The user is admin.  
# vim /etc/httpd/conf/httpd.conf
    <Directory "/var/www/html/admin">
    Options none
    AllowOverride AuthConfig
    AuthType Basic
    AuthName "admin area"
    AuthBasicProvider file
    AuthUserFile /etc/httpd/conf/.htpasswd
    Require valid-user
    </Directory>
# htpasswd -c -m /etc/httpd/conf/.htpasswd bjwf #创建第一个用户时必须创建文件
New password: 
Re-type new password: 
Adding password for user bjwf
# htpasswd -m /etc/httpd/conf/.htpasswd tom   #创建第二个用户
New password: 
Re-type new password: 
Adding password for user tom
# service httpd restart

技术分享

13、虚拟主机

有三种实现方案:
  基于ip:为每个虚拟主机准备至少一个ip地址;
  基于port:为每个虚拟主机准备至少一个专用port;实践中很少使用;
  基于hostname:为每个虚拟主机准备至少一个专用hostname;
可混合使用上述三种方式中任意方式;
注意:一般虚拟主机莫与中心主机混用,所以,要使用虚拟主机,先禁用中心主机;
禁用中心主机:注释DocumentRoot
每个虚拟主机都有专用配置:
<VirtualHost"IP:PORT">
SeverName
DocumentRoot""
</VirtualHost>
ServerAlias:虚拟主机的别名;
ErrorLog
CustomLog
<Directory"">
</Directory>

示例1:基于ip
  <VirtualHost172.16.100.6:80>
    ServerName web1.magedu.com
    DocumentRoot"/vhosts/web1/htdocs"
  </VirtualHost>

  <VirtualHost172.16.100.7:80>
    ServerName web2.magedu.com
    DocumentRoot "/vhosts/web2/htdocs"
  </VirtualHost>
示例2:基于port
  <VirtualHost172.16.100.7:80>
    ServerNameweb2.magedu.com
    DocumentRoot"/vhosts/web2/htdocs"
  </VirtualHost>

  <VirtualHost 172.16.100.7:8080>
    ServerName web3.magedu.com
    DocumentRoot "/vhosts/web3/htdocs"
  </VirtualHost>
示例3:基于hostname
  <VirtualHost 172.16.100.6:80>
    ServerName web1.magedu.com
    DocumentRoot "/vhosts/web1/htdocs"
  </VirtualHost>

  <VirtualHost 172.16.100.6:80>
    ServerName web2.magedu.com
    DocumentRoot "/vhosts/web2/htdocs"
  </VirtualHost>

  <VirtualHost 172.16.100.6:80>
    ServerName web3.magedu.com
    DocumentRoot "/vhosts/web3/htdocs"
  </VirtualHost>

示例:

# mkdir /var/www/html/{a.com,b.net,c.org} -pv
mkdir: 已创建目录 "/var/www/html/a.com"
mkdir: 已创建目录 "/var/www/html/b.net"
mkdir: 已创建目录 "/var/www/html/c.org"
# echo a.com > /var/www/html/a.com/index.html
# echo b.net > /var/www/html/b.net/index.html
# echo c.org > /var/www/html/c.org/index.html



14、内置的status页面

<Location/server-status>

SetHandlerserver-status

Orderdeny,allow

Denyfromall

Allowfrom172.16

</Location>


实现:基于账号实现访问控制


本文出自 “把酒问苍天” 博客,请务必保留此出处http://79076431.blog.51cto.com/8977042/1792118

以上是关于httpd基本配置的主要内容,如果未能解决你的问题,请参考以下文章

httpd配置文件中常用模块详解一

Apache的常用配置详解

Apache常用目录详解配置文件详解及优化配置文件权限详解

httpd2.2配置文件详解

Linux常用命令及配置--简单

httpd基本配置