说明:操作系统:CentOS 5.5
1、安装软件: yum install httpd mysql mysql-server php php-devel php-mysql
2、几个主要配置文件/目录的说明
Apache方面:
/etc/httpd/conf/httpd.conf :这是httpd服务的主要配置文件
/etc/httpd/conf.d/: 这是额外的配置文件,包括php.conf,python.conf,perl.conf,ssl.conf等等
/etc/httpd/modules/: 存放Apache使用的模块的地方
/var/www/html/: 存放网页的地方
/var/www/error/: 浏览器上出现的错误时,客户端看到的信息
/var/log/httpd/: 默认的Apache日志文件存放地
/usr/bin/htpasswd:Apache密码保护
Mysql方面
/etc/my.cnf mysql的配置文件
/var/lib/mysql/ :mysql数据库放置的位置,启动mysql的服务时需要将此目录完整备份下来
PHP方面
/usr/lib/httpd/moudules/libphp5.so : PHP提供给Apache使用的模块,关系到我们能否在apache服务上使用PHP语言
/etc/php.ini :PHP的主要配置文件,/配置内容包括是否允许用户上传文件等信息
ServerRoot "/etc/httpd" --apache的配置文件等的主目录
PidFile run/httpd.pid --pid文件
Timeout 120 --超时时间
KeepAlive On --一次连接多次请求,默认是Off,最好改为On
MaxKeepAliveRequests 100 --一次连接最大多少次请求
KeepAliveTimeout 15 --请求超时时间
--prefork为MPM(多路处理模式)的一种
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
[root@36 ~]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
Listen 80 --监听80端口
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
...................
--动态的装载模式,使用模式提供的功能 DSO (dynamic shared object)
Include conf.d/*.conf --子配置文件目录里的所有子配置文件生效
User apache
Group apache --定义apache运行的用户和组
DocumentRoot "/var/www/html" --家目录
--对目录的一个控制
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
DirectoryIndex index.html index.html.var --网站的主页文件的查找顺序
AccessFileName .htaccess --apache提供的一种密码保护机制
--以.ht开头的文件不被客户端用户看到
Order allow,deny
Deny from all
--下面几个参数与日志有关
ErrorLog logs/error_log
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access_log combined
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
--语言优先级
AddDefaultCharset UTF-8
--字符集
例一:
直接启动apache
service httpd start
访问:
会看到一个欢迎页面
/etc/httpd/conf.d/welcome.conf
例二:
281 DocumentRoot "/www"
306
[root@36 ~]# mkdir /www
[root@36 ~]# /etc/init.d/httpd restart
[root@36 ~]# echo "我的主页" > /www/index.html
或者把主页写成下面的html格式
我的主页
地在 要 地要栽地茜我 框架地苛;地苛
例三:
apache的容器 directory files location
--针对/www/bbs目录的权限控制
Options Indexes FollowSymLinks --允许目录列表,符号链接
AllowOverride None --表示此目录支持.htaccess加密
Order allow,deny
Allow from all
访问权限控制
Order allow,deny
Allow from all --允许所有
Order allow,deny
Allow from all
deny from 10.1.1.35 --只拒绝35
Order deny,allow
Allow from all
deny from 10.1.1.35 --还是允许所有,先拒绝,再允许
Order deny,allow
Allow from all
deny from all --允许所有
Order allow,deny
Allow from all
deny from all --拒绝所有
比如:在/www目录下新建一个bbs目录,也就是/www/bbs,再在/www/bbs里建立一个index.html文件,使用directory目录容器控制拒绝35访问,别的都允许
order allow,deny
allow from all
deny from 10.1.1.35
--加上这段话,不要嵌套在/www的目录容器里
第四: 目录列表
条件一: Options Indexes --目录有此参数
条件二:没有主页文件
条件三:干掉欢迎页面
[root@36 ~]# vim /etc/httpd/conf.d/welcome.conf
#
# Options -Indexes
# ErrorDocument 403 /error/noindex.html
#
/etc/init.d/httpd restart
例五.files 容器 --针对文件的控制
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
--表示35这个客户端不能访问/www/1
order allow,deny
allow from all
deny from 10.1.1.35
order allow,deny
deny from all
--这种写法没有生效,不对,所以要files容器嵌套到目录容器内部,要上面的那种写法
--下面这段是apache的默认的一个files容器的配置示例
--以.ht开头的文件不被客户端用户看到
Order allow,deny
Deny from all
例六:location 容器
order allow,deny
deny from all
--这是对 这种URL来进行权限控制
--location容器有时候和directory有可能重合,并且配置有冲突,那么location优先生效,下面这种情况,是不能访问的
order allow,deny
deny from all
order allow,deny
allow from all
例七:对mod_status和mod_info这两个DSO配置服务器的信息查看
176 LoadModule status_module modules/mod_status.so
890
891 SetHandler server-status
892 Order deny,allow
893 Deny from all
894 Allow from 10.1.1.35
895
178 LoadModule info_module modules/mod_info.so
902
903 SetHandler server-info
904 Order deny,allow
905 Deny from all
906 Allow from 10.1.1.35
907
例八:对字符集的讨论
gb18030
gb2312
gbk
utf-8
AddDefaultCharset gb2312
--如果字符集换成gb2312,则会发现客户端访问时有乱码,需要在浏览器软件上选择对应的字符集才可以正常显示
--这是因为apache家目录里的主页文件是默认以utf-8字符集编码的,所有造成了这种不匹配
例九:对网站目录使用apache的基本加密功能 .htaccess
[root@36 ~]# vim /www/.htaccess --对哪个目录进行限制,就在哪个目录下建立此文件
authname "please input your username and password! @_@"
authtype basic
authuserfile /etc/httpd/userpasswd
require valid-user
[root@36 ~]# htpasswd -c /etc/httpd/userpasswd aaa --创建此文件,并加入一个用户,自定义密码,注意此用户与系统普通用户无关
New password:
Re-type new password:
Adding password for user aaa
[root@36 ~]# htpasswd /etc/httpd/userpasswd bbb --再增加一个用户
New password:
Re-type new password:
Adding password for user bbb
[root@36 ~]# cat /etc/httpd/userpasswd
aaa:JscuRCtWV0Sh.
bbb:C6wrx4pFco/lk --密码为密文
[root@36 ~]# vim /etc/httpd/conf/httpd.conf
Options Indexes FollowSymLinks
AllowOverride all --改成all,支持.htaccess加密
Order allow,deny
Allow from all
[root@36 ~]# /etc/init.d/httpd restart
访问时,需要验证
例十:
用户主页空间
336
342 # UserDir disable --注释这一行
349 UserDir public_html --打开这一行的注释
351
--再把下面这一段打开注释
357
358 AllowOverride FileInfo AuthConfig Limit
359 Options MultiViews Indexes SymLinksIfOwnerMatch In cludesNoExec
360
361 Order allow,deny
362 Allow from all
363
364
365 Order deny,allow
366 Deny from all
367
368
[root@36 ~]# /etc/init.d/httpd restart
[root@36 ~]# mkdir /home/user1/public_html
[root@36 ~]# mkdir /home/user2/public_html
[root@36 ~]# echo "user1空间主页" > /home/user1/public_html/index.html
[root@36 ~]# echo "user2空间主页" > /home/user2/public_html/index.html
[root@36 ~]# chmod 701 /home/user1/
[root@36 ~]# chmod 701 /home/user2/
--访问测试
===============================
虚拟主机
一台服务器跑多台web服务
[root@36 ~]# mkdir /www/aaa
[root@36 ~]# mkdir /www/bbb
[root@36 ~]# mkdir /www/ccc
[root@36 ~]# echo "aaa main page" > /www/aaa/index.html
[root@36 ~]# echo "bbb main page" > /www/bbb/index.html
[root@36 ~]# echo "ccc main page" > /www/ccc/index.html
例十一:基于IP的虚拟主机
NameVirtualHost *:80
DocumentRoot /www/aaa
ServerName 10.1.1.36
ErrorLog logs/36-error_log
CustomLog logs/36-access_log common
DocumentRoot /www/bbb
ServerName 10.1.1.37
ErrorLog logs/37-error_log
CustomLog logs/37-access_log common
DocumentRoot /www/ccc
ServerName 10.1.1.38
ErrorLog logs/38-error_log
CustomLog logs/38-access_log common
[root@36 ~]# ifconfig eth0:0 10.1.1.37 netmask 255.255.255.0
[root@36 ~]# ifconfig eth0:1 10.1.1.38 netmask 255.255.255.0
[root@36 ~]# /etc/init.d/httpd restart
验证:
缺点很明显:浪费IP地址资源
例十二:基于端口的虚拟主机
Listen 80
Listen 8000
Listen 8080
DocumentRoot /www/aaa
ServerName 10.1.1.36
ErrorLog logs/36-error_log
CustomLog logs/36-access_log common
DocumentRoot /www/bbb
ServerName 10.1.1.36
ErrorLog logs/37-error_log
CustomLog logs/37-access_log common
DocumentRoot /www/ccc
ServerName 10.1.1.36
ErrorLog logs/38-error_log
CustomLog logs/38-access_log common
/etc/init.d/httpd restart
验证:
缺点:客户端访问时输入端口不方便,对客户端来说不够透明:还有就是开放端口多了,安全性降低
例十三:基于域名的虚拟主机
--需要DNS的cname记录的支持
aaa.web.com
bbb.web.com
ccc.web.com
--以下架构是DNS服务器和apache服务器的IP在同一台机器10.1.1.36上,也可以考虑分成两台服务器来做
[root@36 ~]# yum install bind* -y
[root@36 ~]# vim /var/named/chroot/etc/named.conf
options {
directory "/var/named";
};
zone "web.com" IN {
type master;
file "data/master.web.com.zone";
};
[root@36 ~]# vim /var/named/chroot/var/named/data/master.web.com.zone
$TTL 86400
@ IN SOA sdfasdfsa. sfddsafas. (
2011032601
120
240
360
86400 )
IN NS sdfsafasfddfsa.web.com.
aaa IN A 10.1.1.36 --这里为apache服务器的IP
bbb IN CNAME aaa
ccc IN CNAME aaa
[root@36 ~]# /etc/init.d/named restart
[root@36 ~]# vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
DocumentRoot /www/aaa
ServerName aaa.web.com
ErrorLog logs/aaa-error_log
CustomLog logs/aaa-access_log common
DocumentRoot /www/bbb
ServerName bbb.web.com
ErrorLog logs/bbb-error_log
CustomLog logs/bbb-access_log common
DocumentRoot /www/ccc
ServerName ccc.web.com
ErrorLog logs/ccc-error_log
CustomLog logs/ccc-access_log common
[root@36 ~]# /etc/init.d/httpd restart
--以下是客户端的验证
[root@li data]# vim /etc/resolv.conf
nameserver 10.1.1.36 --DNS指向DNS服务器的IP
VPS virtual private server 虚拟专用服务
使用虚拟化技术(vitural sever 或者 vmware EXS server )把一台服务器分隔成几个服务器,每个都拥有独立的CPU资源,内存资源,磁盘资源,独立IP等
===================================================
第三方模块 实现apache限速
/share/soft/lamp/apache_source/mod-cband-0.9.7.2.tgz
解压并CD进去进行编译
tar xvf mod-cband-0.9.7.2.tgz -C /usr/src/
cd /usr/src/mod-cband-0.9.7.2/
./configure ;make ;make install
libtool --finish /usr/local/apache2/modules
echo /usr/local/apache2/modules > /etc/ld.so.conf.d/httpd.conf
ldconfig
确认/etc/httpd/conf/httpd.conf里是否自动加载了下面这句话
LoadModule cband_module /usr/lib/httpd/modules/mod_cband.so
针对虚拟主机new.cluster.com进行限速
NameVirtualHost *:80
DocumentRoot /www/aaa
ServerName news.cluster.com
ErrorLog logs/aaa.com-error_log
CustomLog logs/aaa.com-access_log common
cbandlimit 100M --指网站允许的总的下载流量
cbandperiod 1W --清空时间
cbandspeed 1024 10 30 --当前总带宽,每秒可以同时连接10个,最大的总连接数
cbandremotespeed 10kb/s 3 3 --针对单一客户端下载速度为10kb/s,每秒可以同时3个连接,最多一个IP生成3个连接
sethandler cband-status --使用访问控制状态
sethandler cband-status-me ----使用访问控制状态
/etc/init.d/httpd restart
dd if=/dev/zero of=/www/aaa/123 bs=1M count=1000 --创建一个大点的文件,做下载测试
wget --使用wget下载,发现被限速了
使用下面的URL地址访问状态信息页面