httpd服务管理与配置

httpd服务管理与配置

前言:
我这里讲解httpd服务的安装以及配置和管理

提示:yum/apt安装和源码编译安装的目录结构大不相同,建议使用源码安装,方便管理

什么是httpd服务?

httpd服务,又称apache服务,是我们最常用的Web服务之一,它是一款功能强大、稳定性好的Web服务,该服务提供网站访问、发送网页、图片等文件内容的功能。

一、httpd安装

apr和apr-util包下载地址:http://archive.apache.org/dist/apr/
httpd下载地址:https://httpd.apache.org/

源码安装

1.安装依赖工具和包

#更新epel源和安装编译工具
 yum install -y epel-release
yum clean all && yum makecache
yum -y install gcc gcc-g++ make
#安装依赖包
yum -y install expat-devel pcre pcre-devel

2.编译安装apr和apr-util依赖包

#安装apr-1.7.0
tar zxf apr-1.7.0.tar.gz && cd apr-1.7.0
./configure --prefix=/usr/local/apr
make && make install
#安装apr-util-1.6.1
tar zxf apr-util-1.6.1.tar.gz && cd apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install

3.编译安装httpd

#添加apache用户和用户组
groupadd apache && useradd -M -s /sbin/nologin apache -g apache
./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=all --enable-mods-shared=all
make && make install

启动服务:

/usr/local/httpd/bin/apachectl start

yum/apt安装

centos系统使用的是yum,ubuntu和debian使用的是apt
提示:包名是httpd不是apache,你下载apache的话会找不到包
1.yum安装

yum -y install httpd

2.apt安装

apt -y install httpd

二、httpd服务配置

编译安装目录结构

编译安装好了之后我们会看到在安装目录下会生成很多文件
注意:个人喜好我安装在/usr/local/httpd这个目录下,根据个人安装而定
httpd.001
从上图我们可以看到会生成bin、conf、htdocs、logs、modules等目录
bin:存放服务命令的地方
conf:存放配置文件的地方
htdcos:默认存放网页文件的地方
logs:存放日志的地方
modules:存放模块文件的地方

配置文件

大家可以通过配置来配置httpd服务的运行设置
配置文件路径:/usr/local/httpd/conf/httpd.conf
子配置文件路径:/usr/local/httpd/conf/httpd.conf
子配置文件需要启用哟!

配置文件的配置项解析

ServerRoot "/usr/local/httpd"   #安装目录
Listen 80    #监听端口
#多站点监听端口
#Listen 192.168.31.101:88
#Listen 192.168.31.101:81
#加载模块
LoadModule authn_file_module modules/mod_authn_file.so
Include conf/extra/httpd-vhosts.conf     #加载子配置文件
####################################################
#apache程序运行使用的用户和用户组
User apache
Group apache
</IfModule>
ServerAdmin apache.com     #网站域名
ServerName localhost:80      #网站名字
<Directory />
    AllowOverride none
    Require all granted
</Directory>
DocumentRoot "/usr/local/httpd/htdocs"    #网站访问网页文件位置
<Directory "/usr/local/httpd/htdocs">     #配置该网站站点路径的权限
    Require all granted
</Directory>
<IfModule dir_module>   #首加载的文件名
    DirectoryIndex index.html
    DirectoryIndex index.php index.html
</IfModule>
ErrorLog "logs/error_log"    #错误日志路径
LogLevel warn     #日志等级
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
</IfModule>
<Directory "/usr/local/httpd/cgi-bin">   #cgi-bin工具站点权限设置
    AllowOverride None
    Options None
    Require all granted
</Directory>
<IfModule headers_module>
    RequestHeader unset Proxy early
</IfModule>
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

多站点配置

注意:这里我通过子配置文件演示,ip地址和网页路径根据自己的设置来

首先配置httpd.conf文件开启子配置项

Include conf/extra/httpd-vhosts.conf

基于域名的虚拟站点

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
----------------------------------------------------------------
<Directory "/usr/local/httpd/htdocs">
   Order allow,deny
   Allow from all
