HTTP概述
WWW的目的就是使信息更易于获取,而不管它们的地理位置在哪里。当使用超文本作为WWW文档的标准格式后,人们开发了可以快速获取这些超文本文档的协议—HTTP协议,即超文本传输协议。
HTTP是应用级的协议,主要用于分布式、协作的信息系统。HTTP协议是通用的、无状态的,其系统的建设和传输与数据无关。HTTP也是面向对象的协议,可以用于各种任务,包括名字服务、分布式对象管理、请求方法的扩展、命令等。
在Internet上,HTTP通信往往发生在TCP/IP连接上,其默认的端口为80,也可以使用其他端口。
web服务
web服务的实现采用客户/服务器模型
客户机运行www客户程序-浏览器,它提供良好、统一的用户界面。浏览器的作用就是解释和显示web页面,响应用户的输入请求,并通过HTTP协议将用户请求传递给web服务器。
web服务器运行服务器程序,它最基本的功能是侦听和响应客户端的HTTP请求,向客户端发出请求处理结果信息。
web服务通常可以分为两种:静态web服务和动态web服务。
web服务工作原理
Web浏览器使用HTTP命令向一个特定的服务器发出Web页面请求。
若该服务器在特定端口(通常是TCP 80端口)处接收到Web页面请求后,就发送一个应答并在客户和服务器之间建立连接
服务器Web查找客户端所需文档,若Web服务器查找到所请求的文档,就会将所请求的文档传送给Web浏览器。若该文档不存在,则服务器会发送一个相应的错误提示文档给客户端。Web浏览器接收到文档后,就将它显示出来。
当客户端浏览完成后,就断开与服务器的连接。
LAMP平台概述
什么是LAMP
目前最为成熟的一种企业网站应用模式,可提供动态Web站点应用及开发环境
构成组件
Linux、Apache、MySQL、PHP/Perl/Python
LAMP的优势
成本低廉
可定制、易于开发
方便易用、安全和稳定
Apache简介
Apache起源
根据NCSA的服务器发展而来
源于 A Patchy Server,著名的开源Web服务软件
1995年时,发布Apache服务程序的1.0版本
由Apache软件基金会(ASF)负责维护
最新的名称为 “Apache HTTP Server”
市场占有率60%左右
官方站点:http://httpd.apache.org/
主要特点
开发源代码、跨平台应用
支持多种网页编程语言
模块化设计、运行稳定、良好的安全性
LAMP环境安装软件
httpd (提供 Apache 主程序)
mysql (MySQL 客户端程序)
mysql-server (MySQL 服务器程序)
php (PHP 主程序含给 apache 使用的模块)
php-devel (PHP 的发展工具,这个与 PHP 外挂的加速软件有关)
php-mysql (提供给 PHP 程序读取 MySQL 数据库的模块)
Apache主要的文件:
/var/www/cgi-bin/
默认给一些可执行的 CGI (网页程序) 程序放置的目录;当你输入http://localhost/cgi-bin/ 时所显示的数据所在。
/var/log/httpd/ 日志所放置的位置
/usr/sbin/apachectl
这个就是 Apache 的主要执行脚本,它可以主动的侦测系统上面的一些设定值,好让你启动 Apache 时更简单。
/usr/sbin/httpd 是主要的 Apache 二进制执行文件
/usr/bin/htpasswd 做用户验证来生成验证文件的命令
/var/www/cgi-bin/
默认给一些可执行的 CGI (网页程序) 程序放置的目录;当你输入http://localhost/cgi-bin/ 时所显示的数据所在。
/var/log/httpd/ 日志所放置的位置
/usr/sbin/apachectl
这个就是 Apache 的主要执行脚本,它可以主动的侦测系统上面的一些设定值,好让你启动 Apache 时更简单。
/usr/sbin/httpd 是主要的 Apache 二进制执行文件
/usr/bin/htpasswd 做用户验证来生成验证文件的命令
mysql主要的文件
/etc/my.cnf
这个是 MySQL 的配置文件,包括你想要进行 MySQL 数据库的优化,或者是针对 MySQL 进行一些额外的参数指定, 都可以在这个文件里面达成
/var/lib/mysql/
这个目录则是 MySQL 数据库文件放置的位置,通过备份这个目录就可以备份数据库
PHP主要的文件
/etc/httpd/conf.d/php.conf 安装后自动生成
/etc/php.ini
PHP的主要配置文件,包括你的 PHP 能不能允许使用者上传档案?能不能允许某些低安全性的标志等等, 都在这个配置文件当中设定!
/usr/lib64/httpd/modules/libphp5.so
PHP这个软件提供给 Apache 使用的模块,必须存在!
/etc/php.d/mysql.ini, /usr/lib64/php/modules/mysql.so
PHP是否可以支持 MySQL 接口?是由 php-mysql 软件提供的
/usr/bin/phpize, /usr/include/php/
如果你想要安装类似 PHP 加速器以让浏览速度加快的话,那么这个文件与目录就得要存在,否则加速器软件无法编译成功,这两个数据是 php-devel 软件所提供的。
httpd.conf配置文件
httpd.conf配置文件主要由全局环境、主服务器配置和虚拟主机3个部分组成。每部分都有相应的配置语句,该文件所有配置语句的语法为“配置参数名称 参数值”的形式。
httpd.conf中每行包含一条语句,行末使用反斜杠“\”可以换行,但是反斜杠与下一行中间不能有任何其他字符(包括空白)。
httpd.conf的配置语句除了选项的参数值以外,所有选项指令均不区分大小写,可以在每一行前用“#”号表示注释。
/usr/local/apache2/conf/httpd.conf
全局配置
ServerRoot
用于指定指定守护进程httpd的运行目录,httpd在启动之后自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个路径之下。
Timeout 60
用于定义客户程序和服务器连接的超时间隔,超过这个时间间隔(以秒计)后,服务器将断开与客户机的连接。
PidFile run/httpd.pid 存放PID的文件位置。
Listen 80 设定http服务的默认端口。
User/Group 设定服务器程序的执行者与属组。
KeepAlive On
在HTTP1.0中,一次连接只能作传输一次HTML请求,而KeepAltve参数用于支持HTTP1.1版本的一次连接、多次传输功能,这样就可以在一次连接中传递多个HTML请求。虽然只有较新的浏览器才支持这个功能,但最好还是使用“on”这个选项。
MaxKeepAliveRequests 500
MaxKeepAliveRequests为一次连接可以进行的HTML请求的最大请求次数。将其值设为0,将支持在一次连接内进行无限次的传输请求。事实上没有客户程序在一次连接中请求大多的页面,通常达不到这个上限就完成连接了。
KeepAliveTimeout 15
KeepAliveTimeout测试一次连接中的多次请求传输之间的时间,如果服务器已经完成了一次请求,但一直没有接收到客户程序的下一次请求,当时间间隔超过了这个参数设置的值之后,服务器就断开连接。
prefork 和 work 与内存管理有关
默认采用prefork,由/etc/sysconf/httpd文件决定
/usr/sbin/httpd:使用 prefork 模块;
/usr/sbin/httpd.worker:使用 worker 模块。
worker 模块占用的内存较小,对于流量较大的网站来说,是一个比较好的选择。prefork 虽然占用较大的内存,不过速度与 worker 差异不大,并且 prefork 内存使用设计较为优秀,可以在很多无法提供 debug 的平台上面进行自我除错,默认适合小型网站。
MaxClients
服务器的能力毕竟是有限的,不可能同时处理无限多的连接请求,因此参数MaxClients就用于规定服务器支持的最多并发访问的客户数,如果这个值设置得过大,系统在繁忙时不得不在过多的进程之问进行切换来为这些客户进行服务,这样对每个客户的反应就会减慢,并降低了整体的效率。如果这个值设置得较小,那么系统繁忙时就会拒绝一些客户的连接请求。当服务器性能较高时,可以适当增加这个值的设置。
MaxRequestsPerChild
使用于进程方式的Web务,常用的方式是一个子进程为一次连接服务,这样造成的问题就是每次连接都需要生成、退出于进程的系统操作,这些额外的处理过程占据了计算机的大量处理能力。因此最好的方式是一个子进程可以为多次连接请求服务,这样就不会造成这些生成、退出进程引起的系统消耗。Apache就采用了这样的方式,一次连接结束后,子进程并不退出,而是停留在系统中等待下一次服务请求,这样就极大地提高了性能。
ServerAdmin:管理员邮箱
ServerName:网站服务器的域名
DocumentRoot:网页文档的根目录
DirectoryIndex:默认的索引页文件
ErrorLog:错误日志文件的位置
CustomLog:访问日志文件的位置
LogLevel:记录日志的级别,默认为warn
Include:需要包含进来的其他配置文件
AddDefaultCharset UTF-8 强制客户端用UTF-8 来显示网页
局部配置参数
可以使用<Directory 目录路径>和</Directory>这对语句为主目录或虚拟目录设置权限,它们是一对容器语句,必须成对出现,它们之间封装的是具体的设置目录权限语句,这些语句仅对被设置目录及其子目录起作用。
AllowOverride (允许的覆写参数功能): 表示是否允许额外配置文件 .htaccess 的某些参数覆写
测试性能
ab命令:
Apache Benchmark,Apache基准测试工具
格式:ab [-q] -c 并发请求数 -n 总的请求数 [http://]域名[:端口]/路径
构建虚拟web主机
虚拟Web主机
即在同一台服务器中运行多个Web站点的应用,其中每一个站点并不独立占用一台真正的计算机
httpd支持的虚拟主机类型
基于域名的虚拟主机
构建2个虚拟Web站点:
www.benet.com,IP地址为 173.17.17.11
www.accp.com,IP地址为 173.17.17.11
在浏览器中访问这两个域名时,分别显示不同的内容
[[email protected] htdocs]# vim /etc/httpd/conf/httpd.conf
……
NameVirtualHost 173.17.17.11
<VirtualHost 173.17.17.11>
DocumentRoot /var/www/html/benetcom
ServerName www.benet.com
</VirtualHost>
<VirtualHost 173.17.17.11>
DocumentRoot /var/www/html/accpcom
ServerName www.accp.com
</VirtualHost>
基于IP地址的虚拟主机
构建2个虚拟Web站点:
www.benet.com,IP地址为 173.17.17.11
www.accp.com,IP地址为 192.168.4.1
在浏览器中访问这两个IP时,分别显示不同的内容
[[email protected] htdocs]# vi /etc/httpd/conf/httpd.conf
……
<VirtualHost 173.17.17.11>
DocumentRoot /var/www/html/benetcom
ServerName www.benet.com
</VirtualHost>
<VirtualHost 192.168.4.11>
DocumentRoot /var/www/html/accpcom
ServerName www.accp.com
</VirtualHost>
基于端口的虚拟主机
构建2个虚拟Web站点:
www.benet.com,IP地址、端口为 173.17.17.11:80
www.accp.com,IP地址、端口为 173.17.17.11:8080
在浏览器中访问这两个端口时,分别显示不同的内容
[[email protected] htdocs]# vi /etc/httpd/conf/httpd.conf
……
Listen 173.17.17.11:80
Listen 173.17.17.11:8080
<VirtualHost 173.17.17.11:80>
DocumentRoot /var/www/html/benetcom
ServerName www.benet.com
</VirtualHost>
<VirtualHost 173.17.17.11:8080>
DocumentRoot /var/www/html/accpcom
ServerName www.accp.com
</VirtualHost>
建立系统用户的个人主页
1. 修改httpd.conf,启用个人主页功能
UserDir public_html
确认目录区域设置
2. 建立个人主页测试网页
~/public_html/index.html
添加权限:chmod o+x /home/jerry/
3. 重新启动httpd服务
service httpd restart
4. 访问测试
http://www.benet.com/~user
httpd服务的访问控制
基于用户的访问控制
添加认证授权设置
[[email protected] ~]# vi /etc/httpd/conf/httpd.conf
……
<Directory "/usr/local/awstats/wwwroot">
……
AuthName "AWSTATS "
AuthType Basic
AuthUserFile /usr/local/awstats/wwwroot/.htpasswd
require valid-user
</Directory>
……
基于用户的访问控制
创建存储认证用户账号及口令的文件
需使用htpasswd工具
[[email protected] apache2]# htpasswd -c \
> /usr/local/awstats/wwwroot/.htpasswd awuser
基于用户的访问控制,也可以在用户访问的目录下建立.htaccess文件来进行控制
还要针对目录的AllowOverride 写成authconfig
也要建立用户认证文件
基于客户端地址的访问控制
Order配置项,定义控制顺序
先允许后拒绝,默认拒绝所有:Order allow,deny
先拒绝后允许,默认允许所有:Order deny,allow
Allow、Deny配置项,设置允许或拒绝的地址
https安全访问
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS默认使用TCP的443端口
SSL工作时分为2个阶段:
服务器认证阶段
客户端认证阶段(可选)
Apache要安装openssl
Apache要安装mod_ssl模块
Apache的ssl配置文件与ssl相应的模块会被相应的存放在以下的目录中。
/etc/httpd/conf.d/ssl.conf
/etc/httpd/modules/mod_ssl.so
默认安装后就支持https了
生成自签名证书
先建立一把private key预备提供给SSL证书签名要求所用;
最后建立SSL证书文件(test certificates)。
使用字签证书
[[email protected] certs]# vim /etc/httpd/conf.d/ssl.conf SSLCertificateFile /etc/pki/tls/certs/benet.crt SSLCertificateKeyFile /etc/pki/tls/certs/benet.key
如想实现https和http访问分开,直接修改ssl.conf文件,启用虚拟主机即可
PHP简介
特点:
1、 跨平台:PHP程序可以运行在UNIX、Linux或Windows操作系统下。
2、嵌入HTML:因为PHP语言可以嵌入到HTML内部,所以PHP很容易学习。
3、简单的语言:与Java和C++不同,PHP语言坚持以基本语言为基础,然而它的功能强大到足以支持任何类型的Web站点。
4、效率高:和其他的解释性语言相比,PHP系统消耗较少的系统资源。当PHP作为Apache Web服务器的一部分时,运行代码不需要调外部二进制程序,服务器解释脚本不需要承担任何额外负担。
5、支持各种数据库:用户可以使用PHP存取Oracle、Sybase、MS-SQL、MySQL、PostgreSQL、dBase、FilePro和Informix等类型的数据库。
6、文件存取:PHP有许多支持文件存取函数。
7、文本处理:PHP有许多函数处理字符串,其中包括模式匹配的能力。
8、复杂的变量:PHP支持标量、数组、关联数组等变量,这给用户提供了支持其他的高级数据结构的坚实基础。
9、支持图像处理:用户可以使用PHP动态创建图像。
测试同php和mysql的结合
安装论坛进行测试
准备论坛要安装的数据库
下载论坛程序代码并解压到网站根目录
访问网站,进行图形界面安装
使用管理中心对论坛进行设置