LAMP架构搭建与优化

1.1MySQL安装

创新互联自2013年起,先为固始等服务建站,固始等地企业,进行企业商务咨询服务。为固始企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

LAMP是linux apache mysql php的简写

MySQL是一个数据库文件 apache提供http服务 很多网站站点使用php写

安装下载MySQL

www.aminglinux.com/study_v2/chapter12.html

下载 r.aminglinux.com/

1.2Apache编辑安装

路径和方法

www.aminglinux.com/study_v2/chapter12.html

下载 r.aminglinux.com/

/usr/local/apache2/bin/apachectl start (stop关闭)启动apache

ps aux |grep httpd 查看是否启动了

netstat -lnp 查看监听窗口80

/usr/local/apache2/bin/apachectl -M 查看模块 static为静态 shared为动态

- L只列出静态模块

- t 查看配置文件语法有没有错误

/usr/local/apache2/bin/apachectl graceful 重新加载配置文件

-L 中的prefock.c 说明apache在prefock模式下进行

prefock worker event3种模式

1.4php编译安装-安装顺序在最后

路径也方法

www.aminglinux.com/study_v2/chapter12.html

下载 r.aminglinux.com/

/usr/local/php/bin/php -m 查看模块 都是静态

-i 查看相关配置

测试php解释

重启apache (restart)

vim /usr/local/apache2/conf/httpd.conf 查看配置文件

DocumentRoot就是访问网站时放在的目录

AddType application/x-gzip.gz.tgz下添加一条

AddType application/x-httpd-php.php

修改 DirectoryIndex index.html  index.php

保存退出

restart (或graceful)apache

可以用ip网站方式或者指令curl测试apache是否结合php搭建LAMP

1.6安装discuz

Discuz 创建论坛

mkdir /data/www

cd /data/www

wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip

unzip  Discuz_X3.2_SC_GBK.zip

ls

