笔记10 LAMP架构(MySQLmariadbApachePHP5PHP7)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记10 LAMP架构(MySQLmariadbApachePHP5PHP7)相关的知识,希望对你有一定的参考价值。
MySQL安装
mysql的几个常用安装包:rpm、源码、二进制免编译
把下载的包保存在这个目录里:cd /usr/local/src 所以要先进入这个目录下
第一步,下载源码包:
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
第二步,解压:
tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
第三步,把解压的这个目录移动到usr、local下并改名为mysql:
mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
第四步,进入到这个目录下:
cd /usr/local/mysql
第五步,创建一个mysql用户:
useradd mysql
第六步,创建一个目录:这个目录是为了存放mysql的数据
mkdir /data/
第七步,初始化一下让它生成/data/mysql这个目录:
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
第七步,拷贝配置文件,配置文件在ls /support-files/my-default.cnf里边(模板配置文件)
把它拷贝到/etc/下,改名叫my.cnf(mysqld的配置文件就叫my.cnf固定放在etc下)
cp support-files/my-default.cnf /etc/my.cnf
第八步,拷贝启动脚本
cp support-files/mysql.server /etc/init.d/mysqld
第九步,编辑配置文件
vi /etc/init.d/mysqld
定义basedir和datadir
第十步,添加到系统服务中去:
chkconfig --add mysqld 查看一下:chkconfig --list
第十一步,启动服务:service mysqld start 或者用:/etc/init.d/mysqld start
查看进程:ps aux |grep mysql
查看监听端口:netstat -lntp
停掉服务命令:service mysqld stop
也可以用命令行的方法启动:
停掉服务命令:killall mysqld
如果碰到mysqld的进程杀不死你等了一分钟还没有杀死ps还会有进程那证明他数据量很大正在慢慢写入到磁盘里去这事你不能用kill -9杀死这个进程这样可能会导致你丢失数据或者损坏你的表
mariadb安装
cd /usr/local/src
下载二进制源码包:wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
解压安装包:tar zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
把安装包拷贝到usr/local目录下来:mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mariadb
cd /usr/local/mariadb
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb/ --datadir=/data/mariadb
cp support-files/my-small.cnf /usr/local/mariadb/my.cnf
vi /usr/local/mariadb/my.cnf //定义basedir和datadir 基本不用改
cp support-files/mysql.server /etc/init.d/mariadb
vim /etc/init.d/mariadb //
定义basedir=/usr/local/mariadb
datadir=/data/mariadb
conf=$basedir/my.cnf 以及启动参数
最后在启动脚本定义:搜 /start 大概在300行,定义一下,加上下边的的内容:
启动它:/etc/init.d/mariadb start
启动它之前先看看有没有mysqld服务在运行,先把它关掉。
查看是否启动成功:ps aux |grep mariadb
查看监听端口:netstat -lntp 是不是3306
Apache安装
Apache是一个基金会的名字,httpd才是我们要安装的软件包,早期它的名字就叫apache
Apache官网www.apache.org
第一步,下载这三个包:
wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.27.tar.gz
wget http://mirrors.hust.edu.cn/apache/apr/apr-1.5.2.tar.gz
wget http://mirrors.hust.edu.cn/apache/apr/apr-util-1.5.4.tar.gz
apr和apr-util是一个通用的函数库,它让httpd可以不关心底层的操作系统平台,可以很方便地移植(从linux移植到windows)
第二步,解压这三个包:
tar zxvf httpd-2.4.27.tar.gz
tar zxvf apr-util-1.5.4.tar.gz
tar zxvf apr-1.5.2.tar.gz
第三步,安装apr:
1.先进到apr-1.5.2目录下:cd /usr/local/src/apr-1.5.2
2.安装apr:./configure --prefix=/usr/local/apr
3.make && make install
他下边会有四个目录:ls /usr/local/apr
安装apr-util:
1.进到目录下:cd /usr/local/src/apr-util-1.5.4
2.安装:./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
3.make && make install
编译httpd:
1.进到目录下:cd /usr/local/src/httpd-2.4.27
2.安装:./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most
3.make && make install
ls /usr/local/apache2.4/modules
/usr/local/apache2.4/bin/httpd -M //查看加载的模块
启动apache:/usr/local/apache2.4/bin/apachectl start
安装php5
PHP官网www.php.net
当前主流版本为5.6/7.1
第一步,进到src目录下:cd /usr/local/src/
第二步,下载安装包:wget http://cn2.php.net/distributions/php-5.6.30.tar.gz
第三步,解压:tar zxf php-5.6.30.tar.gz
第四步,进到目录下:cd php-5.6.30
第五步,安装编译:./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-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --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
安装PHP7
安装方法跟PHP5一样!!!
cd /usr/local/src/
wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
tar jvxf php-7.1.6.tar.bz2
cd php-7.1.6
./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --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
ls /usr/local/apache2.4/modules/libphp7.so
cp php.ini-production /usr/local/php7/etc/php.ini
PHP5跟PHP7不想用哪个就把它注释掉,编辑配置文件:
vim /usr/local/apache2.4/conf/httpd.conf
配置http支持PHP
httpd主配置文件/usr/local/apache2.4/conf/httpd.conf
vim /usr/local/apache2.4/conf/httpd.conf //修改以下4个地方
第一步,搜索ServerName 把这个服务打开
第二步,搜索:Require all denied 改成:Require all granted
每次写完配置文件都要执行一下这两步!!
检查配置文件语法是否正确,加上-t选项:
/usr/local/apache2.4/bin/apachectl -t
重新加载配置文件,加上graceful:
/usr/local/apache2.4/bin/apachectl graceful
第三步,搜AddType加上下边这条命令:
AddType application/x-httpd-php .php 加他的目的是为了能让php能解析
第四步,搜索Index,加上下边语句:
DirectoryIndex index.html index.php
第五步,写一个脚本看看php能不能解析:
vi /usr/local/apache2.4/htdocs/1.php
<?php
phpinfo();
?>
写完访问一下192.168.65.135/1.php
如果不能解析那么你就检查一下Apache配置文件:
第一项,看看php5有没有加载:
/usr/local/apache2.4/bin/apachectl -M
如果没有加载php5,你就要看看他有没有这个模块:
ls /usr/local/apache2.4/modules/libphp5.so
查看配置文件里边有没有加载php5:
vim /usr/local/apache2.4/conf/httpd.conf
在查看配置文件里有没有加载AddType这一行:
AddType application/x-httpd-php .php
/usr/local/apache2.4/bin/apachectl -t //测试语法
/usr/local/apache2.4/bin/apachectl start //启动服务
netstat -lntp
curl localhost
vim /usr/local/apache2.4/htodcs/test.php //增加如下内容
<?php
echo 123;
?>
curl localhost/test.php
http的默认虚拟主机
一台服务器可以访问多个网站,每个网站都是一个虚拟主机
概念:域名(主机名)、DNS、解析域名、hosts
任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
编辑配置文件:vim /usr/local/apache2.4/conf/httpd.conf 搜索httpd-vhost,去掉#
配置虚拟主机:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf//改为如下
<VirtualHost *:80>
ServerAdmin [email protected] 这个是要定义邮箱,要不要无所谓
DocumentRoot "/data/wwwroot/abc.com" 这个定义网站的根目录在哪里
ServerName abc.com 网站域名
ServerAlias www.abc.com www.123.com 网站别名,可以写多个域名
ErrorLog "logs/abc.com-error_log" 错误日志
CustomLog "logs/abc.com-access_log" common 访问日志
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName www.111.com
ServerAlias www.exaple.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
更改完创建对应的目录:
mkdir /data/wwwroot/ mkdir /data/wwwroot/abc.com mkdir /data/wwwroot/111.com
然后在对应的站点根目录下创建一个index.php
vim /data/wwwroot/abc.com/index.php
<?php
echo "abc.com";
vim /data/wwwroot/111.com/index.php
<?php
echo "111.com"
</VirtualHost>
最后检查、重启
/usr/local/apache2.4/bin/apachectl –t
/usr/local/apache2.4/bin/apachectl graceful
测试
mkdir -p /data/wwwroot/aming.com /data/wwwroot/www.123.com
echo "aming.com" > /data/wwwroot/aming.com/index.html //网站默认的主页就是index.html
echo "123.com" > /data/wwwroot/123.com/index.html
curl -x127.0.0.1:80 aming.com //这样会去访问aming.com/index.html
curl -x127.0.0.1:80 www.123.com //访问www.123.com
curl -x127.0.0.1:80 www.abc.com
httpd的用户认证
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑成如下内容
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
<Directory /data/wwwroot/www.123.com> //指定认证的目录
AllowOverride AuthConfig //这个相当于打开认证的开关
AuthName "123.com user auth" //自定义认证的名字,作用不大
AuthType Basic //认证的类型,一般为Basic,其他类型阿铭没用过
AuthUserFile /data/.htpasswd //指定密码文件所在位置
require valid-user //指定需要认证的用户为全部可用用户
</Directory>
</VirtualHost>
/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming
重新加载配置-t , graceful
绑定hosts,浏览器测试
curl -x127.0.0.1:80 www.123.com //状态码为401
curl -x127.0.0.1:80 -uaming:passwd www.123.com //状态码为200
还可以针对单个文件进行认证
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
<FilesMatch admin.php>
AllowOverride AuthConfig
AuthName "123.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
</VirtualHost>
域名跳转
需求,把123.com域名跳转到www.123.com,配置如下:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 123.com
<IfModule mod_rewrite.c> //需要mod_rewrite模块支持
RewriteEngine on //打开rewrite功能
RewriteCond %{HTTP_HOST} !^www.123.com$ //定义rewrite的条件,主机名(域名)不是www.123.com满足条件
RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行
</IfModule>
</VirtualHost>
/usr/local/apache2/bin/apachectl -M|grep -i rewrite //若无该模块,需要编辑配置文件
vi /usr/local/apache2.4/conf/httpd.conf
删除rewrite_module (shared) 前面的#
curl -x127.0.0.1:80 -I 123.com //状态码为301
httpd访问日志
访问日志记录用户的每一个请求
vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
把虚拟主机配置文件改成如下:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 123.com
CustomLog "logs/123.com-access_log" combined
</VirtualHost>
重新加载配置文件 -t,graceful
curl -x127.0.0.1:80 -I 123.com
tail /usr/local/apache2.4/logs/123.com-access_log
访问日志不记录静态文件
网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录
把虚拟主机配置文件改成如下:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 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
CustomLog "logs/123.com-access_log" combined env=!img
</VirtualHost>
重新加载配置文件 -t, graceful
mkdir /data/wwwroot/www.123.com/images //创建目录,并在这目录下上传一个图片
curl -x127.0.0.1:80 -I 123.com/images/123.jpg
tail /usr/local/apache2.4/logs/123.com-access_log
访问日志切割
日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件
把虚拟主机配置文件改成如下:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 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
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
重新加载配置文件 -t, graceful
ls /usr/local/apache2.4/logs
静态元素过期时间
浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了
增加配置
<IfModule mod_expires.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>
查看一下服务是否开启:
/usr/local/apache2.4/bin/apachectl -M |grep expaire
没开启需要编辑配置文件搜索:expires_module 把前边的#去掉
vim /usr/local/apache2.4/conf/httpd.conf
重新加载一下,在查看一下服务:
/usr/local/apache2.4/bin/apachectl graceful
curl测试,看cache-control: max-age
配置防盗链
通过限制referer来实现防盗链的功能
配置文件增加如下内容
<Directory /data/wwwroot/www.111.com>
SetEnvIfNoCase Referer "http://www.111.com" local_ref
SetEnvIfNoCase Referer "http://askapelearn.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
</Directory>
curl -e "http://www.aminglinux.com/123.html" 自定义referer
访问控制-Directory
核心配置文件内容
<Directory /data/wwwroot/www.111.com/admin/>
Order deny,allow 以这顺序为主
Deny from all 先拒绝
Allow from 127.0.0.1 在允许
</Directory>
curl测试状态码为403则被限制访问了
访问控制-FilesMatch
核心配置文件内容
<Directory /data/wwwroot/www.123.com>
<FilesMatch "admin.php(.*)">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
访问控制-禁止php解析
核心配置文件内容
<Directory /data/wwwroot/www.123.com/upload>
php_admin_flag engine off
<FilesMatch (.*)\.php(.*)>
Order allow,deny
Deny from all
</Directory>
curl测试时直接返回了php源代码,并未解析
访问控制-user_agent
user_agent可以理解为浏览器标识
CC是一种访问攻击,它利用很多个肉鸡访问,是很有规律的访问,这时我们需要用user_agent来控制。
核心配置文件内容
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR] //NC:表示忽略大小写 OR:或者
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
</IfModule>
curl -A "123123" 指定user_agent,模拟user_agent
php相关配置
查看php配置文件位置
/usr/local/php/bin/php -i|grep -i "loaded configuration file"但是这个不准
模拟一下,在111目录下创建一个phpinfo
编辑:vi index.php
把这个写进去:
<?php
phpinfo();
登录网站:111.com/index.php查看它的配置文件,但是他并没有加载,我们需要复制一份:
先进入到他的源码包:cd /usr/local/src/php-7.1.6/
拷贝:cp php.init-development /usr/local/php7/etc/php.ini
刷新配置:/usr/local/apache2.4/bin/apachectl graceful
找到phpinfo所在的路径打开它进行配置
vim /usr/local/php7/etc/php.ini
搜索date.timezone定义时区
Asia/Shanghai 上海
禁掉一些安全相关的函数
搜索下边这个:默认他是空的,把下边这些安全安全函数粘贴进去
disable_functions 安全函数
eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close,phpinfo
打开调试错误日志
搜索:display_errors
把On改成Off 这样他就不会把错误信息输出到浏览器中
配置一个错误日志搜索:log_errors On表示开启,
把日志定义到一个地方,搜索error_log,比如我们放到/tmp/php_errors.log下去,还要定义errors.log的级别,搜索:error_reporting
open_basedir安全选项
你一台服务器上跑了很多个站点,可能会有一个站点上代码有问题,结果站点被黑了,被人拿到了权 限,然后他会往里渗透,又跑到另一个站点,但是这时我要加一个open_basedir,他就有可能黑不了,我们可以给它做一个隔离,A网站目录在A目录下B网站在B目录下,这样即使A网站被黑了他也看不到B网站的目录,也不会被牵连进来,
搜索open_basedir
定义格式:/data/wwwroot/111.com:/
如果你这个网站上跑了N多个站点,可以再aoach的虚拟主机里边编辑:
打开:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
加上这个php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"
php动态扩展模块
/usr/local/php/bin/php -m //查看模块
下面安装一个redis的模块
cd /usr/local/src/
wget https://codeload.github.com/phpredis/phpredis/zip/develop
mv develop phpredis-develop.zip
unzip phpredis-develop.zip
cd phpredis-develop
/usr/local/php7/bin/phpize //生成configure文件
./configure --with-php-config=/usr/local/php7/bin/php-config
make && make install
/usr/local/php/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以在php.ini中去自定义该路径
vim /usr/local/php/etc/php.ini //增加一行配置(可以放到文件最后一行)
extension = redis.so
本文出自 “12912638” 博客,请务必保留此出处http://12922638.blog.51cto.com/12912638/1954272
以上是关于笔记10 LAMP架构(MySQLmariadbApachePHP5PHP7)的主要内容,如果未能解决你的问题,请参考以下文章