Web基础与HTTP协议和LAMP部署以及Apache服务管理优化
一.Web基础(域名和DNS、网页和HTML、静态和动态网页)
域名的概念:每个主机都会拥有固定的并且唯一的IP地址用来区别网络上的每一台计算机和每个用户,域名就是赋予每个IP地址一个方便记住的名字(相当于门牌号)
域名结构(例子说明):www.baidu.com(www为主机名、baidu为主体、com为域名的后缀代表这是个com国际域名)
域名的结构图(如下图所示):
域名结构类型
根域:根服务器,当其他域名服务器不认识这个域名时会去问根服务器解析
顶级域:国家/地区类的域名,比如.com、.cn、或.jp之类的(.com常用于商业机构,.net常用于网络等)
二级域名:在顶级域名之前的域名,比如:www.baidu.com中的baidu就是二级域名
FQDN:主机名.DNS后缀,指主机名加上全路径(全域名可以从逻辑上准确地表示主机在什么地方)
Hosts文件:本地主机映射文件(配置了这个文件可以不去配置DNS就可以解析域名,)
特点:访问速度快,不用通过DNS解析,但是过程复杂,你要添加你需要访问的网站IP地址和域名
hosts所在文件夹:
Windows:C:\Windows\System32\drivers\etc\hosts
Android:/etc/hosts
Mac:/etc/hosts
iPhone(iOS):/etc/hosts
Linux:/etc/hosts
绝大多数Unix系统:/etc/hosts
DNS:互联网上域名与IP地址一一对应,域名方便人们记忆,机器只能互相认识IP地址,计算机互相转换的工作叫做域名解析,DNS就是进行域名解析的系统
静态映射:每台设备上配置主机到ip的地址映射,只提供给本机使用
动态映射:有专门的DNS服务器配置主机到ip的地址映射,其他计算机在DNS服务器上去查看对应的IP地址和主机名
网页与HTML
二、LAMP部署
1.linux系统基本环境
修改计算机名称 配置网卡IP地址 搭建DNS 关闭selinux
注意:检查httpd的rpm包是否安装,如果已经安装需要卸载后源码安装(最好是源码安装)
2.安装配置apache(就是httpd)
上传httpd源码包,并解压到/usr/src目录
源码编译安装:./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
然后执行make && make install编译安装(没有报错就是正确的)
到/usr/local/bin目录下查看是否生成脚本文件(如果没有说明编译安装失败,重新安装)
补充:优化执行路径:
ln -s /usr/local/httpd/bin/* /usr/local/bin(创建生成编译安装的httpd下的bin目录下所有软链接)
PATH=$PATH:/usr/local/httpd/bin/
注意:检查确认安装以及创建链接结果如下说明安装成功
修改配置文件httpd:vim /usr/local/httpd/conf/httpd.conf
修改服务名字
cp /usr/lcoal/httpd/bin/apachectl /etc/init.d/httpd(把脚本添加到该目录下,可以使用service命令启动服务)
修改配置文件/etc/init.d/httpd
添加——chkconfig: 35 85 15(35级别启动、开机时第85项启动、关机时第15项关闭)
1.chkconfig --add httpd(添加httpd服务) 2.chkconfig httpd on/off 3.service httpd start/stop
测试是否成功
3、安装PHP环境
安装zlib提供数据压缩用的函式库和安装libxml2是一个xml的c语言版的解析器
上传安装源码包libmcrypt、mhash、mcrypt(注意按照顺序安装)
安装源码包libmcrypt
tar zxf libmcrypt-2.5.8.tar.gz 》cd libmcrypt-2.5.8 》./configure》make && make install
创建软链接可以简便使用命令:ln -s /usr/local/lib/libmcrypt* /usr/lib/
安装源码包mhash
tar zxf mhash-0.9.9.9.tar.gz 》cd mhash-0.9.9.9 》./configure 》make && make install
创建软链接可以简便使用命令:ln -s /usr/local/lib/libmhash* /usr/lib/
安装源码包mcrypt
tar zxf mcrypt-2.6.8.tar.gz 》cd mcrypt-2.6.8 》./configure 》make && make install
安装php源码包
./configure --prefix=/usr/local/php5 --with-mcrypt --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring
--with-apxs2=/usr/local/httpd/bin/apxs 编译共享的 Apache 2.0 模块
--with-mysql=/usr/local/mysql 启用mysql的支持
编译成功后make && make install进行编译安装
覆盖php.ini主配置文件:cp /root/php-5.6.31/php.ini-development /usr/local/php5/php.ini
编辑httpd的主配置文件添加httpd对php的支持:vim /usr/local/httpd/conf/httpd.conf
添加(随便位置添加就好):AddType application/x-httpd-php .php(注意php和.之前有空格)和DirectoryIndex index.php index.html
测试php与apache的环境(成功的话如下图):vim /usr/local/httpd/htdocs/test1.php
<?php
phpinfo();
?>
php配置添加加速模块
补充:开启子配置项如下图(应该可以在配置文件中找到,取消注释就好)
配置自配置文件:vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
其他两种虚拟站点的子配置文件配置:
基于IP的虚拟站点
基于端口的虚拟站点
端口需要在开启子配置文件下面添加两项
Listen 192.168.0.121:81
Listen 192.168.0.121.82
4、安装配置Mysql
源码编译安装
等待补充。。。。。。
三、普遍的工作部署结构图
如上图是较为简单普遍的工作布局,在一台服务器上搭建LAMP平台21
搭建途中的防火墙路由服务器
外网的网卡配置 内网的网卡配置
先iptables清空防火墙重新配置
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 192.168.0.21
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p udp --dport 67 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -P INPUT DROP
iptables -t nat -A PREROUTING -i eth0 -d 192.168.0.21 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.21
因为重启防火墙会还原,就可以用iptables-save > /my/myiptables.txt命令把配置信息保存到我创建的/my/myiptables.txt文件下,下一次就可以用iptables-restore < /my/myiptables.txt命令还原配置
配置内网办公电脑的IP地址以及网卡信息,并用该计算机测试能否ping通本机或ping通www.baidu.com之类的网,如下图,表示防火墙配置成功,能够ping通外网,实现了多路复用功能,内网可以访问外网(后面测试外网访问内网的网站)
四、LAP + MySQL分离安装部署结构图
这里以红色区域为例子,把php和httpd搭建在一个服务器,mysql单独搭建在一个服务器上
如果MySQL和php不在同台机器:
如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了
--with-mysql=mysqlnd 启用mysql的支持
PHP编译安装时--with-mysql=/usr/local/mysql变为--with-mysql=mysqlnd
./configure --prefix=/usr/local/php5 --with-mcrypt --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=mysqlnd --with-config-file-path=/usr/local/php5 --enable-mbstring
测试
LAP + MySQL测试apache + Mysql+PHP三者的环境
vim /usr/local/httpd/htdocs/test2.php
<?php
$link=mysql_connect('192.168.1.104','abc','123456');
if($link) echo "恭喜你,PHP连接数据库成功";
mysql_close();
?>
注意: 默认情况下mysql数据库不允许使用root用户远程连接
在mysql数据库中手动创建远程登录用户:
grant all on *.* to 'abc'@'192.168.1.103' identified by '123456';
五、Apache服务管理优化
以下图为实例
一台DNS服务器,这里不需要DHCP和防火墙IP地址为192.168.1.1
一台办公电脑Windows系统,IP地址设置为192.168.1.23,DNS设置为DNS服务器IP地址192.168.1.1
一台服务器搭建LAMP平台IP地址为192.168.1.21,上面创了两个网页,一个是www.baidu.com,一个为www.qq.com
用电脑访问网页测试(我这里因为创建的名字不是index.html所以需要加上路径):
DNS配置主配置文件
DNS解析www.baidu.com的zone文件
DNS解析www.qq.com的zone文件
1.Apache服务日志管理
在/var/log(默认情况下存放) 由rsyslogd程序产生(系统日志)
Aphche服务的日志可以在主配置文件里配置日志存放位置:vim /usr/local/httpd/conf/httpd.conf
错误日志文件: 访问记录日志文件:
这里的common为:日志的展示格式
apache中日志记录格式主要有两种:普通型common和复合型combined(安装默认为common)
注意:一般有子配置文件我们会在子配置文件中去设置日志
子配置文件的好处之一:可以分开创建和查看以及分析各个网页的日志文件
打开子配置文件:vim /usr/local/httpd/conf/extra/httpd-vhosts1.conf
我们到该目录下查看,可以查看生成了我们在配置文件中设置的各个日志文件
.pid文件:存放httpd的进程号
实时查看日志命令:tail -f
存在的问题:随着网站访问量增大,默认情况日志文件越来越大
措施:对日志进行分割
Apache自带日志分割工具
Apache自带的日志分割工具:rotatelogs 分割工具位置:/usr/local/bin/rotatelogs
使用方法:
ErrorLog "|/usr/local/httpd/bin/rotatelogs -l /usr/local/httpd/logs/error_%Y%m%d.log 86400"
CustomLog "|/usr/local/httpd/bin/rotatelogs -l /usr/local/httpd/logs/access_%Y%m%d.log 86400" common
在子配置文件日志配置项进行修改(这里用www.baidu.com来试验)
配置好后重启服务,到存放日志的位置查看,就可以查看到访问记录
使用第三方日志分割工具cronolog
下载源码包解压进行编译安装
tar zxf cronolog-1.6.2.tar.gz
安装完会在 /usr/local/sbin/cronolog 文件
使用方法(跟rotatelogs相似)
ErrorLog "|/usr/local/sbin/cronolog /usr/local/httpd/logs/test/error_%Y%m%d.log"
CustomLog "|/usr/local/sbin/cronolog /usr/local/httpd/logs/test/access_%Y%m%d.log" common
安装日志分析系统
1.下载源码包
2.在/usr/local下建立文件夹/usr/local/awstats
3.解压之后目录移动到/usr/local/awstats
4.给awstats_configure.pl可执行权限
5.运行脚本awstats_configure.pl
运行后进行手动一步一步选择如下图
6.修改站点统计配置文件:指定统计的具体日志文件路径
我的刚刚是默认路径为/etc/awstats下
编辑配置文件:LogFile="/usr/local/httpd/logs/access_log"(你想统计哪个日志)
7.手动创建/var/lib/awstats这个目录:mkidr /var/lib/awstats
8.然后给awstats_updateall.pl文件执行权限,运行该文件
结果如下图:
然后是用办公电脑访问,如下图就是成功了
我这里的网址为:http://www.baidu.com/awstats/awstats.pl?config=www.baidu.com
2.Apache访问控制与安全
分为客户机地址限制访问和用户密码验证访问
客户机地址限制访问
地址限制,修改Apache主配置文件
配置之后除了192.168.1.21这个ip其他ip都无法访问
用户密码验证访问
Apache自带的工具可以实现
1.创建用户认证数据库命令:/usr/local/httpd/bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin
2.weadmin为用户,然后系统会让你输入密码
3.因为这个网页配置在主配置文件,所以在Apache主配置文件中添加认证项目(添加的位置如下图所示)
AuthName "AWStats Directory"
AuthType Basic
AuthUserFile /usr/local/httpd/conf/.awspwd
require valid-user
再次用办公电脑进行访问测试,如下图所示
3.Apache优化访问
Apache访问保持
注意:源码安装是默认开启保持,rpm安装是默认关闭
在子配置文件目录中的httpd_default.conf
/etc/httpd.conf
KeepAlive Off
KeepAliveTimeout 15
网页压缩模块
作用:apache中gzip模块可以使用gzip压缩算法来实现对apache服务器发布的网页内容进行压缩后再传输到客户端浏览器
不同版本之间的区别:
apache 1.x:没有内建网页压缩技术,使用的是额外的第三方mod_gzip模块来执行压缩。压缩比率高,高出4%~6%压缩量
apache 2.x:内建使用mod_deflate,压缩速度快
apache 2.0.45开始:mod_deflate使用DeflateCompressionLevel指令来设置压缩级别,1最快压缩比最低,9最慢压缩比最高,默认6
1.查看检查模块:apachectl -t -D DUMP_MODULES | grep "deflate"
2.停止服务,重新到解压的目录编译安装(编译时加上模块选项)
./configure --prefix=/usr/local/httpd/ --enable-deflate --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
3.修改主配置文件添加开启mod_deflate模块
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
DeflateCompressionLevel 9
setOutputFilter DEFLATE
4.启动服务检查(下图为成功)
网页缓存模块
作用:Apache的mod_expires模块会自动生成页面头部信息中的Express标签和Cache-Control标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要再次向服务器发出请求
配置mod_expires模块与mod_deflate模块相似
1.检查模块:apachectl -t -D DUMP_MODULES | grep "expires"
2.重新编译安装
./configure --prefix=/usr/local/httpd/ --enable-deflate -enable-expires --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
make && make install
修改主配置文件,启用mod_expires模块
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</IfModule>
4.重启检测(下图为成功)
防盗链模块
www.baidu.com上的网页用一张图片页面(使用本地图片资源),www.qq.com使用www.baidu.com的图片链接作为该网页上的图片(本地没有图片,使用网上资源)如下
两个页面的html编写图片路径不同(www.qq.com图片使用www.baidu.com的流量资源),如下图
www.baidu.com的html文件编写 www.qq.com的html文件编写
baidu网站目录下有图片,qq网站目录下没有
防盗链的使用(防止别人是用自己的资源流量)
使用Apache中的一个模块:mod_rewrite
1.检查模块(成功如下):apachectl -t -D DUMP-MODULES | grep "rewrite"
2.如果没有,关闭服务,重新编译
./configure --prefix=/usr/local/httpd/ --enable-deflate --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-expires
make && make install
3.在配置文件中添加启动模块(我网站配置在子配置文件中所以在子配置文件中启用模块)
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://abc.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://abc.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.abc.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.abc.com/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.abc.com/error.png
4.测试www.qq.com网站访问的应该是你配置的另一个图片