Apache
1. http
1.1 http协议(简单介绍)
1.http协议:超文本传输协议(HyperText Transfer Protocol),所有的www文件必须遵守这个标准。
2.目的:为了提供一种发布和接收HTML页面的方法.
3.默认端口:80
1.2 https(简单介绍)
1. https:Hyper Text Transfer Protocol overSecure Socket Layer
2.安全的http通道。即,http安全版,在http下加入了ssl层,加密的数据传输协议
1.3 http版本
http1.0:使用非持久连接,一个tcp连接只能传输一个web对象
http1.1:使用持久连接,即一个tcp连接能够传输多个web对象
1.4 http请求过程
1.1 http服务请求流程
输入域名—>dns解析域名—>建立TCP连接—>发送请求信息—>http服务器响应,发送html格式文件—>
1.2 http常见状态码(重要介绍错误码)
消息(1字头)
成功(2字头):
200ok: 服务器成功返回网页
重定向(3字头):
301Moved Permanently:永久跳转,请求的网页已经永久跳转到新位置
请求错误(4字头重点):
403Forbidden:服务器已经理解请求,但是拒绝执行,且该请求也不能被重复提交
404Not Found:请求失败,请求的资源在服务器上没有发现。该错误的原因很大可能是服务器端没有这个页面。
407Proxy Authentication Required:客户端必须在代理服务器上进行身份验证
408Request Timeout:请求超时
服务器错误(5字开头):
500Internal Server Error:服务器出现错误,导致无法完成请求的处理(服务器端源代码出现错误)
502Bad Gateway:网关或者代理工作的服务器尝试执行请求时,收到无效的响应
503 Service Unavailable:临时的服务器维护或者过载,服务器当前无法处理请求
504 Gateway Timeout:网关或者代理工作的服务器尝试执行请求,没有收到响应,例:dns查询超时
505HTTP Version Not Supported:服务器不支持,拒绝使用的HTTP版本
2. web服务
2.1 web版本
web1.0:以静态页面为主,早期的门户类新闻页或者静态页面
web2.0:以动态页面为主,以用户为中心,网站由用户参与或者编辑例如:bbs blog sns 微博
web3.0:在web2.0的基础上网站内的信息可以和网站相关信息进行交互,完全基于web,浏览器可实现复杂程序才能实现的系统功能(目前仍然以web2.0为主)
2.2 web架构模式
b/s模式:Browser/Server(浏览器/服务器)仅仅需要web浏览器就行
优点:1.无需安装客户端有web浏览器即可,操作系统自带
2.可以直接放在广域网,通过一定的控制权限实现多用户访问的目的,交互性较强
3.无需升级客户端,直接升级服务器就行
缺点:1.需要兼容各种浏览器
2.测试人员需要做各种测试(尤其是浏览器兼容测试)
3.速度和安全性较差
c/s模式:Client/Server(客户端/服务器)例如一般的系统,qq客户端等等,一般通过socket服务器端才能建立连接
优点:1.客户端界面和操作可以很丰富
2.安全性能可以很容易保证,多层认证不难
3.有一层交互,响应速度很快
4.服务器端和客户端能够很好的兼容
缺点:1.适用面窄,用于局域网
2.用户群固定,需要安装客户端
3.维护成本高,一次升级,所有的客户端都需要升级
2.3 静态网页、动态网页和伪静态网页
1.静态网页:纯粹的html格式网页(可以包含图片,JS(前端功能实现),css(样式)等)没有后台数据可以不含php,jsp,net和可交互的网页。格式:.htm .html .xml .jpg图片格式,.avi .flv等视屏格式
特点: 1.有固定的URL,并且是html等结尾,地址中没有?和&
2.网页保存在网站服务器文件系统中为每个网页都是独立的文件
3.优点:静态页面内容相对稳定,容易被搜索引擎收录,加载速度最快,对服务器压力最小
4.缺点:没有数据库内容,网站制作和维护工作量大,尤其是信息量特别大,制作比较困难,交互性差,功能方面有较大限制
5.服务端不解析,因此可以接收更多的并发访问,数据在浏览器端解析
2.动态网页:通过执行asp,php,jsp,net等程序生成客户端网页代码的网页。可以通过网站后台管理系统对网站内容的更新和管理,格式:.asp .aspx .php .jsp .do .cgi .perl,动态网页URL经常有?和&
特点: 1.以数据库技术为基础,可以大大降低网站的维护工作量
2.实现更多的功能,例如用户注册,用户管理,发表博文等等
3.大多并不是独立存在于服务器的网页文件(php、jsp),只有用户请求时服务器才返回一个完整的网页。
4.由于URL存在?和&搜索引擎收录域名是会存在一定的任务,一般搜索蜘蛛不会抓取地址?后面的内容。
5.程序在服务器端解析,因此会大量消耗CPU、内存等服务器资源,效率远远不如静态网页
6.缺点:效率差,并发低
3.伪静态网页:从URL结构及页面名称看,伪静态和静态页面是一样的,伪静态也是以htm或者html的格式,只是改变了URL的表现形式,便于搜索引擎收录和提升用户体验,使用伪静态页面并不能提升网站的性能。
1.动态页面伪静态技术:通过rewrite规则,URL地址重写,消除动态网页中的参数,仅仅改变了地址路径。
2.缺点较多,使用伪静态转换技术例如rewrite会消耗更多的服务器资源
2.4 IP PV UV 并发
1.PV:页面浏览量或点击量,是衡量一个网站或网页用户的访问量。pv值:即24小时能用户点击网站的网页多少次,指的是页面刷新的次数,每一次页面刷新,就算做一次pv流量。原理:浏览器发出一个网络服务器的请求,网络服务器接到这个请求后,会将该请求对应的一个网页发送个浏览器从而产生一个pv,无论这个页面是否打开,都算作一个pv。
2.UV:即独立访客数,指访问某个网站或者点击某个网页的不同IP地址人数,在同一天内UV只记录第一次进入网站的具有独立IP的访问者。一般是通过IP和cookie来判断UV。
3.IP:即独立IP数,独立的IP访问用户,指一天内使用不同IP地址的用户访问网站的数量,两台机器访问而使用同一个IP只能算作一个IP访问,IP和UV之间的书记不出差异太大,通常UV量比IP量高一点,每个UV相对于每个IP更准确。
4.并发:指一台服务器同时多少人访问,一般是用日pv/ip/uv来判定(pv较多)
2.5 常用的web服务器(linux)
apache:中小静态web服务,重量级,耦合度大,速度性能不及轻量级搞,消费cpu、内存高,稳定
nginx:大型静态web服务,轻量级,高性能http和反向代理服务器消耗资源低,节省带宽
tomcat:中小企业动态网页,重要是java容器(jsp,do),静态和高并发处理弱
resin:大型动态网页,java容器,可靠,用于集群
php:php程序的解析容器
3. httpd
3.1 apache的简单介绍
1.apache:开源的web服务器
2.特点:功能强大、配置简单、速度快、应用广泛、性能稳定可靠、可做单利服务器或者负载均衡
3.应用场合:
1.运行静态HTML网页、图片、(处理静态小文件能力不及nginx)
2.使用php引擎运行php、perl、python等程序,lamp被称之为经典组合
3.与tomcat/resin运行jsp,java等程序,成为中小企业首选
4.作代理服务器,负载均衡,rewrite规则过滤等
3.2 apache的安装
1.安装依赖
[[email protected] ~]# yum -y install gccgcc-c++ pcre pcre-devel openssl openssl-devel
2.安装apr和apr-util
[[email protected] soft]# tar xfapr-1.5.2.tar.gz [[email protected] soft]# tar xfapr-1.5.2.tar.gz [[email protected] apr-1.5.2]# ./configure--prefix=/usr/local/apr [[email protected] apr-1.5.2]# make &&make install ---------------------------------------------------------- [[email protected] soft]# tar xfapr-util-1.5.2.tar.gz [[email protected] soft]# cd apr-util-1.5.2 [[email protected] apr-util-1.5.2]#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ [[email protected] apr-util-1.5.2]# make&& make install
3.安装httpd
[[email protected] soft]# tar xfhttpd-2.4.12.tar.gz [[email protected] soft]# cd httpd-2.4.12 [[email protected] httpd-2.4.12]# ./configure --prefix=/usr/local/apache2--enable-so --enable-ssl --enable-rewrite --with-mpm=worker --with-suexec-bin--with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ [[email protected] httpd-2.4.12]# make&& make install
4.启动服务
[[email protected] ~]#/usr/local/apache2/bin/apachectl start [[email protected] ~]# ps -ef |grep http root 3041 1 0 13:29 ? 00:00:00 /usr/local/apache2/bin/httpd-k start daemon 3042 3041 0 13:29 ? 00:00:00 /usr/local/apache2/bin/httpd-k start daemon 3043 3041 0 13:29 ? 00:00:00 /usr/local/apache2/bin/httpd-k start daemon 3044 3041 0 13:29 ? 00:00:00 /usr/local/apache2/bin/httpd-k start root 3129 1050 0 13:31 pts/0 00:00:00 grep http
5.验证
打开浏览器输入192.168.137.8(本机IP)
6.常见命令
/usr/local/apache2/bin/apachectl –t 检查配置文件语法错误
/usr/local/apache2/bin/apachectl graceful平滑重启
3.3 apache常见安装参数
--prefix |
指定apache程序安装主目录 |
--enable-so | 开启模块功能,支持DSO(动态共享对象) |
--enable-ssl | 支持SSL加密 |
--enable-rewrite |
支持地址重写,激活伪静态功能 |
--enable-expires | 让内容在浏览器缓存多久 |
--enable-modules=most | 激活大多数模块 |
--with-mpm | 设置apache工作模式 |
--with-suexec-bin | 支持SUID、SGID |
--with-apr | 指定apr程序的绝对路径 |
--with-apr-utils | 指定apr-util程序的据对路径 |
3.4 apache常见目录及文件
/bin:
ab: http服务器性能测试工具主要是压力测试工具
apachectl:这是一个脚本,也是apache启动命令
htcacheclean:清理磁盘缓冲区的命令,一般很少用
apxs:是apache 服务器编译和安装扩展模块的工具,例如在编译php软件时就用到了此命令,--with-apxs2=/usr/local/apache/bin/apxs
htpasswd:建立和更新基本的认证文件,如:配置nagios等监控服务时会用到
httpd:是apache的控制命令程序,apachectl执行时会调用httpd
rotatelogs:apache自带的轮训命令,常用cronlog
/conf:
httpd.conf:apache的主配置文件
extra:这是额外的apache配置文件目录,httpd-vhosts.conf默认在此目录
/htdocs:编译安装时apache的默认网站发布站点
index.html:默认首页文件,习惯有index.php、index.html、index.jsp等
/logs:apache默认的日志路径,包括错误日志及访问日志
access_log:apache的访问日志
error_log:apache的错误日志,如果apache出现启动故障等问题,一定要看这个错误日志
httpd.pid:httpd的pid文件,httpd启动后,会把所有进程的IP号写到此文件中
/modules:apache的模块目录,比如php,memcache等模块编译后都在这
3.5 apache配置文件介绍
1.apache主配置文件:
ServerRoot:服务的根目录 Listen80 监听端口 <IfModule ...>模块开头</IfModule> User daemon 默认用户 Group daemon 默认组 ServerAdmin 管理员邮箱 DocumentRoot 默认网站发布目录 <Directory /> 权限根目录拒绝其他人访问 Options FollowSymlinks 可以带符号连接 AllowOverride None 禁止一些功能 Order deny,allow 不让任何人访问根目录 Deny from all </Directory> <Directory "/usr/local/apache/htdocs"> 自己添加站点必须添加这段内容 Options Indexs FollowSymlinks 第一个优化将Indexs前面加个减号或者删掉 AllowOverride None Order allow,deny Allow from all </Directory> <IfModuledir_moudle> 指定访问的首页 DirectoryIndex index.html </IfModule> <FilesMatch "^\.ht"> 文件匹配 Order allow,deny Deny from all Satisfy All </FilesMatch> 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> CustomLog "logs/access_log"common </IfModule> <IfModule alias_module> cgi配置 ScriptAlias/cgi-bin/ "/usr/local/apache/cgi-bin/" </IfModule> <IfModule cgid_module> </IfModule> <Directory"/usr/local/apache/cgi-bin"> AllowOverrideNone OptionsNone Orderallow,deny Allowfrom all </Directory> DefaultType text/plain 文件缺省类型 <Ifmodule mime_module> TypesConfig conf/mime.types AddTypeapplication/x-compress .Z AddTypeapplication/x-gzip .gz .tgz AddTypeapplication/x-httpd-php .php </IfModule> <IfModule ssl_module> SSLRandomSeedstartup builtin SSLRandomSeed connect builtin </IfModule>
2.apache扩展配置文件
httpd-vhosts.conf NameVirtualHost *:80 基于域名的虚拟主机*为IP地址 <VirtualHost*:80> [email protected] DocumentRoot"/usr/local/apache/docs/dummy-host.example.com" ServerNamedummy-host.example.com ServerAliaswww.dummy-host.example.com ErrorLog"logs/dummy-host.example.com-error_log" CustomLog"logs/dummy-host.example.com-access_log" common </VirtualHost> httpd-mpm.conf <IfModule !mpm_netware_module> PidFile"logs/httpd.pid" pid文件 <IfModule> <IfModule!mpm_winnt_module> <IfModule !mpm_netware_module> LockFile "logs/accept.lock" 锁文件 </IfModule> </IfModule> <IfModulempm_prefork_module> mpm的prefork模式 StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 并发 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_worker_module> mpm的worker模式 StartServers 2 MaxClients 150 并发 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> httpd-defaul.conf Timeout 300 连接超时 KeepAlive On 保持连接状态 MaxKeepAliveRequests 100 最大连接请求数 KeepAliveTimeout 5 在等待下一连接的时间 ServerTokens Full 隐藏apache版本 ServerSignatureOn
3.6 apache虚拟主机
1.虚拟主机:部署多个站点,每个站点希望用不同的域名和站点目录,或者不同的端口,或者不同的IP。需要虚拟主机功能,即一个apache服务器配置多个站点,就需要虚拟主机
2.虚拟主机的分类:基于域名(常用);基于端口;基于IP
3.配置httpd-vhosts.conf
基于域名:
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot"/var/html/www" ServerNamewww.test1.com ServerAlias test1.com Error"logs/www-error_log" Customlog"logs/www-access_log" common </VirtualHost> <VirtualHost*:80> ServerAdmin [email protected] DocumentRoot "/var/html/blog" ServerName blog.test2.com #ServerAlias test2.com Error "logs/blog_error_log" Customlog "logs/blog_access_log"common </VirtualHost> <VirtualHost*:80> ServerAdmin [email protected] DocumentRoot "/var/html/bbs" ServerName bbs.test3.org #ServerAlias test3.com Error "logs/bbs_error_log" Customlog "logs/blog_access_log"common </VirtualHost>
基于ip:
<VirtualHost 192.168.1.11:80> ServerName www.test1.com DocumentRoot /www/test1/ <Directory “/www/test1″> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow From All </Directory> </VirtualHost> <VirtualHost 192.168.1.12:80> ServerName www.test1.com DocumentRoot /www/test2/ <Directory “/www/test2″> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow From All </Directory> </VirtualHost> <VirtualHost 192.168.1.13:80> ServerName www.test1.com DocumentRoot /www/test3/ <Directory “/www/test3″> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow From All </Directory> </VirtualHost>
基于端口:
1. 修改配置文件
将原来的
Listen 80
改为
Listen80
Listen 8080
2. 更改虚拟主机设置:
<VirtualHost 192.168.1.10:80> DocumentRoot /var/www/test1/ ServerName www.test1.com </VirtualHost> <VirtualHost 192.168.1.10:8080> DocumentRoot /var/www/test2 ServerName www.test2.com </VirtualHost>
上述完成之后紧接着设置下面参数
打开主配置文件中调用
修改本地host文件域名解析
在主配置文件中配置发布目录
由于虚拟主机本身是非常重要的,在下次,我会单独的写一个文档来讲述虚拟主机!!!
3.7 apache日志轮询
1.安装轮询工具(cronolog)
wget下载cronolog安装包
./configure make&& make install ll/usr/local/sbin/cronolog
查看cronolog工具是否安装在apache的/usr/local/apache2/conf/extra/httpd-vhosts.conf下
2.在配置主机位置将原来的日志语句注释掉,添加按天轮询语句
CustomLog "|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d.log" combined
(combined 组合日志格式)
3.8 apacherewrite
1. Rewirte主要的功能就是实现URL的跳转
2.安装proxy模块
/usr/local/apache2/bin/apxs -c -i -a mod_proxy.c proxy_util.c /usr/local/apache2/bin/apxs -c -i -a /home/tools/httpd-2.2.15/modules/proxy/mod_proxy_http.c
3.检查安装模块
查看apache的配置文件有一下两行就行了,modules目录下应该也多了mod_proxy.so和mod_proxy_http.so模块
LoadModuleproxy_module modules/mod_proxy.so LoadModuleproxy_http_module modules/mod_proxy_http.so
4.然后配置httpd-vhost.conf
然后配置httpd-vhost.conf
<VirtualHost *:80> ServerAdmin ……qq.com DocumentRoot "/var/www/ " ServerName www.test10.com RewriteEngineon RewriteCond%{HTTP_HOST} ^www.test1.com [NC] RewriteRule^(.*)$ shttp://www.test10.cc$1 [P] </VirtualHost>
这篇文章由于篇幅太长了,可能不适合于技术文档阅读。而且由于在Apache方面的虚拟主机rewrite重写,日志轮询方面说的不是很详细,在下次会单独写一篇关于他们的文档。。。这篇文章可能会有许多错误,希望大家能够指出,不胜感激,谢谢