httpd服务归纳:httpd基本配置(周边常用工具,httpd 编译安装)

一、 服务器status页

    内生的status信息,可以通过web予以显示, 可以映射为url地址进行访问

    1. 配置路径有几种不同方式 

        如果URL可以映射到文件系统映射上,尽量用directory 

        1) 配置文件系统路径访问属性

      ## 简单来说,就是实实在在存在的路径,在/etc/httpd/conf/httpd.conf 中配置下面容器。并且支持正则表达式  
        <Directory [~] "">
        </Directory>

      ## 对于文件
        <File [~] "">
        </File>

        2) 配置URL访问文件路径,不一定是实实在在存在的路径,有可能是系统内生的文件,只是通过web的形式来显示。比如status页面

        <Location  [~] "">
        </Location>

        ## 专门用于做正则表达式
        <LocationMatch "">
        </LocationMatch>

   2. 处理器:当文件被调用时,apache的内部表现形式, 每一种文件类型,都有种隐式的处理形式。 

     ## 对于status页面而言,显式定义处理为,事例
    <Location /server-status>
		SetHandler server-status                                 # 使用server-status处理器处理/server-status  
		AuthType Basic                                           # 基本授权
		AuthName "Server Status"                                 # 授权名称
		AuthUserFile "/etc/httpd/conf/.htpasswd"                 # 授权认证文件所在位置
		Require valid-user
		Order deny,allow
		Allow from all
    </Location>
    ## 此设置相当于把server-status 页面映射到 , 并且只有特定用户才可以访问 
    
    ## 用命令创建用户认证文件 
    htpasswd -c -m /etc/httpd/conf/.htpasswd tom
    htpasswd -m /etc/httpd/conf/.htpasswd jerry 
    ## 用宿主机尝试进行访问 
     

server_status_asking.png

server_status.jpg

二、 配置httpd服务器支持压缩

    使用mod_deflate模块支持页面压缩

## 检查deflate模块是否装载 
httpd -M | grep deflate 
Syntax OK
 deflate_module (shared)

## 在配置文件中配置deflate模块属性: 创建/etc/httpd/conf.d/deflate.conf 文件为一下内容 
SetOutputFilter DEFLATE

# mod_deflate configuration


# 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)
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  

## 然后重启服务后,进行测试

    gzip.jpg

可以看到Content-Encoding显示为gzip, 说明文件输出确实以gzip形式进行 

