你的位置:首页 > 操作系统

[操作系统]LAMP入门总结


LAMP平台搭建(菜鸟入门级)

 

mysql 安装:

  1. (1)二进制安装  二进制安装 ,执行解压配置即可。无须执行三布安装。

          (2)源码编译安装

  •   安装准备工作:

   (1)查看系统配置:#uname -a/i  i386 --(32位)---(i686包)   x86_64--(64)---(64包)

                   #cat /etc/issue

   (2)添加mysql 用户组:useradd -s /sbin/nologin -M mysql

     检查是否创建成功:tail -1 /etc/passwd  

  3.下载 mysql 包

   软件包默认下载存放地址:/usr/local/src/下面

   进入:cd /usr/local/src/

   下载:

   (1)可用:windows 下载好然后上传如:rz 上传.命令安装方式:yum install -lrzsz -y

   (2)利用wget命令下载地址

   http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.73-linux-x86_64-glibc23.tar

  初始化:

   (1)移动解压后的文件到/usr/local/mysql       

    

   #mv mysql-5.1.73-linux-x86_64-glibc23 /usr/local/mysql

   (2)创建数据库存放文件夹

   #mkdir -p /data/mysql

   (3)更改文件夹权限 属主属组

   chown -R mysql:mysql /data/mysql

   (4)定义数据库安装位置(--datadir)及数据库的所属主(--user)

   # ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

   检查:出现两个ok,ok,表示安装成功。或用echo $? 返回值为0表示成功。

   可提前安装一下库文件:如:yum install -y compat-libstdc++-33

 

  1. 配置mysql

  (1)拷贝 mysql配置文件至/etc/下

  cp support-files/my-large.cnf /etc/my.cnf

  (2)拷贝启动脚本文件并修改其属性

   cp support-files/mysql.server /etc/init.d/mysqld

   chmod 755 /etc/init.d/mysqld

 

6.修改启动脚本。

vim /etc/init.d/mysqld更改:

basedir=/usr/local/mysql(安装位置)

datadir=/data/mysql(数据文存放位置)

  7.启动   

  chkconfig --add mysqld

  chkconfig msyqld on

  Service  mysqld start

  查看端口进程: ps -aux|grep mysql   或netstart -lnp |grep mysql

 8.mysql 启动报错日志存在:/data/msyql 下,名通常以.err结尾 可查看。

  apache 安装:

1.下载:

(1)进入:cd /usr/local/src/

wget httpd://www.lishiming.net/data/attachment/forum/httpd-2.2.31.tar.bz2

http://mirrors.cnnic.cn/apache/httpd/httpd-2.2.31.tar.gz   

http://mirrors.cnnic.cn/apache/httpd/httpd-2.2.31.tar.bz2

(2)解压

   tar -xvzf httpd-2.2.31.tar.gz

(3)编译:

提前安装apache必备的库文件。

 yum install -y zlib-devel

 yum install -y pcre pcre-devel apr apr-devel

 

进入:cd  httpd-2.2.31

# cat INSTALL 查看安装过程

# ./configure --prefix=/usr/local/apache2 --with-included-apr --enable-so --enable-defalte=shared --enable-expires=shared --enable-rewrite=shared --with-pcre

 解释:--prefix 指定安装目录

       --enable-so 启用DSO

       --enable-defalte=shared  表示启用动态共享的方式编译deflate 模块。

检查:echo $? 返回值为0 表示安装成功。

make && make install

启动apachectl start 有提示警告信息

去掉配置文件中的Servernamexxx前面的#号重启。

 /usr/local/apache2/bin/apachectl start

 

查看进程:ps -aux |grep httpd

2.(1)查看apache的mpm的工作模式

 /usr/local/apache2/bin/apachectl -l  

 

Httpd -l 查看工作模式如果出现prefork.c,那就是prefork模式,如果结果中含有

worker.c,那就是worker模式。

apache有三种工作模式分别为:prefork模式,worker模式,event模式。2.4默认为event模式。  

  (2)更改apache工作模式: 未安装时可在编译安装时可指定工作模式如:--with-pem=(prefork|worker) 

安装后切换模式:编辑httpd-mpm.conf文件

