Apache汇总

一、Apache的工作流程

客户端通过随机端口连接到Apache的80端口,服务器开启线程进程请求处理,匹配用户的请求是静态的还是动态的:

静态:服务器直接回传页面给客户端

动态:服务器–>PHP–>回传解析后的页面给客户端

工作流程:守护进程(httpd)–>工作进程–>产生线程(任务处理请求)

二、Apache的三种工作模式(MPM)

1.prefork工作模式(单进程只能同时处理一个线程请求)

优点:成熟稳定,兼容新老模块,不用考虑线程安全问题。

缺点:单进程消耗资源多,不擅长高并发。

2.worker工作模式(多进程,多线程同时处理)

优点:占用内存相对较少,支持高并发处理请求 缺点:必须考虑线程安全。

3.event工作模式 HTTP中采用了keepalived的方式减少了tcp连接的数量,这会导致线程被占用过长。用event工作模式可以断开tcp连接,将线程分配给新来的请求。 支持http请求但不支持https请求。

注:在编译时指定Apache的工作模式 ,–with-mpm=xxx

三、配置文件

1、apache文件目录位置:

| 服务目录 | /etc/httpd |

| 主配置文件 | /etc/httpd/conf/httpd.conf |

| 网站数据目录 | /var/www/html |

| 访问日志 | /var/log/httpd/access_log |

| 错误日志 | /var/log/httpd/error_log |

2、配置文件主要参数:

| ServerRoot | 服务目录 |

| ServerAdmin | 管理员邮箱 |

| User | 运行服务的用户 |

| Group | 运行服务的用户组 |

| ServerName | 网站服务器的域名 |

| DocumentRoot | 网站数据目录 |

| Listen | 监听的IP地址与端口号 |

| DirectoryIndex | 默认的索引页页面 |

| ErrorLog | 错误日志文件 |

| CustomLog | 访问日志文件 |

| Timeout | 网页超时时间,默认为300秒 |

3、Apache的目录别名设置: 修改主配置文件httpd.conf,将此行注释取消:

Include conf/extra/httpd-autoindex.conf /usr/local/apache/conf/extra/httpd-autoindex.conf -->配置访问文件的别名 #/usr/local/apache/bin/apachectl -t -->检查配置文件是否正确 Syntax OK

4、Apache的用户认证:

编辑主配置文件httpd.conf 在需要进行登陆认证的目录标签中加入如下配置:

<Directory “/a”> ------>声明被保护的目录

AllowOverride All ---->开启权限认证文件

.htaccess Options None

Require all granted

在指定目录/a/下创建权限文件

.htaccess AuthName “Welcome to atguigu” ----->提示信息

AuthType basic ------>加密类型

AuthUserFile /usr/local/apache/apache.passwd ------>密码文件的路径

require valid-user ----->允许密码文件中的所有用户访问

建立密码文件,加入用户到密码文件: /usr/local/apache/bin/htpasswd -c /usr/local/apache/htdocs/apache.passwd test1

---->第一次创建用户 -c 之后用-m 访问IP+加密文件路径,输入用户密码就可访问。

四、虚拟主机 apche支持3种类型虚拟主机:
基于IP的虚拟主机
基于端口的虚拟主机
重点 基于域名的虚拟主机 ---->添加虚拟主机配置修改配置文件:/usr/local/apache/conf/extra/httpd-vhosts.conf 配置httpd.conf:去掉Include conf/extra/httpd-vhosts.conf 前面的注释 添加内容格式如下

<VirtualHost 192.168.10.10>

DocumentRoot “/home/wwwroot/www”

ServerName “www.123456.com

<Directory “/home/wwwroot/www”>

AllowOverride None

Require all granted

五、域名跳转

编辑主配置文件httpd.conf,将 LoadModule rewrite_module modules/mod_rewrite.so 注释去掉,开启rewrite模块。

编辑网站目录文件的.htaccess文件,添加rewrite规则

<IfModule mod_rewrite.c> //需要mod_rewrite模块支持

RewriteEngine on //打开rewrite功能

RewriteCond %{HTTP_HOST} !^111.com$ //定义rewrite的条件,主机名(域名)111.com满足条件

RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行。301表示永久重定向的状态码,L表示跳转一次。

编辑httpd-vhost.conf文件,修改目录访问权限 AllowOverride All //将访问权限修改为All

六、Apache+openssl实现https (重点)

1、准备工作: 检查SSL模块是否安装是否启用。 #apachectl -M

2、openssl genrsa -out ca.key 1024 创建服务器私钥,生成RSA密钥

openssl req -new -key ca.key -out atguigu.csr 生成csr文件交给CA签名后形成服务端自己的证书