</Directory>
NameVirtualHost  *:80
<VirtualHost 192.168.0.100>
    DocumentRoot "/usr/local/httpd/htdocs/baidu"
    ServerName www.baidu.com
    ErrorLog "logs/baidu.com-error.log"
    CustomLog "logs/baidu.com-access.log" common
</VirtualHost>
<VirtualHost 192.168.0.100>
    DocumentRoot "/usr/local/httpd/htdocs/google"
    ServerName www.google.com
    ErrorLog "logs/goole.com-error.log"
    CustomLog "logs/google.com-access.log" common
</VirtualHost>

基于ip的虚拟站点

服务存在多个网卡

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
----------------------------------------------------------------
<Directory "/usr/local/httpd/htdocs">
   Order allow,deny
   Allow from all
</Directory>
NameVirtualHost  *:80
<VirtualHost 192.168.0.101>
    DocumentRoot "/usr/local/httpd/htdocs/baidu"
    ServerName www.baidu.com
    ErrorLog "logs/baidu.com-error.log"
    CustomLog "logs/baidu.com-access.log" common
</VirtualHost>
<VirtualHost 192.168.0.102>
    DocumentRoot "/usr/local/httpd/htdocs/google"
    ServerName www.google.com
    ErrorLog "logs/goole.com-error.log"
    CustomLog "logs/google.com-access.log" common
</VirtualHost>

基于端口的虚拟站点

首先先修改httpd.conf主配置文件监听端口

Listen 192.168.31.101:88
Listen 192.168.31.101:81

再配置子配置文件

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
----------------------------------------------------------------
<Directory "/usr/local/httpd/htdocs">
   Order allow,deny
   Allow from all
</Directory>
NameVirtualHost  192.168.0.100
<VirtualHost *:81>
    DocumentRoot "/usr/local/httpd/htdocs/baidu"
    ServerName www.baidu.com
    ErrorLog "logs/baidu.com-error.log"
    CustomLog "logs/baidu.com-access.log" common
</VirtualHost>
<VirtualHost *:82>
    DocumentRoot "/usr/local/httpd/htdocs/google"
    ServerName www.google.com
    ErrorLog "logs/goole.com-error.log"
    CustomLog "logs/google.com-access.log" common
</VirtualHost>

三、httpd服务管理

httpd日志管理

在/var/log(默认情况下存放) 由rsyslogd程序产生(系统日志)
httpd服务的日志可以在httpd.conf主配置文件里配置日志存放位置:

ErrorLog "logs/hattpd-error.log"    #错误日志文件
CustomLog "logs/hattpd-access.log" common  #访问记录日志文件

注意:这里的common为日志的展示格式
apache中日志记录格式:普通型common和复合型combined(安装默认为common)

我的建议是一般有子配置文件我们会在子配置文件中去设置日志
子配置文件的好处之一:可以分开创建和查看以及分析各个网页的日志文件

存在的问题:随着网站访问量增大,默认情况日志文件越来越大
我们可以采取的措施:对日志进行分割

1.自带的日志分割工具:rotatelogs

分割工具位置:/usr/local/httpd/bin/rotatelogs
使用方法:

ErrorLog "|/usr/local/httpd/bin/rotatelogs -l /usr/local/httpd/logs/error_%Y%m%d.log 86400"
CustomLog "|/usr/local/httpd/bin/rotatelogs -l /usr/local/httpd/logs/access_%Y%m%d.log 86400" common

2.三方工具:cronolog

安装包名:cronolog-1.6.2.tar.gz
使用方法(跟rotatelogs相似)

ErrorLog "|/usr/local/sbin/cronolog /usr/local/httpd/logs/test/error_%Y%m%d.log"
CustomLog "|/usr/local/sbin/cronolog
/usr/local/httpd/logs/test/access_%Y%m%d.log" common

3.日志分析系统

1.下载安装源码包
2.在/usr/local下建立文件夹/usr/local/awstats
3.解压之后目录移动到/usr/local/awstats
4.给awstats_configure.pl可执行权限,如下图所示
httpd.002
5.运行脚本awstats_configure.pl(运行后进行手动一步一步选择如下图)
httpd.003
6.修改站点统计配置文件:指定统计的具体日志文件路径
我的刚刚是默认路径为/etc/awstats下