三、 httpd相关的工具 

    1. curl命令  

    curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的     POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

    curl的常用选项:

         -A/–user-agent <string> 设置用户代理发送给服务器

         -basic 使用HTTP基本验证

         –tcp-nodelay 使用TCP_NODELAY选项

         -e/–referer <URL> 来源网址

         –cacert <file> CA证书 (SSL)

         –compressed 要求返回是压缩的形势

         -H/–header <line>自定义头信息传递给服务器

         -I/–head 只显示响应报文首部信息

         –limit-rate <rate> 设置传输速度

         -u/–user <user[:password]>设置服务器的用户和密码

         -0/–http1.0 使用HTTP 1.0

    2. 资源限定以及相关命令 

         软限定: 可以超管但是,只能超过一定量的时间

         硬限定:决不能超过的限制  

         ulimit

            -n [N]: 显示或限定能打开的最大的文件句柄数;

            -u [N]: 所能够运行的最多进程数;

        配置文件:/etc/security/limits.conf,扩展配置:/etc/security/limits.d/*.conf

                    limit.jpg

    3. ab 命令, 服务器标准压力测试软件 

            -c: 模拟的并发数

            -n: 总请求数

        其他压力测试工具: http_load, webbench, seige, tcp_copy(使用真实环境下的请求重放)

    4. httpd RPM安装后产生的自带工具 

            httpd: Apache 服务器。

            apachectl:Apache HTTP 服务器控制工具。当自行编译没有服务脚本时,可以使用这个作为服务脚本

            ab:Apache HTTP 服务器性能基准工具。

            ulimit : 资源限定查看和修改命令

            apxs:Apache 扩展工具。

            configure:配置源代码。

            dbmmanage:为基本认证创建和更新 DBM 格式的用户认证文件。

            htcacheclean:清理磁盘缓存。

            htdigest:为摘要认证创建和更新用户认证文件。

            htdbm:操作 DBM 密码数据库。

            htpasswd:为基本认证创建和更新用户认证文件。

            httxt2dbm:为 RewriteMap 创建 dbm 文件。

            logresolve:将 Apache 日志文件中的 IP 地址解析到主机名称。

            rotatelogs:不关闭 Apache 而切换日志文件。

            suexec:执行外部程序前切换用户。当用户请求的文件不能被appache用户请求时,可以临时以特定用户身份来获取。

四、 httpd 2.4编译安装

    1. 解决依赖关系, httpd-2.4 依赖高版本的apr(apache portable runtime)和apr-util软件包。 并且依赖pcre-devel perl兼容的正则表达式库 

        1)    安装开发工具和pcre-devel包 

    # yum -y install pcre-devel 
    # yum -y groupinstall "Development tools"

        2)    编译安装apr-1.5.2

    # tar -xf apr-1.5.2.tar.gz
    # cd apr-1.5.2 
    # ./configure --prefix=/usr/local/apr 
    # make && make install

        3)     编译安装apr-util-1.5.4 

    # 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

    2. 编译配置httpd-2.4.12 

       1) httpd-2.4新特性: 

                 MPM支持在运行时装载;

                –enable-mpms-shared=all –with-mpm=event

                支持event

                异步读写

                在每模块及每目录上指定日志级别

                每请求配置;<If>, <Elseif>

                增强版的表达式分析器

                毫秒级的keepalive timeout

                基于FQDN的虚拟主机不再需要NameVirtualHost指令

                支持使用自定义变量

                新增了一些模块:mod_proxy_fcgi, mod_ratelimit, mod_request, mod_remoteip

                对于基于IP的访问控制做了修改,不再支持使用order, allow, deny这些机制;而是统一使用require进行

        2) httpd-2.4编译安装 

    ## 编译安装
    # tar -xf httpd-2.4.12.tar.gz
    # cd httpd-2.4.12
    # ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-ssl --enable-cgi --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event
    # make && make install
    
    ## configure 个选项意义 
    --prefix=/usr/local/apache : 设置安装路径 
    --sysconfdir=/etc/httpd24 : 设置配置文件安装路径
    --enable-ssl : 支持使用ssl库 
    --enable-cgi : 支持使用cgi脚本 
    --enable-rewrite : 支持重写
    --with-zlib : 支持使用压缩库 
    --with-pcre : 支持使用perl正则表达式库
    --with-apr=/usr/local/apr : apr安装位置 
    --with-apr-util=/usr/local/apr-util : apr-util安装位置
    --enable-modules=most : 编译支持大部分模块 
    --enable-mpms-shared=all : 编译支持所有mpms模块 
    --with-mpm=event : 默认使用event模块
    
    ## 导出头文件
    # ln -sv /usr/local/apache/include  /usr/include/httpd
    
    ## 导出库文件, httpd没有额外的库文件生成,如果有的话,创建/etc/ld.so.conf.d/httpd24.conf, 并且把库文件目录添加在其中,并执行下面命令 
    # ldconfig 
    # idconfig -p  用于查看已经装载的库文件 
    
    ## 导出man手册。 在/etc/man.config 中添加
    MANPATH /usr/local/apache/man
    
    ## 导出二进制程序,创建/etc/profile.d/httpd.sh 写入下面一行 
    export PATH=/usr/local/apache/bin:$PATH

        3) 预备服务脚本,使用老版本httpd的服务脚本进行修改 

    # cp /etc/init.d/httpd /etc/init.d/httpd24 
    # vim /etc/init.d/httpd24 修改如下几行 
    apachectl=/usr/local/apache/bin/apachectl        ## 设置新的apachectl 路径 
    httpd=/usr/local/apache/bin/httpd                ## 新的httpd路径 
    prog=httpd24                                     ## 程序名称改为http24
    pidfile=${PIDFILE-/var/run/httpd24.pid}          ## 重新修改pid文件路径  
    lockfile=${LOCKFILE-/var/lock/subsys/httpd24}    ## 设置新的锁文件名,防止冲突 
    
    # vim /etc/httpd24/httpd.conf 添加下面一行指令,来修改pid文件地址 
    PidFile "/var/run/httpd24.pid"
    
    添加httpd24服务, 设置开机自动启动,关闭老版本httpd防止版本冲突 
    # chkconfig --add httpd24 
    # chkconfig httpd off 
    # chkconfig httpd24 on  
    
    
    # service httpd24 start 
    # ss -tnlp | grep "httpd"
    tcp    LISTEN     0      128                   :::80                   :::*      users:(("httpd",44350,4),("httpd",44352,4),("httpd",44353,4),("httpd",44354,4))
    
    # ps aux  | grep "httpd"
    root     44350  0.0  0.1  76980  2320 ?        Ss   18:07   0:00 /usr/local/apache/bin/httpd
    daemon   44352  0.0  0.2 421240  4132 ?        Sl   18:07   0:01 /usr/local/apache/bin/httpd
    daemon   44353  0.0  0.2 486776  4752 ?        Sl   18:07   0:01 /usr/local/apache/bin/httpd
    daemon   44354  0.0  0.2 421240  4160 ?        Sl   18:07   0:01 /usr/local/apache/bin/httpd
    
    可以看到,一个主进程,另外event默认配置为三个工作进程,默认用户为daemon

        4)  新特性,基于IP访问控制 

            允许所有主机访问:Require all granted

            拒绝所有主机访问:Require all deny

     控制某主机的访问:
        ## 基于ip 
	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 ip 172.16.0.0/16
	    
        ## 基于主机名
	Require host HOSTNAME
	Require not host HOSTNAME
	    HOSTNAME:
		FQDN:具体的主机
		DOMAIN: 域名, 例如 www.playground.com

原创文章,作者:以马内利,如若转载,请注明出处:http://www.178linux.com/4705

评论列表(4条)

  • stanley
    stanley 2015-05-27 10:06

    以马内利的文章每次都比其它同学更有深度。赞

    • 以马内利
      以马内利 2015-05-27 11:17

      @stanleyI/O模型纠结了老半天,不知道该怎么表达,看了好几遍,还是觉得理解的很浅

  • 浅蓝
    浅蓝 2015-05-27 21:55

    求前辈出一个完整的httpd+openssl的教程,从编译安装到配置一步一步下来,面向小白的,多谢!
    (原因是网上看了很多教程,但是都是httpd和openssl分开讲的,里面很多细节都不太明白,新手希望能有一个一步一步跟着做的教程是最好的,先实现结果,再追求理论细节。再次感谢!)

    • 以马内利
      以马内利 2015-05-31 16:55

      @浅蓝httpd + openssl 就是实现https协议啦,我这个系列的总结中,我写过一个实现https的,
      http://www.178linux.com/archives/4671
      我也是个新手,就是一边学一边总结。 仅供参考