openssl x509 -req -days 365 -sha256 -in atguigu.csr -signkey ca.key -out atguigu.crt 使用CA服务器签发证书,设置证书的有效期等信息。

注意:1、生成完密钥文件和证书文件后,将文件存放在Apache的安装目录下的cert目录下

2、在生产环境必须要在https证书场商注册(否则浏览器不识别)

3、配置文件修改 调用ssl模块,并启用ssl独立配置文件,修改主配置文件httpd.conf Include conf/extra/httpd-ssl.conf 开启ssl配置文件,去掉#号 打开 apache 安装目录下 conf/extra/httpd-ssl.conf 文件

添加 SSL 协议支持协议,去掉不安全的协议

SSLProtocol all -SSLv2 -SSLv3

修改加密套件如下

SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM SSLHonorCipherOrder on

证书公钥配置

SSLCertificateFile cert/atguigu.crt

证书私钥配置

SSLCertificateKeyFile cert/ca.key

4、修改主配置文件,添加虚拟主机。

ServerName localhost:443

DocumentRoot “/usr/local/apache/htdocs” # 证书公钥配置

SSLCertificateFile cert/atguigu.crt # 证书私钥配置

SSLCertificateKeyFile cert/ca.key(拿到的key) # 证书链配置,如果该属性开头有 '#'字符,请删除掉

SSLCertificateChainFile cert/atguigu.crt

六、Apache的日志切割

修改主配置文件httpd.conf 找到这两行的errorlog和customlog

将其改为

ErrorLog “| /usr/local/apache/bin/rotatelogs /home/logs/www/%Y_%m_%d_error_log 86400 480” // 86400秒 可以改为 大小2M

CustomLog “| /usr/local/apache/bin/rotatelogs /home/logs/www/%Y_%m_%d_access_log 86400 480” common

配置文件中CustomLog日志格式的标签有common和combined两种选择。

rotatelogs说明:
rotatelogs logfile [ rotationtime [ offset ]] | [ filesizeM ]
rotationtime指的是设定多少秒后进行日志切割,如这里的300秒,在设定的时间之后系统将自动切割日志;
offset指的是日志时间的偏移量,如果不设置该偏移量,则默认为0,且显示的时间与北京时间会不一样,与北京时间相差8个小 时,故建议将其设置为+480,单位为分钟;
filesizeM指的是日志多大之后自动切割,可接受的单位为K,M,G,上面的ErrorLog设置为400M之后自动切割日志

七、配置Apache不记录指定文件类型的日志 编辑虚拟机配置文件

#vim /usr/local/apache/conf/httpd.conf

ErrorLog “logs/test.com-error_log”

SetEnvIf Request_URI “._\.gif$” p_w_picpath-request

SetEnvIf Request_URI “._\.jpg$” p_w_picpath-request

SetEnvIf Request_URI “._\.png$” p_w_picpath-request

SetEnvIf Request_URI “._\.bmp$” p_w_picpath-request

SetEnvIf Request_URI “._\.swf$” p_w_picpath-request

SetEnvIf Request_URI “._\.js$” p_w_picpath-request

SetEnvIf Request_URI “.*\.css$” p_w_picpath-request

CustomLog “|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400” combined env=!p_w_picpath-request

解释说明: SetEnvIf 设置匹配条件,声明 p_w_picpath-request 定义的别名 env=!p_w_picpath-request 排除别名是p_w_picpath-request的项

八、Apache配置静态缓存

编辑主配置文件httpd.conf,启用静态缓存模块 expires_module LoadModule expires_module modules/mod_expires.so

添加配置模板缓存类型

<IfModule mod_expires.c>

ExpiresActive on

ExpiresByType p_w_picpath/gif “access plus 1 days”

ExpiresByType p_w_picpath/jpeg “access plus 24 hours”

ExpiresByType p_w_picpath/png “access plus 24 hours”

ExpiresByType text/css “now plus 2 hours”

ExpiresByType application/x-javascript “now plus 2 hours”

ExpiresByType application/x-shockwave-flash “now plus 2 hours”

ExpiresDefault “now plus 0 min”

这个单位可以是‘天、小时、分钟、月

查看缓存情况命令: curl -x192.168.0.50:80 ‘192.168.0.50/1.jpg’ -I

九、禁止解析PHP 为了网站安全,某个目录下禁止解析PHP,防止上传木马文件。 修改主配置文件,添加防止解析PHP规则

<Directory /data/www/data> # 对应所在的Directory

php_admin_flag engine off # 关闭php解析引擎

<filesmatch “(.*)php”> # php相关的文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值