mv upload/* ./ 把upload下的文件都移出来

ls

rm -rf readme/ utility/ upload/Discuz_X3.2_SC_GBK.zip 把多余的几个文件删去

ps aux |grep httpd 查看apache启动否

/usr/local/apache2/bin/apachectl start  开启

vim /usr/local/apache2/conf/httpd.conf

找到httpd-vhosts.conf,把前面的#删去,使用了虚拟主机的配置文件

找到Deny,改为Allow

:wq

vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

把第二个整段删掉

修改第一个

删去serveradmin整行

把documentroot 改为“/data/www”

servername 改为www.test.com

serveralias (别名)www.aaa.com

errorlog customlog 错误日志与访问日志 在最前面加#

:wq

/usr/local/apache2/bin/apachectl -t

/usr/local/apache2/bin/apachectl restart

hosts 与ip,域名有关   DNS服务

vim/etc/hosts

加一行 192.168.73.10(ip)www.baidu.com

:wq

在主机找到hosts文件

在# ::1 localhost下一行加

192.168.73.10 www.test.com www.aaa.com

保存退出

主机用浏览器登录 www.test.com

点击同意

将红叉改为可写

把它们的属组root改为daemon

chown -R daemon config data uc_client/data uc_server/data

刷新浏览器

下一步

第一项全新安装

创建数据库

/usr/local/mysql/bin/mysql

create database discuz; (数据库名)

grant all on discuz.* to  '111'@'localhost' identified by 'vincentlinux';

回到浏览器

库名 discuz

用户 111

密码 vincentlinux

管理员密码123456

下一步

安装完成

点此访问

1.7apache用户认证

将abc目录设为只有管理员才能访问

cd /data/www

mkdir abc

cd abc

cp /etc/passwd  ./12.txt

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

在#CustomLog下一行加

AllowOverride AuthConfig

AuthName "aaaa"

AuthType Basic

AuthUserFile /data/.htpasswd

require valid-user

:wq

vim /etc/profile.d/path.sh 修改path

export PATH=$PATH:/usr/local/mysql/bin/:/usr/local/apache2/bin

:wq

source /etc/profile.d/path.sh

设置用户和密码

htpasswd -c /data/.htpasswd user1 用户名user1

密码

再创一个user2 删去-c

重启apache

apachectl graceful

浏览器登录 www.test.com/abc/12.txt 就会要求打用户名和密码登录了

1.8默认虚拟主机

mkdir /tmp/123 创建空目录

chmod 600 /tmp/123

vim /use/local/apache2/conf/extra/http-vhosts.conf

上添一段

DocumentRoot “/tmp/123”

ServerName 1111.com

这样禁止了默认的虚拟主机

只能用指定域名www.test.com 和www.aaa.com登录论坛

1.9域名301域名

使www.aaa.com域名自动跳转到www.test.com

vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

在#CustomLog下一行添加一段

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www.aaa.com$

RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]

:wq

如果还有另一个域名www.bbb.com需要跳转到test,则在aaa下一行再添加一条RewriteCond 给bbb,在aaa.com$后几格加[OR]

2.0 Apache日志切割

访问日志记录

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

把ErrorLog和CustomLog前的#去掉 开启错误日志和访问日志的记录

CustomLog 后面的common指日志的格式和名字

vim /usr/local /apache2/conf/httpd.conf

搜索 /common

找到两个LogFormat 就是日志的格式和名称,最好用combined格式

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

把common改为combined

:wq

apachectl -t

apachectl graceful

外部浏览器访问论坛

cd /usr/local/apache2/logs

ls

生成 access_log和error_log两个日志

切割日志

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

修改CustomLog的路径 “|/usr/local/apache2/bin/rotatelogs -l  /usr/local/apache2/logs/+原来的名称-access_%Y%m%d_log  86400” combined

年月日命名日志  以86400秒即一天为分割一个日志

2.1Apache 不记录指定文件类型的日志

没必要记录论坛的小图片css等插入件

只需要记录每页的地址

先给这些小插件标记

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

在serverAlias下一行添加

  SetEnvIf Request_URI ".*\.gif$" p_w_picpath-request

   SetEnvIf Request_URI ".*\.jpg$" p_w_picpath-request

   SetEnvIf Request_URI ".*\.png$" p_w_picpath-request

   SetEnvIf Request_URI ".*\.bmp$" p_w_picpath-request

   SetEnvIf Request_URI ".*\.swf$" p_w_picpath-request

   SetEnvIf Request_URI ".*\.js$" p_w_picpath-request

   SetEnvIf Request_URI ".*\.css$" p_w_picpath-request

然后在CustomLog 的最后添加 env=!p_w_picpath-request

除了以上p_w_picpath-request标记的都会记录

:wq

apachectl -t

apachectl restart

外部浏览器刷新

ls

less 生成的访问日志名称

查看日志不存在以上那些格式的内容

2.2Apache 配置静态缓存

将网页中的小图片小图标作一个缓存 减少带宽

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

在CustomLog的下一段添加

    ExpiresActive on

    ExpiresByType p_w_picpath/gif "access plus 1 days"

    ExpiresByType p_w_picpath/jpeg "access plus 24 hours"

    ExpiresByType p_w_picpath/png "access plus 24 hours"

    ExpiresByType test/css "now plus 2 hours"

    ExpiresByType application/x-javascript "now plus 2 hours"

    ExpiresByType application/x-shockwave-flash "now plus 2 hours"

    ExpiresDefault "now plus 0 min"

 

:wq

apachectl -t

apachectl graceful

2.3Apache配置防盗链

防止自己网站的东西被人盗用

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

在  下一行添加

SetEnvIfNoCase Referer "^http://.*\.test\.com" local_ref

SetEnvIfNoCase Referer ".*\.aminglinux\.com" local_ref

    Order Allow,Deny

    Allow from env=local_ref

 

域名为www.test.com和www.aminglinux.com在白名单上,标记为local_ref

把(txt|doc|mp3|zip|rar|jpg|png|gif|js|css)这些格式的东西加上防盗链

只允许有local_ref标记的地址调用

:wq

apachectl restart

外部浏览器测试

2.4Apache访问控制

限制相关ip访问站点

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

在ErrorLog上方添加一段

(网站根目录)

        AllowOverride None

        Options None

        Order allow,deny (先allow后deny是黑名单,不允许ip为127.0.0.1访问)

        Allow from all

        Deny from 127.0.0.1

   

    (访问后台)

        Order deny,allow (先deny后allow是白名单,允许127.0.0.1访问))

        Deny from all

        Allow from 127.0.0.1

   

测试 curl -x127.0.0.1:80 -Iwww.test.com

或者

curl -x127.0.0.1:80 -Iwww.test.com/admin.php

假如  admin.php 被两个配置段都匹配了的话,那就选精准度更高的。

这两个就是下面这个filesmatch 精准度高,所以以它为准。所以127.0.0.1能够访问www.test.com/admin.php

2.5 Apache禁止解析php

ls -l /data/www/data

查看apache的数组都是daemon

        php_admin_flag engine off  (关闭php解析引擎)

         (禁止访问或下载php文件)

                Order deny,allow

                Deny from all

           

       

2.6Apache禁止指定user_agent

在RewriteRule下一行添加

 RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC,OR]    (匹配curl相关的,NC不区分大小写,OR或者)

   RewriteCond %{HTTP_USER_AGENT} ^.*chrome* [NC]   (匹配chrome相关的,NC不区分大小写,启动后浏览器访问不了网站,测试完要在前面加上#去除禁止)

   RewriteRule .* - [F]  (forbidden,禁止以上两种相关的求情)

:wq

apachectl restart

2.7Apache通过rewrite限制某个目录

在  RewriteRule .* - [F]  下一行添加

RewriteCond %{REQUEST_URI} ^.*/tmp/.* [NC] (限制访问tmp目录)

