第一、Apache服务器的搭建
1、基本概念
网站页面的技术:静态和动态
静态页面:除了格式化的标签以外,页面有什么内容就有什么内容 ,一般页面的后缀:
.html .htm .shtml
动态页面:使用动态脚本,编译类型的代码(asp,php ; .aspx , .jsp),一般都连接数据库,这页面就是一些脚本代码,并不是你最终看到的样子
2、常见的web服务的类型:
IIS : asp , aspx ,cgi 通过外部模块还可以处理 php
apache : php , cgi ,perl
weblogic,tomcat : 调用apache ,才能运行 jsp
nginx : 除里轻量型页面比较好
3、apache
软件包:
yum install httpd httpd-devel -y
进程、服务名字:httpd
工作目录: /etc/httpd
主配置文件: /etc/httpd/conf/httpd.conf
4、配置参数的说明
Timeout 120 处理一个请求连接的超时时间
KeepAlive 源码包是默认On , rpm 是 off 保持长效的http会话 , 当页面包含的图片比较多的时候,开启这个就比较好
KeepAliveTimeout 在同一个连接当中,等待下一个新请求之前的时间,如果时间过了,就把建立好的连接断开
MaxKeepAliveRequests 在保持对话当中,最多可以接受的请求数目
StartServers 8 <---默认启动服务的时候启动多少个处理进程
MinSpareServers 5 <---最少空闲的服务进程数
MaxSpareServers 20 <---最多的空闲的服务进程数
ServerLimit 256 <--- 服务器最多能产生的服务进程数
MaxClients 256 <---最多能接受的客户端连接数量
MaxRequestsPerChild 4000 <---单个进程最多处理的请求数目
Include conf.d/*.conf <---包含别的配置文件,这些配置文件在 工作目录中的 conf.d下
5、配置实例
例子1:
安装完重启 service httpd restart
访问http://ip
看到一个欢迎的测试页面
DocumentRoot "/var/www/html" <---默认网站的根目录
如果访问 http://ip/hello.html ,也就是告诉 apache 在/var/www/html目录下找hello.html
例子2:取消测试页面
原因:没有默认首页
默认首页定义参数:
DirectoryIndex index.html index.html.var index.php
解决方法:建立一个默认页面
echo "Welcome home" > /var/www/html/index.html
修改参数:DirectoryIndex hello.html index.html index.html.var <--看效果
例子3:修改默认的网站根目录
1、修改默认网站根目录参数:
DocumentRoot "/www" <---修改
2、重启服务
service httpd restart
3、建立默认首页
echo "this is /www" > /www/index.html
4、测试访问
http://ip/
思考:如果没有第三步,你看到的是什么样的页面?
例子4、学习容器定义标签和访问控制
容器标签的分类: Directory Files Location
其中 Directory 和 Files 是针对文件系统,Location是针对网络位置的
<Directory "/var/www/html"> <---对原来的网站根目录进行一些控制
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
参数说明:
Indexes 《---当找不到默认首页的时候,就把该目录下的文件和子目录都列表出来,不支持根目录的列表
FollowSymLinks 《---允许跟踪符号连接文件
AllowOverride 《--定义 对 .htaccess文件中的指令的支持
Order allow,deny
Allow from all
小试牛刀1:
<Directory "/www>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
小试牛刀2:
<Directory "/www>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Order allow,deny <---先匹配允许,再匹配拒绝,如果允许和拒绝冲突了,就取决deny
Order deny,allow <---先匹配允许,再匹配拒绝,如果允许和拒绝冲突了,就取决allow
小试牛刀3:
<Directory "/www>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Deny from all <---由于 allow 和deny 冲突,最后deny生效
</Directory>
小试牛刀4:
<Directory "/www>
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from all <---由于 allow 和deny 冲突,最后allow生效
</Directory>
常用的情景:
内部网站,只允许10.1.1.0/24
Order deny,allow
deny from all
allow from 10.1.1.0/255.255.255.0
只想禁止某个网络或者某个主机
Order allow,deny
allow from all
deny from 10.1.1.141 10.1.0.0/255.255.255.0
只允许 10.1.1.0/24这个网段去访问,但这个网段里面的IP为10.1.1.141就不能访问
Order allow,deny
allow from 10.1.1.0/255.255.255.0
deny from 10.1.1.141
小试牛刀5:
[root@slave www]# ls /www/sb
hello.html Hello.html sb.html
<Directory "/www">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
<Files "hello.html"> <---所有名字为hello.html文件都不能访问,但区分大小写,由于Linux是对大小敏感
Order allow,deny
Deny from 10.1.1.20
</Files>
</Directory>
<Location "/sb"> 《--- /Sb 不匹配 ---》
Order deny,allow
Deny from 10.1.1.20
</Location>
他能够匹配什么地址?
http://ip/sb/ 匹配
http://ip/sb/fs 匹配
http://ip/sbs/ 不匹配
Location的特点:
1、由于他不与文件系统挂钩,所以你的设定对于那些大小不敏感的文件系统完全可以通过大小去突破,举例:
在Windows存在一个 sb 目录,那么访问的时候采用这样URL: http://ip/sb ,就能成功禁止掉
但是如果对方使用 http://ip/Sb ,由于 apache在windows下对大小不敏感,所以loacation对这样的访问失效
apache判断是否允许你访问----》如果允许就去读取对应的硬盘文件---》
http://www.baidu.com /sb
注意: <Files> 还有 <Location> 标签都不支持AllowOverride指令
小试牛刀6:
<Location "/sb/fs"> 《--- /Sb 不匹配 ---》
Order deny,allow
Deny from 10.1.1.20
</Location>
他能够匹配什么地址?
http://ip/sb/ 不匹配
http://ip/sb/fs 匹配
---------------
引申:
怎么把Location改成 Directory
<Location "/sb"> 《--- /Sb 不匹配 ---》
Order deny,allow
Deny from 10.1.1.20
</Location>
修改:
<Directory "/www/sb">
Order deny,allow
Deny from 10.1.1.20
</Directory>
注意:如果Location和Directory都是控制同一个资源的,谁生效?
Location最后生效!
实例5:实现口令验证
1、修改参数
增加AllowOverride All <---这个参数只支持放在Directory里
<Directory "/www">
Options FollowSymLinks
AllowOverride All <---启用口令验证
Order allow,deny
Allow from all
</Directory>
2、建立.htaccess文件
如果你要对整个网站进行控制的话,就在网站的跟目录下建立:
vim /www/.htaccess
authname "Just for test"
authtype Basic
authuserfile /etc/httpd/userpasswd <---注意路径,不能放在网站的根目录,防止下载
require valid-user
如果是对网站的某个子目录进行验证,就放在该子目录下:
vim /www/sb/.htaccess
authname "Just for test"
authtype Basic
authuserfile /etc/httpd/userpasswd <---注意路径,不能放在网站的根目录,防止下载
require valid-user
3、创建用户帐号(与系统帐号没有任何关系)
[root@slave www]# htpasswd -c /etc/httpd/userpasswd tom
New password:
Re-type new password:
Adding password for user tom
[root@slave www]# htpasswd /etc/httpd/userpasswd mary
New password:
Re-type new password:
Adding password for user mary
实例6:建立系统帐号的个人空间
1、修改配置文件:
<IfModule mod_userdir.c>
#UserDir disable
UserDir public_html
</IfModule>
<Directory /home/*/public_html> 《---把原来注释掉的整个配置段打开
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
2、切换到tom用户,然后创建个人空间页面
[root@slave www]# su - tom
[tom@slave ~]$ pwd
/home/tom
[tom@slave ~]$ mkdir public_html
[tom@slave ~]$ ll
总计 4
drwxrwxr-x 2 tom tom 4096 11-04 08:51 public_html
[tom@slave ~]$ echo "This is Tom's Home" > ~/public_html/index.html
3、修改用户目录的权限
chmod 711 /home/tom
4、service httpd reload
测试:http://10.1.1.92/~tom/
========================================================================
实例7:虚拟空间 <---- 一台服务器跑多个网站
实验环境:
10.1.1.20 <---浏览器测试的客户端
10.1.1.67 <---DNS服务器
10.1.1.92 10.1.1.93 httpd服务器
以下是10.1.1.67的DNS区域文件配置,忘记了可以参考ule_12_dns.txt
$TTL 86400
@ IN SOA upl.com. root.upl.com. (
2009110303
1M
10M
1D
1H)
@ IN NS mail.upl.com.
IN MX 0 mail.upl.com.
mail IN A 10.1.1.67
web IN A 10.1.1.92
bbs IN A 10.1.1.93
www IN CNAME web
-----------------------------------------
@基于IP的虚拟空间
1、服务器应该有多个IP
原来eth0已经有一个IP:10.1.1.92
ifconfig eth0:1 10.1.1.93 netmask 255.255.255.0
2、配置httpd.conf 启用虚拟机功能
<VirtualHost 10.1.1.92:80> <--当使用http://10.1.1.92或者http://web.upl.com的时候匹配
ServerAdmin [email protected] <---管理员的邮件地址
DocumentRoot /web <---这个虚拟空间的网站根目录
ServerName web.upl.com <---这个虚拟空间绑定的域名
ErrorLog logs/web.upl.com-error_log <---这个虚拟空间的错误日志
CustomLog logs/web.upl.com-access_log common <---这个虚拟空间的访问日志
<Directory "/web">
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
<VirtualHost 10.1.1.93:80> <--当使用http://10.1.1.93或者http://bbs.upl.com的时候匹配
ServerAdmin [email protected]
DocumentRoot /bbs
ServerName bbs.upl.com
ErrorLog logs/bbs.upl.com-error_log
CustomLog logs/bbs.upl.com-access_log common
<Directory "/web">
Order deny,allow
Deny from 10.1.1.21
</Directory>
</VirtualHost>
重新加载配置文件
service httpd reload
3、建立对应的目录和测试文件
[root@slave www]# mkdir /web
[root@slave www]# mkdir /bbs
[root@slave www]# echo "This is /web" > /web/index.html
[root@slave www]# echo "This is /bbs" > /bbs/index.html
4、测试
必须修改作为测试的客户端的resolv.conf文件,指向使用自己的DNS服务器
vim /etc/resolv.conf
nameserver 10.1.1.67
[root@dns 10]# nslookup web.upl.com
Server: 10.1.1.67
Address: 10.1.1.67#53
Name: web.upl.com
Address: 10.1.1.92
[root@dns 10]# nslookup bbs.upl.com
Server: 10.1.1.67
Address: 10.1.1.67#53
Name: bbs.upl.com
Address: 10.1.1.93
真正的测试:
http://10.1.1.92 或者 http://web.upl.com
http://10.1.1.93 或者 http://bbs.upl.com
这种方案缺点:需要多个IP。 IP资源很珍贵!!!
----------------------------------------
@基于端口的虚拟空间
1、修改配置文件
Listen 80
Listen 8080 《---添加8080监听
<VirtualHost 10.1.1.92:8080> 《---8080端口
ServerAdmin [email protected]
DocumentRoot /ftp
ServerName ftp.upl.com
ErrorLog logs/ftp.upl.com-error_log
CustomLog logs/ftp.upl.com-access_log common
</VirtualHost>
2、建立目录和测试文件
[root@slave /]# mkdir /ftp
[root@slave /]# echo "This is /ftp" > /ftp/index.html
重启服务: service httpd restart
3、客户端测试
http://10.1.1.92:8080
方案缺点:访问的时候要指定端口,否则无法访问,而且不是所有人都知道端口
--------------------------------------
@基于域名的虚拟空间,实现同一IP上绑定多个网站
实验环境:
$TTL 86400
@ IN SOA upl.com. root.upl.com. (
2009110303
1M
10M
1D
1H)
@ IN NS mail.upl.com.
IN MX 0 mail.upl.com.
mail IN A 10.1.1.67
web IN A 10.1.1.92
bbs IN A 10.1.1.92
www IN CNAME web
1、
NameVirtualHost *:80 <---打开这个表示启用基于域名的虚拟空间技术
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /web
ServerName web.upl.com
ErrorLog logs/web.upl.com-error_log
CustomLog logs/web.upl.com-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /bbs
ServerName bbs.upl.com
ErrorLog logs/bbs.upl.com-error_log
CustomLog logs/bbs.upl.com-access_log common
<Directory "/web">
Order deny,allow
Deny from 10.1.1.21
</Directory>
</VirtualHost>
2、测试
service httpd reload
http://web.upl.com
http://bbs.upl.com
备忘:alias
<VirtualHost 10.1.1.93:80>
ServerAdmin [email protected]
DocumentRoot /web
ServerName web.upl.com
ErrorLog logs/web.upl.com-error_log
CustomLog logs/web.upl.com-access_log common
<Directory "/web">
Options FollowSymLinks <---允许跟踪软连接
AllowOverride All
Order allow,deny
Allow from all
</Directory>
建立软连接的好处: 轻松扩大容量,文件目录方便灵活
还可以通过Alias实现类似的功能:
<VirtualHost 10.1.1.93:80>
ServerAdmin [email protected]
DocumentRoot /web
ServerName web.upl.com
ErrorLog logs/web.upl.com-error_log
CustomLog logs/web.upl.com-access_log common
Alias /lntobbs "/bbs" <---定义别名,前面的访问的别名,后面是链接到系统上的绝对路径
<Directory "/web">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
访问的方式:http://web.upl.com/lntobbs/
======================
vim /etc/ntp.conf
server 10.1.1.1
restrict 10.1.1.0 mask 255.255.255.0 nomodify notrap
service ntpd restart
测试:5分钟找另外一台没有配置ntpd服务的电脑
ntpdate 10.1.1.20