实现http协议的程序有很多,比较有名的有:IIS目前市面上使用最多的,nginx使用的人数正在快速正加,apache古老的。apache虽然正在被…但是我们也要学习一下,它的市场份额还是有一些的,而且它的实现方式更加经典。
以上只是在http协议上实现静态数据传输,还有动态数据部分,动态数据就是可以变化的数据,这个变化就是根据浏览者的不同网页显示不同的数据。动态网页的实现语言有:php实现它的服务也叫php;asp.net实现它的是IIS,IIS不仅是静态服务器也是动态服务器;javascript实现它的就有很多了最著名的是tomcat,它也可以提供静态页面。
一http的静态数据实现apache
1工作流程
上图就是一个Apache处理一次请求的流程
2配置文件分布
Apache2.4的配置文件被分散多个文件里,主配置文件在/etc/httpd/conf目录下,模块的配置文件在/etc/httpd/conf.modules.d目录中,其它配置文件在/etc/httpd/conf.d目录下。
3主配置文件
主配置文件中一些重要的基本配置,Apache的特性设置我分开说ServerRoot "/etc/httpd" #日志的存放目录
Listen 80 #监听的端口
User apache #用户
Group apache #组
ErrorLog "logs/error_log" #错误日志日志
LogLevel warn #错误日志级别,其它的级别debug, info, notice, warn, error, crit,alert, emerg.
这两之间定义的是访问日志的个格式和级别
以下四行是错误从定性的定义,定义是根据响应状态码定义的,当然我们还可以根据状态码定义更多
#ErrorDocument 500 "The server made aboo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404"/cgi-bin/missing_handler.pl"
#ErrorDocument 402http://www.example.com/subscription_info.html
EnableSendfile on #这个内容特别重要启用这个功能后,处理静态数据的流程变成下图,可以和之前的图片对比一下,这样可以减少数据拷贝次数。出现这种情况主要是因为,静态数据不需要加工,在磁盘读取后的内容就是我们想返回给用户的内容。
4提供内容的路径和路径特性定义DocumentRoot "/var/www/html" #默认提供网页页面的路径
Options IndexesFollowSymLinks # Indexes显示目录下的文件;FollowSymLinks 显示链接文件的原文件内容;SymLinksifOwnerMatch 当链接文件和原文件为相同属主时显示文件内容,ExecCGI允许运行脚本
#AllowOverride controls what directives may be placed in files.
#It can be "", "None", or any combination of the keywords:
AllowOverride None #不允许路径重写,All允许重写,重写方法可以写在这当前文件中写也可以写在目标重写目录的.htaccess文件中
Require all granted #允许任何人访问,也可以定义使用哪些用户登录,基本上没有人使用。
5持久连接KeepAlive On
KeepAliveTimeout 30ms
MaxKeepAliveRequests 20
6模式
StartServers 8 #服务启动时启动的子进程数
MinSpareServers 5 #最少空闲子进程数
MaxSpareServers 20
ServerLimit 256 #同时启动的子进程数上限
MaxClients 256 #同时服务的客户端数上限(支持的并发数上限)
MaxRequestsPerChild 4000 #每个子进程在其生命周期内处理的请求数上限
StartServers 4 #服务启动时启动的子进程数
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25 #每个子进程可启动的线程数
MaxRequestsPerChild 0 #每个子进程可处理的请求数,0表示无限制
7压缩
这个内容定义在
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xmltext/javascript #还有其它的压缩选项
BrowserMatch"^Mozilla/2" no-gzip #不支持压缩的直接返回原文件
8 https实现
然后把这三个文件放在如下目录中,还有装mod_ssl的安装包[root@centos7 ~]# ls /etc/httpd/ssl/
httpd.crt httpd.csr httpd.key
[root@centos7 ~]# vim/etc/httpd/conf.d/ssl.conf
#编辑如下两行
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile/etc/httpd/ssl/httpd.key
#添加如下五行
Options None
AllowOverride None
Require all granted
9 http协议重定向到https
Options Indexes FollowSymLinks
AllowOverride All #允许重写,这项是重写路径的关键
Require all granted
编辑/www/phpMyAdmin-4.4.14.1-all-languages/.htaccess文件
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
二http动态数据的实现php
1 Apache和php通信的方式
有三种,1Apache以模块的方式调用php;2Apache和php通过fastcgi模式通信;3通过cgi模式通信这种实现方式基本没人使用。
目前fastcgi正在取代模块方式,取代的原因是因为通过模块方式响应请求,每次完成一次php请求都要启动一次php进程,完成请求还要销毁进程,这个过程会浪费大量的时间。fastcgi模式则是把php直接运行在内存中,使用的时候直接向127.0.0.1:9000发送请求就能可以,减少了进程生成销毁的消耗。
php的配置文件一定要关闭display_errors
post_maxsize
2 xcache
xcache是加速php请求的工具,它对访问频度特别大的动态网页的加速特别明显。它的功能是把php请求的报文和处理后数据对于起来保存,下次再遇到同样的请求可以直接响应。学术一点就是XCache能够实现在内存中开辟一个缓存空间,将任何进程编译的opcode放在缓存空间里面,下次有进程需访问同一个文件就可以直接去缓存空间去取省去编译的步骤。
三四个网站模板
wordpress这是开源的php个人博客模板
phpwind论坛模板
discus论坛模板
phpmyadmin数据库mysql的网页管理工具
这四个网站模板实现可以帮助我们熟悉对php的了解。
总结
这一节基本上说的全是配置文件原理性的东西和Apache常用的功能,子所以不写具体步骤主要是网上类似博客特别多。这一节的重点,Apache的持久连接,这个需要根据生产环境具体选择需要摸索;Apache的压缩传输;https传输,很多网站都在慢慢实现全站https;重定向;Apache和php之间尽量使用fastcgi模式通信;xcache加速php请求。还有四个网页模板最好都实现一遍。