RewriteRule .* - [F]

2.8php.ini配置文件详解

php的配置文件路径 /usr/local/php/etc/php.ini(用;作注释符号)

修改

disable functions =disable_functions=eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfs (禁用的高风险函数)

display_errors = off

log_errors = On

error_log = /usr/local/php/logs/php_errors.log (若目录logs不存在,就新建mkdir /usr/local/php/logs  然后修改权限 chmod 777 !$)

errors_reporting = E_ALL & ~E_NOTICE

:wq

apachectl graceful

(错误日志不会暴露,生成存在logs目录下)

继续修改

php、apache要访问一个网站,若网站有漏洞,被别人获得权限,要限定死在某个目录下

open_basedir =/data/www:/tmp (网站程序所在目录)

或者在apache下定义(先注释了open_basedir),php.ini只能配置一个,apache可以配置多个

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

上一方添加

php_admin_value open_basedir "/data/www/:/tmp/"

:wq

2.9php扩展模块如何安装

cd /usr/local/src/php-5.4.36

ls

cd ext/ (源码包都在ext下)

ls

例子 编译模块curl

cd curl/

ls

/usr/local/php/bin/phpize

ls (生成了configure文件)

./configure --with-php-config=/usr/local/php/bin/php-config

make

make install

生成了curl.so

/usr/local/php/bin/php/ -i |grep extension_dir

vim /usr/local/php/etc/php.ini

在;extension=php_…最下面添加

extension=curl.so

:wq

3.0mysql配置讲解

mysql配置文件

vim /etc/my.cnf

核心配置是mysqld部分

port 端口

socket 监听的socket

skip-locking 是否过滤掉lock,不锁

key-buffer-size 索引块缓冲区

(可以通过mysql调优的帖子参考调值大小

www.aminglinux.com/bbs/thread-5758-1-1.html)

max-allowed-packet 允许最大的包

table-open-cache…

另外还可能用到的log-bin、server-id、interactive_timeout、wait timeout、long_query_time、log_slow_queries=/data/mysql/slow.log

3.1 mysql的root密码重置

mysqladmin -uroot password '密码'  将mysql设置一个登录密码

命令 quit 退出mysql模式

重置密码

vim /etc/my.cnf

在mysqld最下面添加

skip-grant

:wq

/etc/init.d/mysqld restart 重启

mysql 登录mysql  不需要密码

use mysql

update user set password=password('新密码')where user='root; 设置了新密码

vim /etc/my.cnf

删去skip-grant

:wq

/etc/init.d/mysqld restart 重启

mysql

mysql -uroot -p新密码  登录mysql

3.2mysql登录

远程登录mysql

mysql -uroot -h292.168.11.160 -P3306 -p密码  3306端口

授权ip

在mysql模式里

grant all on *.* to 'root' @'192.168.11.160' identified by '密码';  授权ip192…登录

select user(); 查看登录当前用户

3.3mysql常用操作-1

库--》表--》行--》字段

show databases; 查看mysql里有哪些库

库information_schema、discuz、mysql、test

use 库名 切换库

select database();查看当前数据库

select version();查看版本

show tables; 查看表

desc 表名; 查看表里面的字段

show create table 表名\G;查看表的创建

create database A;创建库A

use A

create table B('id' int(4), 'name' char(40)) ENGINE=MyISAM  DEFAULT CHARSET=gbk;

'为反引号,创建表B,字段为 id,格式int,长度4位,字段name,格式char,最长40位,engine为myisam,字符集Default charset为gbk

show tables;

desc B;

在表里插入数据

insert into B values(1,'aming');id为1,name改为aming

delete from B where name='aming'; 把name为aming那行删去

truncate table A.B; 清空表B

drop table B;删除表B

drop database A ;删除库A

3.4mysql常用操作2

授权 grant all on 数据库名……

flush privileges ;刷新权限

show processlist;查看数据库里的队列

查看mysql 的错误日志

cd /data/mysql

ls

.err文件就是错误日志

tail .err 查看错误日志

3.5mysql备份与恢复

可以远程备份也可以本地备份

mysqldump -uroot -p密码 discuz >/data/discuz.sql  备份数据库discuz

mysql -uroot -p密码 discuz < /data/discuz.sql恢复备份


文章标题:LAMP架构搭建与优化
转载注明:http://scyanting.com/article/igeeje.html