vi /usr/local/apache2/conf/extra/httpd-mpm.conf

详情参考:https://my.oschina.net/denglz/blog/295880

3.查看开启启动:chkconfig --list |grep httpd 修改chkconfig httpd on 需要提前设置path 如:

 

php编译安装:

 

1.下载php 我下载的5.5

wget http://am1.php.net/distributions/php-5.3.27.tar.gz

 

安装:

(1)前提先安装一些库文件:

yum install -y lib

yum install -y openssl openssl-devel

yum install -y bzip2 bzip2-devel

yum install -y libpeng libpng-devel

yum install -y libpng libpng-devel

yum install -y freetype freetype-devel

yum install -y epel-release

yum install -y libmcrypt-devel

我的报错直接yum install -y libmcrypt*

(2)编译安装:

cd /sur/local/src

[root@localhost src]# cd php-5.5

./configure \

--prefix=/usr/local/php \

--with-apxs2=/usr/local/apache2/bin/apxs \

--with-config-file-path=/usr/local/php/etc  \

--with-mysql=/usr/local/mysql \

--with-lib

--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 \

--disable-ipv6

make && makeinstall

安装成功后检查:echo $?

拷贝配置文件:

(3)cp php.ini-production /usr/local/php/etc/php.ini

 

 Apache 结合php

  

(1)开启apache php脚本解析

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

找到AddType application/x-gzip .gz .tgz在该行下添加

AddType application/x-httpd-php .php

(2)添加php索引,index.php

找到:<IfModule dir_module>

    DirectoryIndex index.html

</IfModule>

在index.html 添加index.php

(2)开启网站访问权限 (没有开启一般回报网站禁止访问显示403错误)找到

<Directory>

Opentions FOllowSymLinks

AllowOverride None

Order dny,allow

Deny from all 改为Allow from all

</Directory>

(3)找到#SserverName www.example.com:80

 修改为#ServerName localhost:80 去掉# 不然会有警告信息。

 

检查配置文件

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

重启apachectl :/usr/local/apache2/bin/apachectl restart

或者重新加载一下

/usr/local/apache2/bin/apachectl graceful

查看apahce加载的模块:

/usr/local/apache2/bin/apachectl -M

由于我们经常用到开启或关闭服务比较麻烦即添加path变量:

vim /etc/profile.d/path.sh 添加:

#!/bin/bash

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

启用mysql 我们用:service mysqld stop

启用启用apahce用:apachectl restart  检查配置文件 apachectl -t

查看apache工作模式可用:apachectl -M

查看是否启动:netstat -lnp |grep httpd

也可用curl localhost 简单测试是否启动

 测试能否解析php

  vim /usr/local/apache2/htdocs/1.php

写入:

<?Php

echo "php解析正常";

?>

保存退出 ,继续测试

curl localhost/1.php

出现php解析正常[root@localhost ~]#

才算解析正常。

 

 实战Discuz

 

(1)下载discuzGBK最新版

 

创建虚拟主机web站点

mkdir /data/www

cd /data/www

wget http://xxxx

unzip:xxx

