使用Apache搭建Web网站服务器
学习一个服务的过程:
- 此服务器的概述:名字,功能,特点,端口号
- 安装
- 配置文件的位置
- 服务启动关闭脚本,查看端口
- 此服务的使用方法
- 修改配置文件,实战举例
- 排错(从下到上,从内到外)
本节所讲内容:
- apache服务器常见概念
- apache服务器安装及相关配置文件
- 实战:基于用户和主机的访问控制
- 实战:部署web服务器,运行一个类人人网的社交网站
注意:本节课是用rpm包来搭建LAMP环境,主要是让同学们初步了解下相关概念和LAMP环境的功能,后期会带大家用源码编译的方式来精讲LAMP和LNMP环境,包括环境搭建,调优等等。
apache服务端:jiaofy63.cn IP:192.168.0.63
apache客户端:jiaofy64.cn IP:192.168.0.64
web服务概述:
WEB服务器也称为WWW(WORLD WIDE WEB,万维网)服务器,主要功能是提供网上信息浏览服务。
常见web服务器(web):
httpd(apache)、nginx +PHP
tomcat: jsp + html
win:IIS
客户端:IE 、firefox、chrome 、手机(浏览器)Browser
今天的主角:LAMP=Linux Apache Mysql PHP 中的 Apache(HTTPD)
类 LINUX 系统
Linux+Apache+Mysql/MariaDB+Perl/PHP/Python 一组常用来搭建动态网站或者服务器 的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼 容度,共同组成了一个强大的 Web 应用程序平台。随着开源潮流的蓬勃发展,开放源代码 的 LAMP 已经与 J2EE 和.Net 商业软件形成三足鼎立之势,并且该软件开发的项目在软件方 面的投资成本较低,因此受到整个 IT 界的关注。从网站的流量上来说,70%以上的访问流量 是 LAMP 来提供的,LAMP 是最强大的网站解决方案
什么是 Apache
Apache HTTPD Server 简称 Apache,是 Apache 软件基金会的一个开源的网页服务器, 可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一。它快速、可靠并且可通过简单的 API 扩展,将 Perl/Python 等解释器编 译到服务器中!Apache HTTP 服务器是一个模块化的服务器,各个功能使用模块化进行插拔! 目前支持 Windows,Linux,Unix 等平台!
Apache 软件基金会(也就是 Apache Software Foundation,简称为 ASF),是专门为运 作一个开源软件项目的 Apache 的团体提供支持的非盈利性组织,这个开源软件项目就是 Apache 项目!那么我们的 HTTPD 也只是 Apache 的开源项目之一!
主要的开源项目:HTTP Server,Ant,DB,iBATIS,Jakarta,Logging,Maven,Struts, Tomcat,Tapestry,Hadoop 等等。只是最有名的是 HTTP Server,所以现在所说的 Apache 已 经就是 HTTPD Server 的代号了! 我们还见的比较多的是 Tomcat,Hadoop 等项目
官方网站:http://www.apache.org/httpd:http://httpd.apache.org/
图标:
什么是 Mysql
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司,他也是最流行的关系型数据库管理系统!特别是在 WEB 应用方面!
关系型数据库:它通过数据、关系和对数据的约束三者组成的数据模型来存放和管理数
据
什么是 PHP
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通 用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,利于学习,使用广泛,主要适 用于 Web 开发领域。PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创的语法。它可以 比 CGI 或者 Perl 更快速地执行动态网页。用 PHP 做出的动态页面与其他的编程语言相比, PHP 是将程序嵌入到 HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比 完全生成 HTML 标记的 CGI 要高许多;PHP 还可以执行编译后代码,编译可以达到加密和 优化代码运行,使代码运行更快。
简单的说,PHP 就是一个脚本解释器! 官方网站:http://php.net/
PHP 服务器安装好之后,升级切记注意,不要盲目升级!因为它会废弃很多废弃低效的语法!
LAMP 工作原理
Web 服务器的工作模式和端口
工作模式是:B/S 模式
工作端口是:80/http 正常端口443/https SSL 端口
安装服务器端:httpd
httpd-2.2.3-11.el5.i386.rpm :Apache 服务的主程序包,服务器端必须安装该软件包
httpd-devel-2.2.3-11.el5.i386.rpm :Apache 开发程序包
httpd-manual-2.2.3-11.el5.i386.rpm :Apache 手册文档,包含HTML 格式的Apache 计划的
Apache User's Guide 说明指南
安装:#推荐使用yum安装
yum -y install httpd
或者:
yum install httpd-devel
后自动解决安装很多依赖的软件包,后期大家在学习源码编译安装的时候,会遇到这样的问题,需要手动把依赖的包安装好,才能编译通过。
安装字符界面的下浏览器客户端:elinks
安装:
[[email protected] Packages]# yum install elinks
浏览器
测试:
例: [[email protected] ~]# elinks 192.168.1.63
配置文件位置:
[[email protected] Packages]# vim /etc/httpd/conf/httpd.conf
启动服务
[[email protected] ~]# service httpd restart
[[email protected] ~]# chkconfig httpd on
查看端口
[[email protected] Packages]# netstat -anutp | grep 80
tcp 0 0 :::80 :::* LISTEN 3854/httpd
此服务的使用方法
通过浏览器访问
或
elinks 192.168.0.63
主配置文件介绍:
vim /etc/httpd/conf/httpd.conf
ServerName 192.168.1.235:80 #服务器主机名
PidFile run/httpd.pid#apache #运行进程 ID 存放
Timeout 60 #超时时间,多少 s 没有反应就超时
KeepAlive Off #是否允许一个永久的链接,设置为 OFF 的时候,不 能保持连接功能,传输效率比较低,设置为 ON 时,可以提高服务器传输文件的效率,建议开启
MaxKeepAliveRequests 100 #设置 KeepAlive 为 ON 时,设置客户端每次连接允许 请求相应最大文件数,默认 100 个
KeepAliveTimeout 15 #超时时间,同一个客户端下一个请求 15s 没收到就 超时
Listen 80#监听端口,默认本地 IP,如果指定 ip 写上 IP:80
<IfModule prefork.c>
StartServers8 #服务开始起启动 8 个进程
MinSpareServers5 #最小空闲 5 个进程
MaxSpareServers20 #最多空闲 20 个进程
ServerLimit256 #服务器允许配置进程数上线
MaxClients256 #最大连接数 256,超过要进入等候队列
MaxRequestsPerChild4000 #每个进程生存期内服务最大的请求数量,0 表示用不 结束
</IfModule>
<Directory />
Options FollowSymLinks #Options Indexes 目录浏览FollowSymLinks 用连接
浏览
AllowOverride None #设置为 none,忽略.htaccess
</Directory>
LoadModule auth_basic_module modules/mod_auth_basic.so #载入的库,模块
● ● ● ● ● ●
Include conf.d/*.conf #conf.d 里面的 conf 文件也属有效配置文件
User apache#apache #运行以哪个身份运行
Group apache#apache #运行以哪个组的身份运行
ServerAdmin [email protected] #管理员邮箱
DocumentRoot "/var/www/html" #默认的主目录,如果改动要改动两处,Directory
<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None
Order allow,deny #这里默认后者生效,也就是 deny 生效
Allow from all #这里说允许所有
</Directory>
LogLevel warn #日志等级
DirectoryIndex index.html index.html.var #首页
AccessFileName .htaccess #access 文件名
AddDefaultCharset UTF-8 #支持的语言,默认编码
#配置文件的最后是虚拟主机的字段,其中你大部分字段做个了解即可,用到的时候去查 即可
修改配置文件,实战举例
例1: 搭建一台测试web服务器
案例:
部门内部搭建一台WEB服务器,采用的IP地址和端口为192.168.0.63:80,首页采用index.html
文件。管理员E-mail地址为 [email protected],网页的编码类型采用UTF-8,所有网站资源都存放在/var/www/html目录下,并将Apache的配置文件根目录设置为/etc/httpd目录。
修改配置文件:
vim /etc/httpd/conf/httpd.conf
设置Apache 的根目录为/etc/httpd
设置httpd 监听端口80
设置管理员E-mail地址为 [email protected]
设置WEB 服务器的主机名和监听端口为192.168.0.63:80
设置Apache 文档目录为/var/www/html
设置主页文件为 index.html
设置服务器的默认编码为UTF-8
改配置文件之前,记得先备份一份,以便恢复。
修改配置文件相关参数:
[[email protected] chroot]# vim /etc/httpd/conf/httpd.conf #以下参数需要我们掌握
ServerRoot "/etc/httpd" #apache配置文件的根目录
Timeout 60 #超时时间
Listen 80 监听的端口
ServerAdmin [email protected] #设置管理员,e-mail 地址
ServerName 192.168.0.63:80 #服务器主机名
DocumentRoot "/var/www/html" #网站页面根目录
Options Indexes FollowSymLinks #当一个目录没有默认首页时,允许显示此目录列表
DirectoryIndex index.html index.php #指定默认首页
编码:
AddDefaultCharset UTF-8 # 设置服务器的默认编码为: UTF-8
取消apache默认欢迎页:
[[email protected] ~]# vim /etc/httpd/conf.d/welcome.conf
#
# This configuration file enables the default "Welcome"
# page if there is no default index page present for
# the root URL. To disable the Welcome page, comment
# out all the lines below.
#
#<LocationMatch "^/+$"> #把红色内容注释
# Options -Indexes
# ErrorDocument 403 /error/noindex.html
#</LocationMatch>
重启:
[[email protected] ~]# service httpd restart
创建首页:
# echo 'welcome to www.jiaofy.cn!' > /var/www/html/index.html
测试:
yum 的方式搭建 LAMP 环境
LAMP=Linux(存在)+Apache(HTTPD 已安装)+Mysql+PHP
1、安装rpm包
[[email protected] ~]# yum install httpd mysql mysql-server php php-mysql –y
或者:
[[email protected] ~]# yum install httpd-devel mysql mysql-server php php-mysql -y
测试数据库:
[[email protected] ~]# service mysqld start
[[email protected] ~]# chkconfig mysqld on
[[email protected] ~]# mysql
mysql> show databases;
mysql>exit;
测试apache是否支持php
创建一个文件:
[[email protected] html]# cd /var/www/html/
[[email protected] html]# vim index.php
<?php
phpinfo();
?>
类似于PHP 探针:
扩展:探针:一个PHP编写的文件,可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息,定时刷新一次。以及包括服务器IP地址,Web服务器环境监测,php等信息。
适用于主机运维人员,个人站长等,
LAMP环境,几种不同的安全访问机制的实现:
-
- 修改网站目录对应参数及权限:
修改网站默认根目录,并且设置访问权限,只有在我允许的范围之内可以访问
1、编辑Apache 配置文件httpd.conf
vim /etc/httpd/conf/httpd.conf
修改网站默认根目录
设置文档目录为/var/www/html/bbs
允许所有人访问/var/www/html/bbs 目录
目录与访问控制:
<Directory "/var/www/html/bbs"> #子目录会继承这个目录的属性
Options FollowSymLinks #Options:Indexes:目录浏览
AllowOverride None #Followsymlinks:可以用连接
Order allow,deny
Allow from 192.168.18.0/24 #从哪里来的允许
Deny from 192.168.16.0/24 #从哪里来的拒绝
Allow from .baidu.com
#Allow,Deny都会读取,如果有冲突和未说明的时候按照Order选项逗号后面的那个为准。
谁写到后面,谁的优先级高。
</Directory>
mkdir /var/www/html/bbs
cp /var/www/html/index.html /var/www/html/bbs/
-
- 使用别名,引用网站根目录以外的路径。
将/usr/local/phpdata 目录通过虚拟目录功能添加到网站根目录。当访问http://192.168.1.63/ phpdata/ 时,就可以访问目录/usr/local/phpdata中的内容。
注:apache的别名也叫虚拟目录
语法:
Alias URL路径 PATH物理路径
创建测试数据:
[[email protected] conf]# mkdir /usr/local/phpdata
[[email protected] conf]# echo "This Alias PHPdata" > /usr/local/phpdata/index.html
修改配置文件:
[[email protected] conf]# vim /etc/httpd/conf/httpd.conf # 添加红框中的内容
Alias /phpdata/ "/usr/local/phpdata/"
<Directory "/usr/local/phpdata/">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
注:Alias /phpdata/ "/usr/local/phpdata/" #/phpdata/ 可以随意起。比如改/phpdata/ 为/php/ 则访问链接: http://192.168.1.63/php/
测试:
[[email protected] conf]# service httpd restart
http://192.168.1.63/phpdata/
或:
http://192.168.1.63/phpdata/a.html
三、当一个目录下没有默认首页时,访问http://192.168.1.63/phpdata/禁止显示目录列表
修改配置文件:
[[email protected] conf]# vim /etc/httpd/conf/httpd.conf # 修改红色标记内容
Alias /phpdata/ "/usr/local/phpdata/"
<Directory "/usr/local/phpdata/">
Options -Indexes FollowSymLinks #在Indexes 前加-减号,此目录下没有默认首页时,禁止显示目录
AllowOverride None
Order deny,allow
Allow from all
</Directory>
- 打开软链接功能。 通过软件链接直接引用网站根目录以外的内容
通过软连接,我们可以直接引用网站根目录外面的内容,我们通过目录浏览的方式,在
/var/www/html/bbs/面创建一个 web2 目录, 然后我访问 web2 目录的话,实际访问的是
/usr/local/abc 下面的内容
[[email protected] ~]# mkdir /usr/local/abc
[[email protected] ~]# cp -r /boot/grub/ /usr/local/abc/
[[email protected] ~]# mkdir –p /var/www/html/bbs/web2
[[email protected] ~]# ln -s /usr/local/abc/* /var/www/html/bbs/web2/
[[email protected] conf]# vim /etc/httpd/conf/httpd.conf # 修改红色标记内容,确认开了FollowSymLinks
- 通过用户认证的方式,对网站下/usr/local/phpdata/目录进行保护。 设置/usr/local/phpdata/目录,只能通过用户名密码方式访问。
方法一:
[[email protected] conf]# vim /etc/httpd/conf/httpd.conf #在需要使用用户验证的目录的相关Directory段落添加以下红色标记内容:
Alias /phpdata/ "/usr/local/ phpdata /"
<Directory "/usr/local/ phpdata /">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
authtype basic
authname "my web site"
authuserfile /etc/httpd/conf/passwd.secret
#require user tom
#require user tom bob
require valid-user
</Directory>
参数说明:
authtype basic # 1)authtype命令:指定认证类型为:basic。
authname " my web site "
# AuthName命令:指定认证区域名称。区域名称是在提示要求认证的对话框中显示给用户的。
authuserfile /etc/httpd/conf/passwd.secret # AuthUserFile命令:指定一个包含用户名和密码的文本文件,每行一对。
require命令:指定哪些用户或组才能被授权访问。如:
require user user1 user2(只有用户user1和user2可以访问)
require valid-user (在AuthUserFile指定的文件中任何用户都可以访问)
利用Apache附带的程序htpasswd,生成包含用户名和密码的文本文
[[email protected] conf]# htpasswd -cm 存放用户名和密码的文件名 用户名
[[email protected] conf]# htpasswd -cm /etc/httpd/conf/passwd.secret tom
New password: 123456
Re-type new password: 123456
Adding password for user tom
#第一个生成用户名和密码,需要创建文件,因此需要加-c参数
[[email protected] phpdata]# htpasswd -h #查看参数
-c Create a new file.
-m Force MD5 encryption of the password.
[[email protected] conf]# htpasswd -m /etc/httpd/conf/passwd.secret bob
New password: 123456
Re-type new password: 123456
Adding password for user bob
[[email protected] conf]# cat /etc/httpd/conf/passwd.secret #查看内容
tom:$apr1$WJicnaIz$ejqYMmcqukEMsAVEjLcKf.
bob:$apr1$S8pXfxJh$tletPNMKd33WZXqdkSLFy0
测试:
[[email protected] conf]# service httpd restart
http://192.168.1.63/phpdata/
方法二:
#vim httpd.conf #在需要使用用户验证的目录的相关Directory段落添加
Alias /phpdata/ "/usr/local/phpdata/"
<Directory "/usr/local/phpdata/">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
AllowOverride AuthConfig
</Directory>
# AllowOverride AuthConfig一行表示允许对/usr/local/phpdata/目录下的文件进行用户认证。
在要保护的目录下创建一个存放进行用户认证信息的文件:
[[email protected] conf]# vim /usr/local/phpdata/.htaccess #写入以下内容
authtype basic
authname "my web site by .htaccess"
authuserfile /etc/httpd/conf/passwd.secret
#require user tom
require valid-user
利用Apache附带的程序htpasswd,生成包含用户名和密码的文本文
[[email protected] conf]# htpasswd -cm /etc/httpd/conf/passwd.secret tom
New password: 123456
Re-type new password: 123456
Adding password for user tom
[[email protected] conf]# htpasswd -m /etc/httpd/conf/passwd.secret bob
New password: 123456
Re-type new password: 123456
Adding password for user bob
[[email protected] conf]# cat /etc/httpd/conf/passwd.secret #查看内容
tom:$apr1$WJicnaIz$ejqYMmcqukEMsAVEjLcKf.
bob:$apr1$S8pXfxJh$tletPNMKd33WZXqdkSLFy0
[[email protected] conf]# service httpd restart
测试:
http://192.168.1.63/phpdata/
六 、配置apache虚拟主机,实现在一台服务器上运行多个网站
apache虚拟主机实现有三种方法:
1、通过不同的IP地址
2、通过不同的域名
3、通过不同的端口号
三种都需要把虚拟主机功能打开:
开启:
改:
#NameVirtualHost *:80
为:
NameVirtualHost *:80
方法1:
通过不同的IP地址,解析不同域名
给服务器增加IP(另一个域名解析出来的那个IP)。
[[email protected] ~]##ifconfig eth0:1 192.168.0.56 netmask 255.255.255.0
[[email protected] ~]## mkdir /var/www/html/bbs/
[[email protected] ~]# echo "bbs.jiaofy.cn" > /var/www/html/bbs/index.html
修改httpd.conf
#vim httpd.conf 在文件的最后,添加以下内容
<VirtualHost 192.168.0.63:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/
ServerName dummy-host.example.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
<VirtualHost 192.168.0.56:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/bbs/
ServerName dummy-host.example.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
测试:
[[email protected] conf]# service httpd restart
http://192.168.1.56/
http://192.168.1.63/
方法二:
通过不同域名:
在域名管理后台,修改DNS配置,www.jiaofy.com与bbs.jiaofy.com解析成相同的IP。
修改httpd.conf
#vim httpd.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/
ServerName www.jiaofy.com
ErrorLog logs/www.jiaofy.com-error_log
CustomLog logs/www.jiaofy.com-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/bbs/
ServerName bbs.jiaofy.com
ErrorLog logs/bbs.jiaofy.com-error_log
CustomLog logs/bbs.jiaofy.com-access_log common
</VirtualHost>
[[email protected] ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.63 jiaofy63.cn
192.168.1.63 www.jiaofy.com
192.168.1.63 bbs.jiaofy.com
192.168.1.64 jiaofy64.cn
测试:
[[email protected] conf]# service httpd restart
[[email protected] ~]# elinks www.example.com
[[email protected] ~]# elinks bbs.example.com
方法3:基于端口配置虚拟主机:
[[email protected] conf]# vim /etc/httpd/conf/httpd.conf
改:
Listen 80
为:
Listen 80
Listen 81
# 更改为你要添加的多个端口
再建立两个虚拟主机:
[[email protected] conf]# vim /etc/httpd/conf/httpd.conf # 在文件的最后添加
再建立两个虚拟主机:
[[email protected] conf]# vim /etc/httpd/conf/httpd.conf # 在文件的最后添加
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/
ServerName www.example.com
ErrorLog logs/www.example.com-error_log
CustomLog logs/www.example.com-access_log common
</VirtualHost>
<VirtualHost *:81>
ServerAdmin [email protected]
DocumentRoot /var/www/html/bbs/
ServerName bbs.example.com
ErrorLog logs/bbs.example.com-error_log
CustomLog logs/bbs.example.com-access_log common
</VirtualHost>
测试:
[[email protected] conf]# service httpd restart
http://192.168.1.63/
http://192.168.1.63:81/
拓展
Apache URL 地址重写(伪静态),自定义 404 页面,301 重定向配置
伪静态
[[email protected] ~]# vim /etc/httpd/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so #查看有没有重写模块
[[email protected] ~]# vim /var/www/html/index.php
<?php
echo "The News ......" .$_GET['id']."......Pages"
?>
测试访问方式:使用 http://192.168.1.63/index.php?id=8 id 值随便写
使用这种方式访问的缺点:暴露了我们页面语言,php 写的,MYSQL 的字段 ID,可以尝试 知道你的新闻总条数,一个个值尝试出来,URL 很不美观,不利于 SEO,暴露你的文件路径 以 及 文 件 名 , 那 么 对 他 进 行 伪 静 态 之 后 , 可 以 访 问 一 个 页 面 是 http://192.168.1.63/index8.html 来访问同样的页面
修改配置文件,支持.htaccess
[[email protected] ~]# vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/
<Directory /var/www/html> #对这个虚拟主机实现 Rewrite,需要添加
Directory 字段中
Options FollowSymLinks
AllowOverride All
</Directory>
ServerName dummy-host.example.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
[[email protected] ~]# vim /var/www/html/.htaccess //添加伪静态规则
RewriteEngine on
RewriteRule ^index(\d+).html$ index.php?id=$1
[[email protected] ~]# service httpd restart
测试:
http://192.168.1.63/index8.html
自定义 404
输入一个不存在的页面(使用火狐浏览器)
修改.htaccess,支持自定义 404 页面
[[email protected] ~]# vim /var/www/html/.htaccess //追加下面行
RewriteEngine on
RewriteRule ^index(\d+).html$ index.php?id=$1
ErrorDocument 404 /404.html #自定 404,此行添加
[[email protected] ~]# service httpd restart
[[email protected] ~]# echo "My 404 Error" > /var/www/html/404.html
测试: 刷新刚刚那个不存在的页面
301 重定向配置
假设 a.com 在某些情况下不能使用,需要将网站全部迁移到 b.com,那么我们这个时候 就可以对 a.com 进行 301 重定向,这样 a.com(上的权重,SEO 里面的知识)传递到 b.com 上,这个主要用来实现整站迁移
[[email protected] ~]# vim /var/www/html/.htaccess
RewriteCond %{HTTP_HOST} ^www.a.com [NC]
RewriteRule ^(.*)$ http://www.qq.com/$1 [R=301,L]