vim awstats.www.baidu.com.conf
------------------------------------------------
LogFile="/usr/local/httpd/logs/hattpd-access.log"

7.手动创建/var/lib/awstats这个目录:mkidr /var/lib/awstats
8.然后给awstats_updateall.pl文件执行权限,运行该文件
9.结果如下图:
httpd.004
然后是用办公电脑访问,如下图就是成功了
我这里的网址为:http://www.baidu.com/awstats/awstats.pl?config=www.baidu.com
httpd.005

访问控制与安全

1.地址限制访问

<Directory "/usr/local/httpd/htdocs/baidu">
   Options None
   AllowOverride None
   Order allow,deny  #先允许后拒绝,可以交换顺序
   Allow from 192.168.0.100
</Directory>

配置之后除了192.168.0.100这个ip其他ip都无法访问

2.用户密码验证访问

使用httpd自带的工具:htpasswd
1.创建用户认证数据库命令:

/usr/local/httpd/bin/htpasswd -c /usr/local/httpd/conf/.httpdpasswd webadmin

weadmin为用户,然后系统会让你输入密码,用户密码保存在/usr/local/httpd/conf/.httpdpasswd这个文件里
2.配置文件修改加入项

<Directory "/usr/local/httpd/htdocs/baidu">
   Options None
   AllowOverride None
   Order allow,deny  #先允许后拒绝,可以交换顺序
   Allow from all
   AuthName "AWStats Directory"
   AuthType Basic
   AuthUserFile /usr/local/httpd/conf/.awspwd
   require valid-user
</Directory>

添加用户:

/usr/local/httpd/bin/htpasswd -b /usr/local/nginx/.passwd  test1 test123456

httpd优化访问

注意:源码安装是默认开启保持,rpm安装是默认关闭

KeepAlive Off
KeepAliveTimeout 300

1.网页压缩模块

作用:httpd中gzip模块可以使用gzip压缩算法来实现对httpd服务器发布
的网页内容进行压缩后再传输到客户端浏览器
不同版本之间的区别:
apache 1.x:没有内建网页压缩技术,使用的是额外的第三方mod_gzip模块来执行压缩。压缩比率高,高出4%~6%压缩量
apache 2.x:内建使用mod_deflate,压缩速度快
apache 2.0.45开始:mod_deflate使用DeflateCompressionLevel指令来设置压缩级别,1最快压缩比最低,9最慢压缩比最高,默认6
1.查看检查模块:

apachectl -t -D DUMP_MODULES | grep "deflate"

2.停止服务,重新到解压的目录编译安装(编译时加上模块选项)

./configure --prefix=/usr/local/httpd/ --enable-deflate --enable-so --enable-rewrite --enable-charset-lite --enable-cgi

3.修改主配置文件添加开启mod_deflate模块

AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
DeflateCompressionLevel 9
setOutputFilter DEFLATE

4.重新启动服务检查模块

apachectl -t -D DUMP_MODULES | grep "deflate"

2.网页缓存模块

作用:httpd的mod_expires模块会自动生成页面头部信息中的Express标签和Cache-Control标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要再次向服务器发出请求
配置mod_expires模块与mod_deflate模块相似
1.检查模块:

apachectl -t -D DUMP_MODULES | grep "expires"

2.重新编译安装

./configure --prefix=/usr/local/httpd/ --enable-deflate -enable-expires --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
make && make install

修改主配置文件,启用mod_expires模块

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 60 seconds"
</IfModule>

4.重启检测

apachectl -t -D DUMP_MODULES | grep "expires"

3.防盗链模块

防盗链的使用(防止别人是用自己的资源流量,比如使用你网页的图片链接放到别人网站上,别人实际访问的是你自己的网络资源)
使用httpd中的一个模块:mod_rewrite模块
1.检查模块:

apachectl -t -D DUMP-MODULES | grep "rewrite"

2.如果没有,关闭服务,重新编译

./configure --prefix=/usr/local/httpd/ --enable-deflate --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-expires
make && make install

3.在配置文件中的那个网页配置段添加启动模块(可以在子配置文件中启用模块)

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://abc.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://abc.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.abc.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.abc.com/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.abc.com/error.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值