mv  upload/* ./

rm -rf 删除其他没用文件

 (2)配置第一个虚拟主机

 启用apache虚拟主机配置文件

删除:#DocumentRoot "/usr/local/apache2/htdocs"前面的#号

  (3)配置虚拟主机站点文件

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

找到

 <VirtualHost *:80>

    DocumentRoot "/data/www" 指定站点根目录

ServerName www.test.com   指定服务名

    ServerAlias www.aaa.com   指定访问域名

    #ErrorLog "logs/dummy-host.example.com-error_log"

    #CustomLog "logs/dummy-host.example.com-access_log" common

</VirtualHost>

保持推出

(4)检查配置文件:apachectl -t

  重启apache服务:apachectl restart

 

(5)配置mysql 添加用户 设置密码  创建数据库 mysql密码默认为空用 户为root 配置请看后续

 

(6)在本地windows host文件添加本地解析:192.168.1.xx www.test.com  www.aaa.com

 

(7)查看apache 运行账号:ps -aux|grep httpd 设置站点内文件可写属主属组为 设置为deamon  deamon实在apache配置文件中定义的。

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

浏览器:输入ip 或域名安装即可。

简单lamp平台打架到此结束。

 

Lamp 详解:

 1.Apache 用户认证

某个网站目录只需管理员访问或者为网站后台增加一层安全机制,即:多加一层用户访问机制。当用户访问时需要输入用户名及密码。

 

测试:

(1)在虚拟主机网站目录下创建文件夹,再次文件夹下创建增加用户访问的安全机制如:以本实验样机为例--》

cd /data/www/

mkdir abc

cd abc

cp  /etc/passwd ./12.txt 拷贝passwd 改名为12.txt作为增加安全机制的文件

浏览器访问:http://www.aaa.com/aaa/12.txt 可以显示

增加安全机制:

 (2)修改虚拟主机的配置文件

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

在站点框架中加入:

   <Directory /data/www/abc/>

      AllowOverride AuthConfig

      AuthName "zidingyi"

      AuthType Basic

      AuthUserFile /data/.htpasswd

      require valid-user

    </Directory>

如下所示:

<VirtualHost *:80>

    DocumentRoot "/data/www"

    ServerName www.test.com

    ServerAlias www.aaa.com

    #ErrorLog "logs/dummy-host.example.com-error_log"

    #CustomLog "logs/dummy-host.example.com-access_log" common

   <Directory /data/www/abc/> --》/data/abc/增加安全机制的文件

      AllowOverride AuthConfig

      AuthName "zidingyi" -->安全认证提示框显示文字zidingyi

      AuthType Basic

      AuthUserFile /data/.htpasswd --》指定安全用户认证密码文件/data/.htpasswd

      require valid-user

    </Directory>

</VirtualHost>

保存退出。

(3)创建存放登陆的用户及密码文件

htpasswd -c /data/.htpasswd user1  (data/.htpasswd用户及密码文件,user1 为用户)密码自己输入这里输入:user1user1  

可以查看:cat/data/.htpasswd

创建第二个用户需要:去掉-c 不然会覆盖user1的。

htpasswd /data/.htpasswd user2  密码:user2user2

查看一下:!cat

检查:apachectl -t   

重新加载 或重启:apachectl graceful/restart

打开浏览器测试:成功

2.默认虚拟主机配置

默认第一个虚拟主机,凡是能解析到这台机器的域名(任何域名)只要在配置文件中没有设置,那么都会被访问到这个主机默认站点上来,为了避免这种解析,即:在该默认站点前面新建一个空的站点,让其变成第一个默认站点即:第一个站点。这样就避免解析混乱的情况,即使访问到也是空的就会报错。下面看演示

<VirtualHost *:80>

DocumentRoot "/tmp/123"  -》随便写

ServerName 123.com   -》随便写

</VirtualHost>

<VirtualHost *:80>

    DocumentRoot "/data/www"

    ServerName www.test.com

    ServerAlias www.aaa.com

    #ErrorLog "logs/dummy-host.example.com-error_log"

    #CustomLog "logs/dummy-host.example.com-access_log" common

</VirtualHost>

检查:apachectl -t 报错没有/tmp/123 ,我们创建一下:mkdir /tmp/123 设置:600权限让其不能访问:chmod 600 /tmp/123

测试:http://192.168.1.107 报错403 。http://www.aaa.com 或者www.test.com正常。

 

   3.域名301跳转   

 

1.网站一般会有多个域名,如:www.test.com  www.aaa.com   比如我们的目的让www.aaa.com 跳转到www.test.com 这种行为叫做301 跳转,另外还有301表示永久调转。302为临时跳转。域名跳转一般都是301这样对搜索引擎优化有好处。

域名跳转用得到的是rewrite_module模块 可用apachectl -M 查看。

(1)编辑虚拟主机配置文件

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

 在该站点内加入:

<IfModule mod_rewrite.c>

    RewriteEngine on

    RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]

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

</IfModule>

其中: RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]为跳转的条件,^www.aaa.com$表示以什么开头的域名,RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]表示跳转的执行的语句。域名在这里默认省略的。(.*)$表示域名后面的部分如:http://www.aaa.com/123/12.txt.其中12.txt 就用变量(.*)$表示。www.test.com表示 要跳转到的目的域名。R=301表示状态码301 可以指定为302,L表示结束。

 

(2)多个域名跳转,需要在条件部分添加多个条件即可,且在第一个条件后面添加[OR]表示或者。如下所示:

<IfModule mod_rewrite.c>

    RewriteEngine on

    RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]

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

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

</IfModule>

保存退出测试:输入www.aaa.com 或者www.bbb.com都会跳转到www.test.com上面。

如果不加[OR]就表示且。

测试可用curl -x192.168.107:80 www.aaa.com/adfasdfsadf -I

 4.Apache 日志切割

 (1)开启apache的访问日志功能。

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

去掉下面两行前面的“#”即可打开。

#ErrorLog "logs/dummy-host.example.com-error_log" -》错误日志

#CustomLog "logs/dummy-host.example.com-access_log" common ->访问日志

(2)日志格式名为:common,可以更改,自定义格式。

dummy-host.example.com-error_log 为日志名称可以更改。如可以定义为test.com-access_log,当然可以加入当日时间作为日志名称如:改”dummy-host.example.com-access_log”名为:“test.com-access_%Y%m%d_log”

 (3)日志格式在主配置文件里面修改打开住配置文件

 vim /usr/local/apache2/conf/http.conf 如:红色字体

日志logs/test.com-access_%Y%m%d_log common为相对路径最好写成绝对路径。

如: /usr/local/apache2/logs/test.com-access_%Y%m%d_log common

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined  

格式h 来源ip 。l,u,不存在用减号代替,t时间,r动作如:GET,等,referer :来源地址

combined——》 名称  logformat -》日志格式(一般我们采用这个格式)

LogFormat "%h %l %u %t \"%r\" %>s %b" common

combined——》 名称  logformat -》日志格式

日志位置:日志默认生成位置:/usr/local/apache2/logs/

日志切割:防止日志过大,所以我们给日志做一个归档,每天进行切割,并按照日期命名日志。

 (4)日志切割:在虚拟主机配置文件中在,某站点中

 ErrorLog "logs/dummy-host.example.com-error_log"

CustomLog "logs/dummy-host.example.com-access_log" common

添加切割语句如:

ErrorLog "logs/test.com-error_log"

CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400" combined

Rotatelogs -l (切割)后面/usr/local/apache2/logs/test.com-access_%Y%m%d_log日志路径用绝对路径。86400日志按天分割,即86400秒。 test.com-access_%Y%m%d_log命名加入时间格式。combined 日志格式名。

apachectl restart 查看生成日志格式及内容:

ls /usr/local/apache2/logs

图例:

5.Apche 配置不记录指定文件类型日志

 一个站点访问量特别的大,日志会特别的多,但有一些日志我们可以忽略如访问网站的一些图片日志如:js css 等静态对象日志,这些日志往往是巨量的,而且也没什么用,及配置规则忽略对其的记录。

  (1)在虚拟主机配置文件中日志记录配置行前面加入:

    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

(2)在日志记录配置行后面加入:env=!image-request !表示取反,这样就可以忽略。

 

测试:

 

6.Apache配置静态缓存

 

一个网页里面都还有今天文件如js,css 图片等这些元素,当用户访问一个站点时候,客户端浏览器会缓存图片等文件到本地电脑,目的是为了下次请求时不在去服务器下载,这样就加快了速度,提高了用户体验。但总不能一直缓存下去,所以需要配置静态缓存失效时间:配置如下:

 

在虚拟主机站点框架中加入:

修改前配置文件中显示png 缓存为24小时 验证加载时间:

 

curl -x192.168.1.107:80 'http://www.test.com/static/image/common/logo.png' -I

 

加载需要的时间为86400

当我们改成12小时在验证加载时间:

curl -x192.168.1.107:80 'http://www.test.com/static/image/common/logo.png' -I

 

 时间单位可用:days hours 或者min表示,上面用的是mod_expires模块,也可用mod_headers模块实现。模块需要安装查看已经安装的模块/usr/local/apache2/bin/apachectl -M查看。

 

 7.Apache 配置防盗链

 

 防止别人盗用自己网站图片,引用到其他网站,用户从其他网站直接访问图片产生的带宽开销对于我们来说没有任何意义。

禁止别人引用

(1)在虚拟站点框架中加入:

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

setEnvIfNoCase Referer "^http://.*\.qq\.com"local_ref

<filesmatch "\.(txt|doc|mp3|zip|rar|png|jpg|gif)">

      Order Allow,Deny

      Allow from env=local_ref

</filesmatch>

Referer变量名 referer指该网站上一次点击的网站的路径。

注意:单独图片查看即使将自己的域名加入白名单也不行,因为单独图片的referer为空,所以无法显示,别的网站需要引用该元素必须加入改网站的域名到白名单即可。

设置防盗链必须将自己的郁闷加入白名单,不然自己的网站所有提到元素都无法显示

白名单设置可加入多个如:

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

setEnvIfNoCase Referer "^http://.*\.qq\.com"local_ref

 

8.Apache 访问控制

 如发现一个来源的ip 有一些非法的请求,通过ip日志发现该ip有尝试攻击站点意图,于是可以配置禁用该ip访问此网站

在该站点内加入:

<Directory "/data/www">

      AllowOverride None

      Options None

      order deny, allow

      Allow from all

      Deny from 192.168.1.106

    </directory>

 

先看顺序第四行,先为deny后allow.在执行第一个deny 规则:denyfrom 拒绝192.168.1.1 最后执行allow from all 允许所有 。所以 deny拒绝不生效。

当我们顺序变为Order allow ,deny 时,先允许所有在拒绝192.168.1.106访问。才生效。

图例:

 

先allow 所有后deny 拒绝106 访问。测试用

curl -x192.168.1.106/107:80 -I www.test.com -I

  根据uri限制如网站后台登陆页面地址

如限制后台:admin.php登陆页面只允许1.107网段访问别的不可以。

 

<filesmatch "(.*)admin(.*)">

      Order deny,allow

      Deny from all

      Allow from 192.168.1.107

</filesmatch>

 

测试: curl -x192.168.1.106:80 -I www.test.com/admin.php

       curl -x192.168.1.107:80 -I www.test.com/admin.php

 

 

9.Apache 禁止解析php

 

需求:网站页面用户可以上传文件,如果上传木马文件,一旦解析,就会影响我们的服务器安全,所以需要禁止这个目录下面的访问解析php.

设置:在虚拟主机站点内添加:

<Directory /data/www/data>

php admin flag engine off

    <filesmatch> (.*)php>

            Order deny,allow

            Deny from all

            Allow from 127.0.0.1

    </filesmatch>

</Directory>

蓝色框里的”php admin flag engine off”作用是禁止解析php。只有蓝色部分:/data/www/data目录不可以解析php,但是可以访问,当我们访问时候回直接下载该元素。 而不是网页展示该元素。所以红色部分主要是设置可以访问并展示,而不是下载。

 

10.Apache 禁止user_gent

 

比如:禁止“垃圾搜索引擎抓取访问权限 这样有助于减轻网站负荷,节省资源。可根据日志查看apache user_agent。

设置:在虚拟主机站点框架内添加:在rewrite模块里面添加。

<IfModule mod_rewrite.c>

    RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} ^*Firefox/4.0* [NC,OR]

RewriteCond %{HTTP_USER_AGENT} ^*Tomato Bot/1.0* [NC,]

RewriteRule .* - [F]

</IfModule>

解释说明:

如该站点内有rewrite模块语句,那直接写在里面即可,比如301跳转就使用的是rewrite模块。如下图所示:

<IfModule mod_rewrite.c>

    RewriteEngine on

    RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]

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

RewriteCond %{HTTP_USER_AGENT} ^*Firefox/4.0* [NC,OR]

RewriteCond %{HTTP_USER_AGENT} ^*Tomato Bot/1.0* [NC,]

RewriteRule .* - [F]

</IfModule>

使用rewrite模块限制指定user_agent,“ RewriteRule .* - [F]”表示直接禁止访问,rewritecond 用user_agent来匹配*Firefox/4.0* 表示只要user_agent中包含Firefox/4.0就符合条件,NC表示不区分大小写,OR表示或者,链接下一个条件。例如限制百度搜索引擎可加入:

RewriteCond %{HTTP_USER_AGENT} ^*Baiduspider/2.0* [NC,]来限制。

 

11.Apche 通过rewrite限制某个目

 

限制网站下某个子目录,可用allow 和deny去实现,也可以通过rewrite实现,配置如下:

 在rewrite语句中加入:

<IfModule mod_rewrite.c>

    RewriteEngine on

    RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]

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

RewriteCond %{HTTP_USER_AGENT} ^*Firefox/4.0* [NC,OR]

RewriteCond %{HTTP_USER_AGENT} ^*Tomato Bot/1.0* [NC]

RewriteCond %{REQUEST_URL} ^.*/tmp/* [NC]

RewriteRule .* - [F]

</IfModule>

只要包含、/tmp/字样的请求都被限制,比如下面的请求都会被限制。

www.aaa.com/tmp/12.html  www.aaa.com/tmp/13.html

如果该网站没有rewrite模块语句 只需要新建即可。如:

<IfModule mod_rewrite.c>

    RewriteEngine on

RewriteCond %{REQUEST_URL} ^.*/tmp/* [NC]

RewriteRule .* - [F]

</IfModule>

 

12.php.ini配置文件详解

php配置文件查看:

/usr/local/php/bin/php -i|head

最后一行会显示:

Loaded Configuration File => /usr/local/php/etc/php.ini  配置文件路径粗体标示。

配置php文件:php注释符号为分号;,不是# 切记。

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

1.禁用高风险函数:

(1)第一项:disable_function=默认为空。

可改为:disable_function=eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,charp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dll,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close

 

(2)配置error_log

 

php错误日志功能默认是打开的如:

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

Display_error=off(默认是关闭的,当关闭时,php有错误时候,打开页面是个空白页面,没有任何错误信息提示。当开启on时候,网页错误信息会展示在网站上这样对于用户来说是不合适的。所以默认我们是关闭的。)

;log_errors=on 默认没有开启日志功,所以去掉分号,开启它。log_errors=on

;error_reporting=php_errors.log (开启日志存放路径路径)去掉前面的分号即可。后将日志路径改为绝对路径。如:error_log= /usr/local/php/logs/php_errors.log

 

(3)设定日志格式级别

 

error_reporting = E_ALL & ~E_DEPRECATED 改为:error_reporting = E_ALL & ~E_NOTICE

配置完成后,

测试:创建一个/data/www/forum.php写错。

浏览器测试。

查看错误日志:cat /usr/local/php/logs/php_errors.log

 

(4)配置open_basedir

 

把执行php的用户限定在指定目录下,这样通过权限缩小的方式达到安全的目的。作为一个网站,只需要用户访问到网站代码即可。如果黑客通过其他途径可以访问到比如服务器更目录这样就造成很大范围的安全隐患。所以我们只需要将其限定在网站根目录即:/data/www/tmp下 ,注意这个必须写对,限定好,是网站程序所在的目录。如果写错网站将报错找不到这个目录。查看日志。

配置如下

Open_basedir =/www:/tmp   格式目录直接用:隔开

测试可写成Open_bashedir=/www2:/tmp  

重启apache 网页测试为空白。查看php日志:有报错信息。

 

注意如果我们有多个站点那么php open_basedir 就不能满足我们的需求了,php open_basedir 只能限制一个站点里面的目录 却无法限制多个站点目录。

所以我们可以通过apache 配置apen_basedir来针对多个站点做不同的限制。

配置如下:

可在httpd.conf里面配置或者在每一个虚拟主机配置文件里面做限制

在某站点框架中加入:

php_admin_value open_basedir “/data/www:/tmp/” 来做限制。报错退出注意:apahce里面做限制时,我们就注释掉php中的就行。;open_basedir=/www:/tmp

如图:

测试apache 可写成:open_basedir “/data/www/:/tmp/”

重启apache 网页测试为空白。查看php日志:有报错信息。

 

13.php扩展模块安装

 

查看php加载的模块:

/usr/local/php/bin/php -m  内容包括静态或者动态模块。

如果编译安装以后,发现缺少一个模块。解决方法两种一种:重新编译安装。另一种:动态加载模块。或者php需要添加redis扩展模块。都可以使用这一方法。

 

查看已经动态加载的模块:grep ‘^extension=’/usr/local/php/etc/php.ini 没有,因为我们本身没哟动态加载模块。

 

实验:找到php源码包

cd /usr/local/src/php-5.4.36

cd php-5.4.36/ext(模块目录如果没有 可以下载)

比如编译curl

默认我们按照php是没有加载curl模块的 如查看:/usr/local/php/bin/php -m|grep -i curl

查看没有curl

现在我们动态加载按照curl模块

cd curl 进入curl源码下

/usr/local/php/bin/phpize 生成configure 才能编译

./configure --with-php-config=/usr/local/php/bin/php-config 编译安装固定语法

make && make install

make install 其实就是将curl.so 放到/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525下我们可以查看一下

ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/  发现有curl.so

 

extension目录是存放扩展模块的地方 现在我们查看extensio_dir目录位置

/usr/local/php/bin/php -i|grep extension_dir 查看会显示在

 

发现extension 扩展模块位置恰好是我们make install 产生surl.so文件存放的位置。

其实extension位置我们是可以定义的 在php.ini文件里更改即可,一般不用做修改默认即可。

最后加载模块:

vim /usr/local/php/bin/php.ini

添加extension=curl.so

保存退出。我们查看一下:/usr/local/php/bin/php -m 查看发现已经加载了curl模块。

我们查看一下已经加载的动态模块:

grep ‘^extension=’/usr/local/php/etc/php.ini 发现有curl。

注:如果定义错误。查看php日志即可。

如有的源码在ext下面没哟 ,所以我们需要下载如:memcache源码模块。下载地址:

wget http://www.lishiming.net/data/attachment/forum/memcache-2.2.4.tgz

 

Mysql配置讲解

 

mysql配置

简单总结个人理解可能有误:

博客园收藏:http://www.cnblogs.com/feichexia/archive/2012/11/27/mysqlconf.html

Mysql调优:http://ask.apelearn.com/question/5758

vim /etc/my.cnf

核心配置[mysqld]

1.Prot(端口3306)

2 socket 客户端与服务器之间通信指定的一些套接字文件.

3.skip-locking 避免mysql的外部锁定,减少出错几率增强稳定性。

4.4.Key_buffer_size =256M 索引块的缓冲区,并不是越大越好。参考:http://ask.apelearn.com/question/5758

5.max_allowed_packet = 4M 接受数据包的大小。增加该值十分安全,他是一种预防,不会因为偶尔数据量过大导致内存溢出的预防措施。

6.table_open_cache =256打开数据表缓存存放个数。

7.sort_buffer_size=1M 执行排序使用的缓冲大小。

8.read_buffer_size=2M 随机读取缓存区大小。该参数对应的分配内存是每个连接独享。

9.read_rnd_buffer_size=4M 随读缓冲区大小。

10.mysiam_sort_buffer_size=6M myisam表发生变化时重新排序所需的缓冲。

11.thread_cache_size=8  与cpu核数有关系,一般是cpu核数x2

12.query_cache_size=16M

13.thread_concurrency=8与cpu核数有关系,一般是cpu核数x2

14.wait timeout=8 空闲的连接超时时间默认为:28800s 这个参数依赖于,interactive_timeout =8 两者必须一起使用。

15 long_query_time=1 慢查询日志超时时间

16l.og_slow_queries=/path/to/slow_queries 慢查询日志路径,必须配合long_query_time=1一起使用。

 

Mysql密码重置及登录

 

 

默认mysql没有密码:

登录mysql :/usr/local/mysql/bin/mysql-uroot即可登录 定义了path直接mysql登录即可。

设置mysq密码

未进入mysql之前

[root@bogon /]# mysqladmin -uroot password ‘wangyunlong1992’

如果有密码:

[root@bogon /]# mysqwladmin -uroot -p123456 password ‘wangyunlong1992’

进入mysql之后修改密码

修改root密码:

mysql> use mysql(连接权限数据库)

mysql> update user set password=password('123456') where user='root';

mysql> flush privileges; (刷新权限)

mysql> select user,password from mysql.user; (查看root用户密码)

Mysql> select * from user where user=’root’\G;

 

忘记密码

 

重置:在mysql配置文件中[mysql]字段下添加参数:skip-grant 这样就可以进入数据不用授权了。然后进入修改密码推出,配置文件改成原来即可。

 

登录:

 

本地登录

mysql -uroot -pwangyunlong1992

远程登陆: 

授权:grant all on *.* to 'root'@'192.168.1.104' identified by '123456';

登陆: mysql -uroot -h192.168.1.104 -P3306 -p123456

mysql -uroot -h192.168.1.107 -P3306 -p123456

 

本地多个mysql 登陆可用sock登陆

如:mysql -uroot -S /temp/mysql.sock -p登陆

 Mysql常用操作《1》

 查看数据库

mysql> show databases;

切换到某个库

Mysql> use dedecms

查看当前在那个库下

mysql> select database();

查看当前版本

mysql> select version();

查看当前是那个用户:

 select user();

查看数据几个表

show tables;

查看某一个表字段

desc tb1;

查看字段中的数据

select * from tb1;

查看表是怎么创建的。

show create table tb1;

创建数据库

mysql> create database wangyunlong;

进入数据库创建表tb1

mysql> use wangyunlong;

Database changed

mysql> create table tb1

mysql> create table tb1 (`id` int(4),`name` char(40)) ENGINE=MyISAM DEFAULT CHARSET=gbk; 创建表并插入字段id 和name

可以查看表创建语句,及字段等。

插入数据:

mysql> insert into tb1 values(1,'linux');

mysql> insert into tb1 values(2,'wyl'); 可插入多个

也可单独插入数据:

mysql> insert into tb1 (`id`) values (5);

mysql> insert into tb1 (`name`) values('wangyl');

更新数据

mysql> update tb1 set id=6 where name ='wangy1'; 修改name等于wangl的id值为6

mysql> update tb1 set name = 'wangyun' where id=4; 修改id等于4的name值为wangyun

如果相同id有不同的值则:

update tb1 set name='abc' where id=2 and name is null;

删除一个表中指定得行。

delete form tb1 where name=‘55’;

delete from tb1 where id=6;

清空一个表

truncate table wangyunlong.tb1;

删除一个表

drop table tb1;

删除一个数据库

drop database wangyunlong;

 

常用操作《2》

 

的创建用户并授权:

grant all on tb1.* to 'user1'@'192.168.1.%' identified by '123456';

Grant(授权) tb1 数据库名,.*表示库中所有的表,user1新建的用户 192.168.1.% 允许1网段的所有ip可登录 123456为密码。Ip可以用%匹配所有。

刷新权限:

flush privileges;

查看当前数据库查询队列

show processlist;

查看变量

show variables;

mysql所有变量都可在配置文件里面修改但是需要重启,在线上环境中,最好不要重启,直接在线更改,立即生效。长期生效需要更改改配置文件报存即可。

set global  wait_timeout=288001; 设置变量wait_timeout等288001。

查看过滤变量

show variables like 'wait%'; %表示匹配;like表示过滤。

查看mysql状态 用的比较多

show status;

show status like ‘%running’; %前后都%如:%buffer%

mysql错误日志路径是在etc/init.d/mysqld 中定义的。

修复一个表

repair table tb1.t1; 修复库tb1中的t1表。

 Mysql备份与恢复

 默认数据库备份工具dump

mysqldump -uroot -p123456 tb1 >/data/tb1.sql

备份出tb1 数据库并重定向到data下

 

恢复数据库:

mysql -uroot -p123456 tb1 </data/tb1.sql

单独备份一个表

mysqldump -uroot -p123456 tb1 t1 >2.sql  t1为表,tb1为库。

恢复只需要库名就好。mysql -uroot -p123456 tb1 </data/t1.sql

备份指定字符集:

mysqldump -uroot -p --default-character-set=utf8 t1 >/data/t1.sql.

恢复时候同样指定字符集即可。

mysql -uroot -p --default-character-set=utf8 t1 </data/t1.sql.


 

 

 lamp平台入门初步完结