设为首页 收藏本站
查看: 756|回复: 0

[经验分享] httpd之apache服务器配置

[复制链接]

尚未签到

发表于 2018-11-18 09:38:16 | 显示全部楼层 |阅读模式
centos6.9默认httpd软件为2.2版本,centos7默认为httpd-2.4,二者之间配置基本相同,但是还有部分差别。那么阿拉就先从http2.2的相关配置说起。



httpd-2.2相关文件

配置文件

    /etc/httpd/conf/httpd.conf

    /etc/httpd/conf.d/*.conf

检查配置语法:

    httpd -t

    service httpd configtest

服务脚本:/etc/rc.d/init.d/httpd

脚本配置文件:/etc/sysconfig/httpd

脚本控制和启动:

    chkconfig httpd on/off (开机启动)

    service {start|stop|restart|status|configtest|reload} httpd

站点网页文档根目录:/var/www/html

模块文件路径:

    /etc/httpd/modules

    /usr/lib64/httpd/modules(两者为硬链接)

主程序文件:

    /usr/sbin/httpd

    /usr/sbin/httpd.worker

    /usr/sbin/httpd.event

主进程文件:/etc/httpd/run/httpd.pid (httpd服务没启动时,此文件是不存在的)

日志文件目录:/var/log/httpd/

        access_log:访问日志

        error_log:错误日志

帮助文档包:http-manual

httpd配置文件的组成:

    [root@CentOS6 ~]# grep Section /etc/httpd/conf/httpd.conf

    ### Section 1: Global Environment

    ### Section 2: 'Main' server configuration

    ### Section 3: Virtual Hosts

    配置格式:directive value(value根据文件系统不同有时会区分大小写)



httpd2.2功能配置

1.显示服务器版本信息

vim /etc/httpd/conf/httpd.conf,定位到ServerTokens开头的行

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

ServerTokens Prod[uctOnly] :Server: Apache

ServerTokens Major: Server: Apache/2

ServerTokens Minor: Server: Apache/2.0

ServerTokens Min[imal]: Server: Apache/2.0.41

ServerTokens OS: Server: Apache/2.0.41 (Unix)

ServerTokens Full (or not specified): Server: Apache/2.0.41

(Unix) PHP/4.2.2 MyMod/1.2

This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis.

After version 2.0.44, this directive also controls the information presented by the ServerSignature directive.

建议使用:ServerTokens Prod

默认地,服务器HTTP响应头会包含apache和php版本号。这会让***通过知道详细的版本号而发起已知该版本的漏洞***。

为了阻止这个,需要在httpd.conf设置ServerTokens为Prod,这会在响应头中显示“Server:Apache”而不包含任何的版本信息。

2.修改监听的IP和Port

vim /etc/httpd/conf/httpd.conf,定位到Listen开头的行

Listen [IP:]PORT

(1) 省略IP表示为本机所有IP

(2) Listen指令至少一个,可重复出现多次

Listen 80

Listen 8080

示例:

Listen 192.168.1.100:8080

Lsten 80

3.持久连接

Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接

断开条件:数量限制:100

时间限制:以秒为单位, httpd-2.4 支持毫秒级

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

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

设置: KeepAlive On|Off

KeepAliveTimeout 15

MaxKeepAliveRequests 100

测试: telnet WEB_SERVER_IP PORT

GET /URL HTTP/1.1

Host: WEB_SERVER_IP

4.MPM( Multi-Processing Module)多路处理模块

prefork, worker, event(试验阶段)

httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持。默认为/usr/sbin/httpd, 即prefork模式

确认方法:ps aux | grep httpd

查看静态编译的模块:httpd -l

查看静态编译及动态装载的模块:httpd –M

动态模块加载:不需重启即生效

动态模块路径:/usr/lib64/httpd/modules/

更换使用的httpd程序:

vim /etc/sysconfig/httpd

HTTPD=/usr/sbin/httpd.worker 重启服务生效

查看进程和线程 pstree -p|grep httpd

Httpd 2.4 与之不同

以动态模块方式提供

配置文件:/etc/httpd/conf.modules.d/00-mpm.conf

httpd –M |grep mpm

重启服务生效

pstree -p|grep httpd 查看进程和线程

prefork的默认配置:


StartServers 8

MinSpareServers 5

MaxSpareServers 20Ser

verLimit 256 最多进程数,最大20000

MaxClients 256 最大并发

MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)


worker的默认配置:


StartServers 4

MaxClients 300

MinSpareThreads 25

MaxSpareThreads 75

ThreadsPerChild 25

MaxRequestsPerChild 0 无限制


5.DSO: Dynamic Shared Object

加载动态模块配置

/etc/httpd/conf/httpd.conf

配置指定实现模块加载格式:

LoadModule  

模块文件路径可使用相对路径:

相对于ServerRoot(默认/etc/httpd)

示例:

LoadModule auth_basic_module

modules/mod_auth_basic.so

6.定义'Main' server的文档页面路径

DocumentRoot “/path”

文档路径映射:

DocumentRoot指向的路径为URL路径的起始位置

示例:

DocumentRoot "/app/data“

http://HOST:PORT/test/index.html

--> /app/data/test/index.html

注意:SELinux和iptables的状态

7.定义站点主页面

DirectoryIndex index.html index.html.var

8.站点访问控制常见机制

可基于两种机制指明对哪些资源进行何种访问控制

访问控制机制有两种:客户端来源地址,用户账号

文件系统路径:

s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

%t 服务器收到请求时的时间

%r First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本

%>s 响应状态码

%b 响应报文的大小,单位是字节;不包括响应报文http首部

%{Referer}i 请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的

%{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的应用程序



设定默认字符集

AddDefaultCharset UTF-8

中文字符集:GBK, GB2312, GB18030



定义路径别名

vim conf.d/test.conf

alias /bbs /app/bbsdir (后面是源)



基于用户的访问控制

认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码

认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源

认证方式两种:

basic:明文

digest:消息摘要认证,兼容性差

安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因

用户的账号和密码

虚拟账号:仅用于访问某服务时用到的认证标识

存储:文本文件,SQL数据库,ldap目录存储,nis等

basic认证配置示例:

(1) 定义安全域、

/root/http.log



远程客户端和用户验证的控制

Satisfy ALL|Any(httpd.conf)

ALL 客户机IP和用户验证都需要通过才可以

Any客户机IP和用户验证,有一个满足即可

示例:

Require valid-user

Order allow,deny

Allow from 192.168.1

Satisfy Any



status页面

查看模块有无打开httpd -M|grep statusvim

httpd.conf

LoadModule status_module modules/mod_status.so


SetHandler server-status

Order allow,deny

Allow from 192.168.37.0/24


ExtendedStatus On 显示扩展信息

访问http://192.168.37.106/server-status



cdn

curl -u http1:centos192.168.37.107/secret

-A IE20 模拟浏览器类型

-e/--refer

curl "-H user-agent: EI" -e http://www.baidu.com 192.168.37.106

构造请求报文的首部

curl -IL 跳转重定向



SetOutputFilter DEFLATE

DeflatCompress



实验:实现虚拟主机

一个服务器创建多个站点

cd /app

mkdir sit{1,2,3}

echo /app/site1/index.html > site1/index.html

echo /app/site2/index.html > site2/index.html

cho /app/site3/index.html > site3/index.html

ip add a 192.168.37.10/24 dev eth0

ip add a 192.168.37.20/24 dev eth0

ip add a 192.168.37.30/24 dev eth0



基于IP

还需要在DNS上配置名字解析,以便对应的域名转化为相应的IP

详情见:DNS章节

本机测试可以在/etc/hosts文件下添加

192.168.37.10 www.a.com

192.168.37.20 www.b.com

192.168.37.30 www.c.com

vim /etc/httpd/conf.d/test.conf

(参考主配置文件最下面)


documentroot /app/sist1



documentroot /app/sist2



documentroot /app/sist3


server httpd reload

访问http://www.a.com

http://www.b.com

http://www.c.com可看到不同的显示内容

基于PORT

vim /etc/httpd/conf.d/test.conf

(参考主配置文件最下面)

listen 8001

listen 8002

listen 8003


documentroot /app/site1



documentroot /app/site2



documentroot /app/site3


server httpd reload

访问http://www.a.com

http://www.a.com:8001/

http://www.a.com:8002/

ttp://www.a.com:8003/为不同页面

于FQDN

实验:实现基于FQDN的虚拟主机

原理:http请求报文首部中带有要访问的域名

Vim /etc/hosts

添加 192.168.37.106 www.a.com www.b.com www.c.com

(实际环境中需要在DNS上配置)

vim /etc/httpd/conf.d/test.conf

(参考主配置文件最下面)

按Ip访问的话最上面的为默认站点

NameVirtualHost *:80


ocumentroot /app/site1

servername  www.a.com

errorlog  logs/a.com.errlog

customlog logs/a.com.accesslog combined



documentroot /app/site2

servername  www.b.come

rrorlog  logs/b.com.errlog

customlog logs/b.com.accesslog combined





documentroot /app/site3

servername  www.c.com

errorlog  logs/c.com.errlog

customlog logs/c.com.accesslog combined




实验:启用压缩

服务器启用压缩httpd -M |grep mod_deflate

SetOutputFilter DEFLATE

DeflateCompressionLevel 9

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html



实验:实现HTTPS



1 yum install mod_ssl

2 vim /etc/httpd/conf.d/ssl.conf

SSLCertificateFile /etc/httpd/conf.d/ssl/httpd.crt

SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key

SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem



httpd2.4配置


httpd -t 检查语法

更改mpm模块:vim /etc/httpd/conf.modules.d/00-mpm.conf
测试性能:/var/www/html/m.txt(建议此文件大一些)
ab -c 100 -n 2000 http://192.168.37.107/m.txt
更改主目录
vim /ect/httpd/conf/httpd.conf
DocumentRoot "/app/website"
systemctl reload httpd
curl -I httpd://192.168.37.107
vim /ect/httpd/conf/httpd.conf
DocumentRoot "/app/website"

require all granted/denied 允许/拒绝所有主机






require ip 192.168.37.106只允许特定Ip访问





require all granted
require not ip 192.168.37.106只拒特定IP


基于虚拟主机FQDN
cd /etc/httpd/conf.d/
客户端
vim /etc/hosts
192.168.37.107 www.a.com www.b.com www.c.com




cd /app
mkdir website{1,2,3}
cd /etc/httpd/conf.d/
vim vhosts.conf

documentroot /app/website1
servername www.a.com

require all granted



documentroot /app/website2
servername www.b.com


require all granted


documentroot /app/website3
ervername www.c.com


require all granted

systemctl restart httpd
创建证书,https
yum install mod_ssl
ystemctl restart httpd
cd /etc/pki/tls/certs/
make httpd.pem单个文件
head -n 28 httpd.pem > /etc/httpd/conf.d/httpd.key
vim /etc/httpd/conf.d/httpd.crt
vim /etc/httpd/conf.d/ssl.conf
SSLCert.. /etc/httpd/conf.d/httpd.crt
SSLCertifi..key /etc/httpd/conf.d/httpd.key
  



make httpd.crt(生成俩文件)
vim /etc/httpd/conf.d/ssl.conf
SSLCert..  /etc/pki/tls/certs/httpd.crt


查看sendfile
grep sendfile /etc/httpd/conf/httpd.conf -i


启动反向代理
107前端 调度器 反向调理服务器LVS VS virtual server
106后端LVS Real Server
107:vim test.conf
ProxyPass "/" "http://192.168.37.106/"
ProxyPa***everse "/" "http://192.168.37.106/"
systemctl restart httpd
客户端:访问107即可得到106页面
105:bbs服务器
107:vim test.conf

ProxyPass "/images" "http://192.168.37.106:8000/images/"
ProxyPa***everse "/images" "http://192.168.37.106:8000/images/"
ProxyPass "/bbs" "http://192.168.37.106/bbs"
ProxyPa***everse "/bbs" "http://192.168.37.106/bbs/"
106:下/images/下放图片。
105:下放响应内容。






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-636447-1-1.html 上篇帖子: Yum安装LAMP(Centos7.2+Apache2.4+Mariadb5.5.56+PHP7.0.24) 下篇帖子: win7安装Apache并部署django环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表