LAMP环境搭建与配置
任务1安装LAMP,基础配置解析PHP
安装MySQL
创建目录
#cd/usr/local/src//软件包都放在这里方便管理
下载资源包
#wget
http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.
gz
解压
(2)解压
#tarzxf源码包
安装配置
#useradd -s /sbin/nologin mysql
//建立MySQL用户,因为启动MySQL需要该用户,/sbin/nologin用
户无法使用bash或其他shell来登陆系统
#mkdir -p /data/mysql
//创建datadir,数据库文件会放到这里面
#chown -R mysql:mysql /data/mysql
//更改权限,不更改后续操作就会出问题
#[ -d /usr/local/mysql] && mv /usr/local/mysql /usr/local/mysql_old
//&&相当于一个判断,意前面命令执行才会执行后面
# mv mysql-5.6.39-linux-glibc2.12-x86_64/usr/local/mysql
//挪动位置
# cd /usr/local/mysql
#./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
//--user表示定义数据库的以哪个用户的身份运
//--datadir表示定义数据库的安装目录
如出现报错,需安装软件包
# yum install -y perl perl-devel autoconf
# cp support-files/my-default.cnf/etc/my.cnf
## vi /etc/my.cnf
//修改配置文件
#These are commonly set ,remove the #and set as required basedir = /usr/local/mysql
//basedir表示MySQL包所在路径
datadir = /data/mysql/
//表示定义存放数据的位置
port = 3306
//port表示定义MySQL服务监听的端口号
server_id=130
//表示该MySQL服务的ID号
socket = /tmp/mysql.sock
//定义MySQL服务监听的套接字地址
#cp support-files/mysql.server/etc/init.d/mysql
//复制启动脚本文件
#chmod 755/etc/init.d/mysql
//修改启动脚本文件的属性
#vi /etc/init.d/mysql
basedir=/usr/local/mysql
datadir=/data/mysql
//修改启动脚本,定义basedir和datadir
#chkconfig --addmysql
//把mysql服务加到系统服务列表中
#chkconfig mysql on
//开机就启动
#service mysql start
//启动服务
安装成功
[root@localhost mysql]# service mysql start
Staring MySQL.Logging to ' /data/mysql /localhost.localdomain .err ' .
#ps -ef |grep mysqld
#yum install net-tools
#netstat-ltunp |grep 3306
安装Apache
创建目录
#cd /usr/local/src/
下载资源包
#wget https://mirrors.cnnic.cn/apache/httpd/httpd-2.4.46.tar.gz
#wget http://mirrors.hust.edu.cn/apache/apr/apr-1.6.5.tar.gz
#wget http://mirrors.hust.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
解压
#tar -zxvf httpd-2.4.46.tar.gz
#tar -zxvf apr-1.6.5.tar.gz
#tar -zxvf apr-util-1.6.1.tar.gz
安装和配置
#cd /usr/local/src/apr-1.6.5
#./configure --prefix=/usr/local/apr
如果报错“configure:error:noacceptableCcompilerfoundin$PATH”,则安 装软件包
#yum install -y gcc
如果报错“rm: cannot remove 'libtoolT' : No such file or directory ”
#vi configure
将 RM='$RM'改为 RM='$RM -f '
再次执行
#./configure--prefix=/usr/local/apr
继续编译
# make && make install
#cd /usr/local/src/apr-util- 1.6.1.
# yum install expat-devel
#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
#make && make install
继续操作
#cd /usr/local/src/httpd-2.4.46
#yum install -y pcre pcre-devel
//为避免配置时出错提前安装库文件
#./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most
#make && make install
//--perefix指定安装目录
//--enable-so表示启用DSO
//--enable-mods-shared表示以共享形式安装模块
如果报错“collect2:error:ldreturned1exitstatusmake[2]😗*[htpasswd]
Error1”
解决方案:
# cd /usr/local/src/
# cp -r apr-1.6.5 /usr/local/src/httpd-2.4.46/srclib/apr
#cp -r apr-util-1.6.1 /usr/local/src/httpd-2.4.46/srclib/apr-util
如果还是不行,重新执行configure命令,添加一个编译参数:
--with-included-apr
再执行 make clean all
# make && make install
继续操作
#/usr/local/apache2.4/bin/apachectl -M
//查看配置文件有哪些文件
//share字样的动态共享模块,static以静态形式存
安装成功
安装php
下载资源包
# wget http://php-5.6.30.tar.gz
创建目录
# cd /usr/local/src
解压
# tar -zxvf php-5.6.30.tar.gz
3.安装配置
# yum install -y libxml2-devel openssl openssl-devel bzip2 bzip2-devel libpng libpng-devel freetype freetype-devel epel-release libmcrypt-devel libjpeg-turbo libjpeg-turbo-devel
# yum install -y libm crypt-devel
//为防止配置时出错提前安装库文件
#cd php-5.6.30
//cd命令:切换当前目录至其它目录,比如进入/etc目录,则执行 cd /etc。
#yum install bzip2-devel.x86_64-y
#./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-libxml-dir --with-gd--with-jpeg-dir --with-png-dir--with-freetype-dir --with-iconv-dir--with-zlib-dir--with-bz2--with-openssl--with-mcrypt--enable-soap --enable-gd-native-ttf--enable-mbstring--enable-sockets--enable-exif
编译 安装
# make
# make install
//编译安装
httpd解析PHP
编辑httpd配置
# vim/usr/local/apache2.4/conf/httpd.conf
//编辑httpd的主配置文件。
搜索ServerName,把ServerNamewww.example.com:80前#去掉;
替换目的允许所有请求访问
<Directory/>
AllowOverridenone
Requirealldenied
</Directory>
替换
<Directory/>
AllowOverridenone
Requireallgranted
</Directory>
搜索AddTypeapplication/x-gzip.gz.tgz,在下面添加一行AddType
application/x-httpd-php.php;
<IfModuledir_module>
DirectoryIndexindex.html
</IfModule>
替换
<IfModuledir_module>
DirectoryIndexindex.htmlindex.php
</IfModule>
(1)测试配置文件是否正确
/usr/local/apache2.4/bin/apachectl-t
/检验配置文件是否正确:SyntaxOK
#/usr/local/apache2.4/bin/apachectlstart
//启动httpd命令
#netstat-lnp|grephttpd
//查看是否启动
#curllocalhost
<html><body><h1>Itworks!<h1><body><html>
//使用curl命令简单测试,,显示了就是成功
(2)测试是否正确解析PHP
vim/usr/local/apache2.4/htdocs/1.php
<?
echo“php解析正确”
?>
//编写一个测试脚本
curllocalhost/1.php
php解析正确
//如显示此信息则PHP解析正确
安装成功
[root @local host php-5.6.30# cur] localhost
<html><body><h1>It works!</h1></body></html>
[root@local host php-5.6.30]# curl localhost/1.php php解析正常[root@local host php-5.6.30]#
任务2Apache配置
虚拟机
虚拟主机(共享主机,又称虚拟服务器)是一种在单一主机或主机群上,实
现多网域服务的方法,可以运行多个网站或服务的技术。虚拟主机之间完全独立,
并可由用户自行管理,虚拟并非指不存在,而是指空间是由实体的服务器延伸而
来,其硬件系统可以是基于服务器群,或者单个服务器。
编辑httpd.conf搜索httpd-vhosts,去掉#号
# vi/usr/local/apache2.4/conf/httpd.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
# Local access to the Apache HTTP Server Manual
#Include conf/extra/httpd-manual.conf
# Distributed authoring and versioning (WebDAV)
#Include conf/extra/httpd-dav.conf
然后再配置文件
<VirtualHost*:80>
ServerAdminwebmaster@dummy-host.example.com
DocumentRoot"/usr/local/apache2.4/docs/abc.com"
ServerNameabc.com
ServerAliaswww.abc.comaaa.com
ErrorLog"logs/abc.com-error_log"
CustomLog"logs/abc.com-access_log"common
</VirtualHost>
<VirtualHost*:80>
DocumentRoot"/usr/local/apache2.4/docs/111.com"
ServerName111.com
ErrorLog"logs/111.com-error_log"
CustomLog"logs/111.com-access_log"common
</VirtualHost>
//ServerAdmin指定管理员邮箱,
//DocumentRoot为该虚拟主机站点的根目录,
//ServaerName为网站的域名
//ServerAlias为网站的第二域名
//ErrorLog为站点的错误日志
//CustomLog为站点的访问日志
#cd/usr/local/apache2.4/
#mkdirdocs
#cddocs
#mkdirabc.com
#viabc.com/index.html
abc.com
#mkdir111.com
#vi111.com/index.html
111.com
检查配置文件是否有错误
#/usr/local/apache2.4/bin/apachectl-t
graceful用于修改了配置文件后进行重新读取配置文件。
#/usr/local/apache2.4/bin/apachectlgraceful
配置验证
#curl-xlocalhost:80www.abc.com
abc.com
#curl-xlocalhost:80www.aaa.com
abc.com
#curl-xlocalhost:80111.com
111.com
用户认证
首先修改abc.com虚拟主机配置
#vim/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost*:80>
ServerAdminwebmaster@dummy-host.example.com
DocumentRoot"/usr/local/apache2.4/docs/abc.com"
ServerNameabc.com
ServerAliaswww.abc.comaaa.com
<Directory/usr/local/apache2.4/docs/abc.com>
AllowOverrideAuthConfig
AuthName"abc.comuserauth"
AuthTypeBasic
AuthUserFile/usr/local/apache2.4/docs/.htpasswd
requirevalid-user
</Directory>
ErrorLog"logs/abc.com-error_log"
CustomLog"logs/abc.com-access_log"common
</VirtualHost>
Directory
//指定认证的目录
AllowOverrideAuthConfig
//这个相当于打开认证的开关
AuthName"testdomain.comuserauth"
//自定义认证的名字,作用不大
AuthTypeBasic
//认证的类型,一般为Basic
AuthUserFile/data/.htpasswd
//指定密码文件所在位置
requirevalid-user
//指定需要认证的用户为全部可用用户
重新加载配置进行访问
#/usr/local/apache2.4/bin/apachectl-t
SyntaxOK
#/usr/local/apache2.4/bin/apachectlgraceful
#/usr/local/apache2.4/bin/htpasswd-cm/usr/local/apache2.4/docs/.htpasswdytl
#curl-xlocalhost:80-uytl:000000abc.com-I
/htpasswd为创建用户的工具,-c为create
//-m为指定密码加密的方式为MD5
.htpasswd为密码文件
ytl为创建的用户
//第二次不用加,否则密码文件会重置
配置验证
配置完可在Windows上访问地址www.abc.com,文件在
C:\Windows\System32\drivers\etc\hosts。打开文件在最后一行输入:
#你的IPwww.abc.com
接下来,关闭防火墙,设置selinux为Permissive(宽容模式,不会实际限
制domain/type的存取)
#systemctlstopfirewalld
#setenforce0
然后,去浏览器访问www.abc.com会有弹窗出现
域名跳转
一个网站可能有多个域名,在这种情况下,我们需要用到域名跳转,这样有两个作用:
一个站点有多个域名对SEO有影响
启用域名跳转 :是通过Apache的Rewrite模块来实现的(httpd.conf中启用该模块,httpd-vhosts.conf中定义跳转设置)
配置
设置不是以111.com开头的网站都跳转到111.com上
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost*:80>
ServerAdminwebmaster@dummy-host.example.com
DocumentRoot"/usr/local/apache2.4/docs/www.111.com"
ServerNamewww.111.com
ServerAlias111.com
<IfModulemod_rewrite.c>//-需要mod__rewrite模块
RewriteEngineon//打开rewrite功能
RewriteCond%{HTTP_HOST}!^111.com$//定义rewrite的条件,当
主机名不是111.com时满足条件
RewriteRule^/(.*)$http://111.com/$1[R=301,L]//定义rewrite规则,
RewriteRule后面分为三个部分,第一部分为当前网址
//第二部分为要跳转的网址,第三部分是选项,需要括号括起来。
。
</IfModule>
ErrorLog"logs/111.com-error_log"
CustomLog"logs/111.com-access_log"common
</VirtualHost>
创建文件
#cd /usr/local/apache2.4/docs
#mkdir www.111.com
#cd www.111.com/
#vim index.html
www.111.com
#vim 123.php
<?php
echo"www.111.com/123.php"
?>
#/usr/local/apache2.4/bin/apachectl-t
#/usr/local/apache2.4/bin/apachectlgraceful
要实现跳转,需要rewrite模块的支持,所以查看是否安装该模块。如果没
有则还需要一些配置:
#/usr/local/apache2.4/bin/apachectl -M |greprewrite
如果不存在修改配置文件
#vi /usr/local/apache2.4/conf/httpd.conf
去掉LoadModulerewrite_modulemodules/mod_rewrite.so的注释
#/usr/local/apache2.4/bin/apachectl-t
SyntaxOK
#/usr/local/apache2.4/bin/apachectlgraceful
#/usr/local/apache2.4/bin/apachectl-M|greprewrite
配置验证
#curl-xlocalhost:802111.com.cn-I
//可以看见状态码301,跳转的网址是111.com
验证成功
配置访问日志
访问日志作用很大,不仅可以记录网站的访问情况,还可以在网站有异常发生时帮助我们定位问题。
要配置httpd访问日志,首先要在主配置文件中定义访问日志的格式,打开主配置文件:
# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log"common
配置验证
#curl -xlocalhost:80 2111.com.cn -I
#tail /usr/local/apache2.4/logs/111-access_log
验证成功
访问日志不记录静态文件
apache的访问日志会记录网站每个文件被获取的信息,这样日志信息量会很大,我们排查日志的时候不容易筛选有用的记录。我们可以把静态文件的日志设置为不记录,提高我们排查日志信息的效率。
在conf/extra/httpd-vhosts.conf配置文件下进行编辑:
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost*:80>
ServerAdminwebmaster@dummy-host.example.com
DocumentRoot"/usr/local/apache2.4/docs/www.111.com"
ServerNamewww.111.com
ServerAlias111.com
ErrorLog"logs/111.com-error_log"
CustomLog"logs/111.com-access_log"common
</VirtualHost>
上传图片文件到image中
# cd /usr/local/apache2.4/docs/www.111.com/
# mkdir image
# ll image/linux.jpg
检查配置信息
# /usr/local/apache2.4/bin/apachectl -t
SyntaxOK
# /usr/local/apache2.4/bin/apachectlgraceful
# curl-xlocalhost:80 www.111.com/image/linux.jpg -I
查看日志
#tail -f /usr/local/apache2.4/logs/111.com-access_log
打开网页访问 111.com/image/linux.jpg
#vim/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdminwebmaster@dummy-host.example.com
DocumentRoot"/usr/local/apache2.4/docs/www.111.com"
ServerNamewww.111.com
ServerAlias111.com
SetEnvIfRequest_URI".*\.gif$"image-request
SetEnvIfRequest_URI".*\.jpg$"image-request
SetEnvIfRequest_URI".*\.png$"image-request
SetEnvIfRequest_URI".*\.bmp$"image-request
SetEnvIfRequest_URI".*\.swf$"image-request
SetEnvIfRequest_URI".*\.js$"image-request
SetEnvIfRequest_URI".*\.css$"image-request
ErrorLog"logs/111.com-error_log"
CustomLog"logs/111.com-access_log"combinedenv=!image-request
</VirtualHost>
//先定义了一个image-request环境变量,把gif,jpg,png,bmp,swf,js,css等格式
文件全归类到此,env=!image-request表示日志记录不为image-request中表示的
静态文件。
保存配置后,测试配置文件是否正确,没有错误重新加载服务:
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
配置验证
# curl -xlocalhost:80www.111.com/image/linux.jpg -I
另打开一个窗口,查看日志,关于jpg格式的没有访问日志信息
#tailf ../../logs/111.com-access_log
验证成功
访问日记切割
随着网站访问量的增大,我们网站的访问日志文件也会变得很大,为了保持磁盘空间,方便访问日志的管理(备份、删除历史日志等。),我们可以进行日志切割,每天的访问日志独立切割出来。
在conf/extra/httpd-vhosts.conf配置文件下进行编辑:
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin lzx@123.com
DocumentRoot "/data/wwwroot/123.com"
ServerName 123.com
ServerAlias www.123.com
SetEnvIf Request_URI ".*\.gif$" img
SetEnvIf Request_URI ".*\.jpg$" img
SetEnvIf Request_URI ".*\.png$" img
SetEnvIf Request_URI ".*\.bmp$" img
SetEnvIf Request_URI ".*\.swf$" img
SetEnvIf Request_URI ".*\.js$" img
SetEnvIf Request_URI ".*\.css$" img
ErrorLog "logs/123.com-error_log"
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%y%m%d.log 86400" common env=!img #%y%m%d以年月日命名,86400秒即1天切割一次,rotatelogs是apache自带的切割日志工具。
</VirtualHost>
静态元素过期时间
介绍:
那到底能缓存多久呢?如果服务器上的某个图片更改了,那么应该访问新的
图片才对。这就涉及一个静态文件缓存时长的问题,也叫作“缓存过期时间”。
在httpd的配置文件中,我们是可以控制这个时间的。
配置
在httpd上我们可以控制文件过期时间,配置如下:
#vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
<VirtualHost*:80>
Server Admin webmaster@dummy-host.example.com
DocumentRoot"/usr/local/apache2.4/docs/www.111.com"
ServerName www.111.com
ServerA lias 111.com
<IfModulemod_expires.c>
ExpiresA ctive on
ExpiresByType image/gif"access plus 1 days“
ExpiresByTypeimage/jpeg"access plus 24 hours"
ExpiresByTypeimage/png"access plus 24 hours'
ExpiresByTypetext/css "now plus 2 hour"
ExpiresByTypeapplication/x-javascript"now plus 2 hours"
ExpiresByTypeapplication/javascript"now plus 2 hours"
ExpiresByTypeapplication/x-shockwave-flash"now plus 2 hours"
ExpiresDefault"now plus 0 min"
</IfModule>
ErrorLog"logs/111.com-error_log"
CustomLog" logs/111.com-access_log" combined
</VirtualHost>
//这里gif,jpeg,png格式的文件过期时长为1天,css.js.flash格式的文件
过期时长为2小时间
保存配置后,测试配置文件是否正确,没有错误重新加载服务:
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
(3)配置验证
检查httpd是否加载expires模块:
#/usr/local/apache2.4/bin/apachectl -M |grep -i expires
//没有输出则说明当前httpd并不支持expires模块,所以需要修改配置文
件
#vim /usr/local/apache2.4/conf/httpd.conf
//搜索关键词expires,找到这一行
#LoadModule expires_modulemodules/mod_expires.so
//把前面#删掉
#/usr/local/apache2.4/bin/apachectl graceful
//重新加载服务
#/usr/local/apache2.4/bin/apachectl -M|grep -i expires
expires_module(share)
//有这行输出说明正确加载expires模块
下面进行测试:
上传linux.jpeg文件
#curl -xlocalhost:80 www.111.com/image/linux.jpeg -I
//max-age=86400说明将缓存86400秒,max-age=0说明没有该类型缓存
文件