LAMP环境搭建与配置
1.安装MySQL
下载软件包
#uname -i (x86_64)//查看Linux多少位
(选择多少位源码包)
(1)初始化
#tar zvf mysql ***
[ -d /usr/local/mysql ] && mv /usr/local/mysql /usr/local/mysql_old
#mv mysql**** /usr/local/mysql //移动位置
#cd /usr/local/mysql
#mkdir -p /data/mysql //数据库存放的位置
#chown -R mysql:mysql /data/mysql //更改权限
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
如遇到错误信息“FATAL ERROR”:...是缺少包prel-moudule-install 使用命令yum install -y 包名
(2)配置MySQL
#cp sopport-files/my-default.cnf /etc/my.cnf
#vim /etc/my.cnf //配置文件
#cp support-files/mysql.server /etc/init.d/mysql //复制启动脚本
#chmod 755 /etc/init.d/mysql //修改属性为755
#vim /etc/init.d/mysql //修改启动脚本 (修改地方datadir=/data/mysql)//数据库存放目录
#chkconfig --add mysql //把mysql服务加入到系统服务列表
#cjkconfig mysql on // 使其开机就启动
#service mysql start // 启动服务
如果启动不了请到/data/mysql/目录下查看错误日志,名通常是主机名.err。检查MySQL是否启动的命令
#ps aus |grep mysql //结果应大于2行
#netstat -lnp |grep 3306 //查看有没有监听3306端口
(2)安装Apache
进入目录#cd /use/local/src
下载相应的包 (httpd apr apr-util)
解压源码包(tar -xzvf ........)
apr和apr-util (可以理解为一个通用的函数库,主要为上层应用提供支持。
#cd /usr/local/src/apr
#./configure --prefix=/usr/local/apr
#make &&make intall 编译安装
#cd /usr/local/src/apr-util 进入目录
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr // 指定数据存放路径
#yum install -y pcre-devel //安装库文件
#make&&make install //编译安装
如果安装apr-util 时出错(yum install -y expat-devel )
继续安装 httpd
#cd /usr/local/src/httpd
#./configuer --perfix=/usr/local/apache --with-apr=usr/local/apache --with-apr=/usr/local/apr --with-apr-uitl=/usr/loacl/apr-uitl --enable-so enable-mods-shared=most // 配置编译参数
#yum install -y pcre=devel(避免出现错误)
#make&&make install //编译和安装
(3)安装PHP
#cd /usr/local/src
下载源码包解压
cd php //进入目录
配置参数
./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
安装完成
#cp php.ini-production /usr/local/php/etc/php.ini /复制配置文件
httpd 的主配置文件为/usr/local/apache/conf/httpd.conf
vim /usr/local/apache/conf/httpd.conf //配置文件
测试LAMP是否成功
检查配置文件 #/use/local/apache/bin/apachectl -t
#/usr/local/apache/bin/apachectl start //启动
查看是否启动
Netstat -lnp |grep httpd
出现80端口则成功。
测试是否解析成功
#curl localhost/1.php
(未出现源码,解析成功)
Httpd配置
(1)默认虚拟主机
配置文件(httpd.conf)
Vim /usr/local/apache/conf/httpd.conf
//搜素关键词httpd.conf,把本行#好删除
保存主配置文件,然后编辑虚拟主机配置文件
Vim /usr/local/apache/conf/extra/httpd-vhost.conf (虚拟机主配置文件)
<VirtualHost *:80>
ServerAdmin admin@aminglinux.com
DocumentRoot "/data/wwwroot/aming.com"
ServerName aming.com
ServerAlias www.aming.com
ErrorLog "logs/aming.com-error_log"
CustomLog "logs/aming.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.wyy.com"
ServerName www.wyy.com
ServerAlias wyy.com
</VirtualHost>
修改配置文件 定义两个站点aming.com www.wyy.com
#mkdir -p /data/wwwroot/aming.com /data/wwwroot/www.wyy.com
#echo “aming.com” > /data/wwwroot/aming.com/index.html
#echo “wyy.com” > /data/wwwroot/wyy.com/index.html
#usr/local/apache/bin/apachectl -t
#usr/local/apache/bin/apachectl -graceful
#curl -x127.0.0.1:80 aming.com
#curl -127.0.0.1:80 www.wyy.com
显示内容!
(2)用户认证 (对www.wyy.com站点作用户认证)
#vim /usr/local/apache/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/www.wyy.com>
AllowOverride AuthConfig
AuthName "wyy.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</Directory>
#/usr/local/apahe/in/htpasswd -cm /data/.htpasswd www.wyy.com
New password:
Re-type new passdword:
Adding password for user wyy
#/usr/local/apache/bin/apchectl -t //验证没有问题才能重启或者重新加载
#/usr/local/apache/bin/apchectl graceful
配置完成,到宿主机修改hosts文件(c:windowssystem32driveretchosts),将www.wyy.com域名指向你这台Linux机器。(增加 192.168.41.109 www.wyy.com )
弹出用户认证!
(3)配置域名跳转
将域名wyy.com跳转到www.wyy.com
<Directory /data/wwwroot/www.wyy.com>
AllowOverride AuthConfig
AuthName "wyy.com user auth"
ServerAlias wyy.com
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.wyy.com$
RewriteRule ^/(.*)$ http://www.wyy.com/&1 [R=301,L]
</IfModule>
</Directory>
#/usr/local/apache/bin/apachectl -M|grep -i rewrite //如果没有任何输出,则需要编辑配置文件
#vim /usr/local/apache/conf/httpd.conf //搜索rewrite 将#号删除
#/usr/local/apache/bin/apachectl graceful
#/usr/local/apache/bin/apachectl -M|grep -i rewrite
Rewrite_module (shared)
#curl -x127.0.0.1:80 -I wyy.com
(4)配置访问日志
#vim /usr/local/apache/conf/extra/httpd-xhost.conf
CustomLog "logs/wyy.com-access_log" combined
测试语法并重新加载配置
#/usr/local/apache/bin/apachectl -t
#/usr/local/apache/bin/apachectl graceful
#curl -x127.0.0.1:80 -I wyy.com
#tail /usr/local/apache/logs/wyy.com-access_log
(5)访问日记不记录静态文件及日志切割
先定义一个image-request环境变量,把gif、png、jpg、bmp、swf、js、css等格式文件全部归到image-request里,后面的env=!image-request 有用到“!”,相当取反了,意思是把image-quest以外的类型文件记录到日志里。
CustomLog "logs/wyy.com-access_log" combined
SetEnvIf Request_URI ".*.gif$" image-request
SetEnvIf Request_URI ".*.jpg$" image-request
SetEnvIf Request_URI ".*.png$" image-request
SetEnvIf Request_URI ".*.bmp$" image-request
SetEnvIf Request_URI ".*.swf$" image-request
SetEnvIf Request_URI ".*.js$" image-request
SetEnvIf Request_URI ".*.css$" image-request
CustomLog"|/usr/local/apache/bin/rotatelogs-l logs/wyy.com-a#ccess_%Y%m%d.log
86400" combined env=!image-request
测试配置文件没有问题,重新加载服务
#/usr/local/apache/bin/apachectl -t
#/usr/local/apache/bin/apachectl graceful
再次访问日志
#curl -x127.0.0.1:80 -I www.wyy.com
#ls /usr/local/apache/logs
日志文件显示记录
测试日志切割
#touch /data/wwwroot/www.wyy.com/aming.jpg
#touch /data/wwwroot/www.wyy.com/aming.txt
(6)配置静态元素过期时间
配置文件
#vim /usr/local/apache/conf/extra/httpd-vhosts.conf
<IfModule mod_expites.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hour"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
这部分配置用到了mod_expires模块,然后测试配置并重新加载
#/usr/local/apache/bin/apachectl -t
#/usr/local/apache/bin/apachectl graceful
检查httpd是否加载expires模块
#/usr/local/apache/bin/apachectl -M|grep -i expires
检查是否有输出,没有则需配置文件
#vim /usr/local/apache/conf/httpd.conf
搜索expires找到#Loadmodule expires_module module/mod_expires.so 这行,删除井号。
重新加载服务 #/usr/local/apache/bin/apachectl graceful
#/usr/local/apache/bin/apachectl -M|grep -i expires
有这行expires_module(shared) 说明已经正确加载模块
用curl 命令测试
#curl -x127.0.0.1:80 -I www.wyy.com/aming.jpg
显示max-age=86400这一行,成功!
(7)配置防盗链
#vim /usr/local/apache/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/www.wyy.com>
SetEnvIfNoCase Referer "http://www.wyy.com" local_ref
SetEnvIfNoCase Referer "http://wyy.com"local_ref
SetEnvIfNoCase Referer "^$" local_ref
<filesmatch".(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
</Directory>
用curl 测试是否成功
#/usr/local/apache/bin/apachectl -t
#/usr/local/apache/bin/apachectl graceful
#curl -x127.0.0.1:80 -I -e “http://www.wyy.com/123.txt” http://www.wyy.com/aming.jpg
允许的会返回状态码200 !
#curl -x127.0.0.1:80 -I -e “http://www.123.com/123.txt” http://www.wyy.com/aming.jpg
//使用非允许的referer会返回403的状态码
//访问html类型文件时,也不会被保护
(8)访问控制
除了用户认证限制访问之外,还可以通过限制ip,限制use_agent限制访文网站。限制ip指的是访问网站的来源ip,而限制use_agent,通常用来限制恶意或者不正常的请求。
编辑配置文件
#vim /usr/local/apace/conf/extra/httppd-vhosts.conf
<Directory /data/wwwroot/www.wyy.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
<Directory>来指定限制访问的目录,order定义控制顺序,哪个在前就先匹配哪个规则。
验证过程
#mkdir #/data/wwwroot/www.wyy.com/admin/index.html //创建目录,模拟网站后台
#echo“admin”>/data/wwwroot/www.wyy.com/admin/index.html
//在后台目录下面创建文件,并写入内容
#> /usr/local/apache/logs/wyy.com-access_201****.log //清空当天的访问日志
#curl-x192.168.188.128:80 -l www.123.com/admin/index.html
#curl -x127.0.0.1:80 -I www.123.com/admin/index.html
返回状态码403!
也可以针对某个文件来做限制
<Directory /data/wwwroot/www.wyy.com>
<Filematch “aming.php(.*)”>
Order deny,allow
Deny from all
Allow from 127.0.0.1
<Filematch>
</Directory>
限制某个目录禁止解析php
配置如下
<Directory /data/wwwroot/www.wyy.com/upload>
Php_admin_flag engine off
</Directory>
验证过程
#/usr/local/apache/bin/apachectl -t
#/usr/local/apache/bin/apachectl graceful
#cp/usr/local/apache/htdocs/1.php /data/wwwroot/www/wyy.com/upload
#curl -x127.0.0.1:80 www.123.com/upload/1.php
显示源码,解析不成功
限制user-agent
配置文件
<VirtualHost *:80>
DocumentRoot"/data/wwwroot/www.wyy.com"
ServerName www.wyy.com
ServerAlias wyy.com
CustomLog "|/usr/local/apache/bin/rotatelogs -l logs/www.wyy.com-access_%Y%m%d.log
86400" combined env=!image-request
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.*[NC]
RewriteRule .* - [F]
</IfModule>
</VirtualHost>
这个也用到了rewrite模块,%{HTTP_USER_AGENT} 为user-agent的内置变量,or和nc表示不区分大小写 f 相当于Forbiddon
重新加载验证
#/usr/local/apache/bin/apachectl -t
#/usr/local/apache/bin/apachectl graceful
#curl -I -x127.0.0.1:80 www.wyy.com/upload/1.php
回复:HTTP/1.1 403 Forbidden
Date: Fri, 06 Sep 2019 08:22:13 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.39
Content-Type: text/html; charset=iso-8859-1
PhP配置
(1)禁用函数
php有诸多内置函数,有一些函数(比如exec)会直接调取Linux系统命令,如果开发会非常危险。基于安全考虑应该把一些存在安全风险函数禁掉。
直接编辑文件#vim /usr/local/php/etc/php.ini
搜索disable_function
disable_function = 加入函数
(2)配置error_log
编辑文件 #vim /usr/local/php/php.ini
搜索log_errorsog_改成 log_errorsog On
搜索error_log改为error_log = /var/log/php/php_errors.log
搜索error_reporting改为error_reporting = E_ALL & ~E_NOTICE
搜索display_error 改为display_errors = Off
log_error可以改为on和off,用来php记录错误日志。error_log设定错误日志路径;error_reportong设定错误日志的级别,E_ALL为所有类型的日志,(警告和提示都会记录)。
#mkdir /var/log/php
#chmod 777 /var/log/php
#/usr/local/apache/bin/apachectl graceful
#vim /data/wwwroot/www.wyy.com/test.php
<?php
Echo
(写入内容,故意丢掉结尾)
用curl测试
#curl -A “123” -I -x127.0.0.1:80 www.wyy.com/test.php
出现状态码500,说明访问的页面是错误的,此时查看php错误日志来判定错误原因
#cat /var/log/php/pph_errors.log
通过日志可以判断,test.php文件第三行少了分号。
(3)配置open_basedir
作用是将网站限制在指定目录里。
编辑文件 #vim /usr/local/php/etc/pnp.ini
搜索open_basedir
open_basedir= /tmp:/data/wwwroot/www.wyy.com //指定目录
Open_basedir 可以是多个目录,用:分隔。
#usr/local/apache/bin/apachectl graecful
#cp/usr/local/apache/htdocs/1.php /data/wwwroot/aming.com/
用curl 测试 :#curl -x127.0.0.1:80 -I aming.com/1.php
该目录返回状态码为500,限制成功
发现aming.com/1.php不能访问,查看错误日志,该网站被限制目录
(4)单个虚拟主机设置open_basedir
编辑配置文件 #vim /usr/local/apache/bin/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.wyy.com"
ServerName www.wyy.com
ServerAlias wyy.com
CustomLog "|/usr/local/apache/bin/rotatelogs -l logs/www.wyy.com-access_%Y%m%d.log
86400" combined env=!image-request
php_admin_value open_basedir "/data/wwwroot/www.123.com/admin/:/tmp/"
</VirtualHost>
起作用的就是这句php_admin_value,他可以定义php.ini里面的参数。(error_log也可以定义)
(5)php动态扩展模块安装
首先学会查看php都加载了那些功能模块
#/usr/local/php/bin/php -m
等等......
安装php的redis扩展模块
#cd /usr/local/src //进入目录
#wget http://pecl.php.net/get/redis-2.2.5.tgz //建议下载低版本,高版本与php5不兼容
#cd redis-2.2.5 //进入目录
#/usr/local/php/bin/phpize //目的是生成configure文件
会遇到一个错误 则需安装autoconf
#yum install -y autoconf
再次执行#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config //指定目录
#make &&make install //编译并安装
Make 编译好会把redis.so 放到/usr/local/php/lib/php/extension/no-debug-zts-20131226
#ls /usr/local/php/lib/php/extension/no-debug-zts-20131226 //可以看到redis.so
#vim /usr/local/php/etc/php.ini //增加一行配置(最后一行即可)
extension = redie.so
#/usr/local/php/bin/php -m |grep redis // 查看是否加载redis.so模块
加载出redis模块!
要想要在php网站使用redis模块,还需重启一下httpd服务。
重启命令#service httpd start