编译安装lamp (php)

用户账号及权限管理

用户账号:'user'@'host'

user: 用户名

host: 此用户访问mysqld服务时允许通过哪些主机远程创建连接;

host类型:IP、网络地址、主机名、通配符(%和_);

禁止检查主机名:

MySQL在实现mysqld服务器端验证客户端身份时,它会尝试在每一次客户端创建链接时,反解客户端的IP地址为主机名,

并根据主机名检查其权限。所以尽管我们有时候对主机名做了授权,却无法访问,可能是我们对主机名做了授权,

但本机服务器却没法反解对方的IP地址到主机名,所以建议禁止检查主机名

my.cnf, [mysqld]  //MySQL的配置文件配置

skip_name_resolve = yes

创建用户账号:

                     CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];

> create user 'nihao'@'%' identified by 'nihao@nihao';

> select user,host,password from user;   //查看用户

# mysql -unihao -h192.168.108.160 -p   //在192.168.108.169上面进行登陆160的MySQL

 

//此时这里只能看到测试数据库,因为并未对nihao该用户进行授权

删除用户:

                     DROP USER 'username'@'host';

> drop user 'nihao'@'%';

> select user,host,password from user;   //就不再有了

授权:

权限级别:管理权限、数据库、表、字段、存储例程;

GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];

> grant select,delete on testdb.* to 'testuser'@'%' identified by 'testpass';  

# mysql -utestuser -h192.168.108.160 -p   //可以在其他客户端登陆了

> revoke delete on testdb.* from 'testuser'@'%';   //用管理员身份回收testuser用户的权限

把哪个数据库上的哪些表的哪些权限授予给哪个用户

priv_type: ALL [PRIVILEGES]  授于权限

                       db_name.tb_name:

                         *.*: 所有库的所表和所有存储例程;

                         db_name.*: 指定库的所有表;

                         db_name.tb_name: 指定库的指定表;

                         db_name.routine_name:指定库的存储例程;

              查看指定用户获得的授权:

                     SHOW GRANTS FOR 'user'@'host';

> show grants for 'root'@'localhost';  

                      SHOW GRANTS FOR CURRENT_USER;

> show grants for current_user();  //查看当前用户的权限,()可要可不要

              回收授权:

                     REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host';

 

              注意:MariaDB服务进程启动时会读取mysql库中的所有授权表至内存中;

                     (1) GRANT或REVOKE等执行权限操作会保存于表中,MariaDB的服务进程会自动重读授权表;

                     (2) 对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表:

                            mysql> FLUSH PRIVILEGES;  //刷新授权,让mysqld守护进程重读和权限相关的表

LAMP组合的编译安装:

 

httpd+php 结合类型:

1、modules: 把php编译成httpd的DSO对象;

prefork: libphp5

event, worker: libphp5-zts

--enable-maintainer-zts //如果是prefork就不需要了

2、cgi

3、fpm(fastcgi):php作为独立的服务

httpd对fastcgi协议的支持:

httpd-2.2: 需要额外安装fcgi模块;

httpd-2.4: 自带fcgi模块;

安装次序:

httpd, MariaDB, php   

1、首先安装httpd,之前已经写过安装步骤,不再赘述

https://www.cnblogs.com/hanshanxiaoheshang/p/9178402.html

这里注意是 --with-mpm=enent

2、安装mariadb

https://www.cnblogs.com/hanshanxiaoheshang/p/9193958.html

3、安装PHP-5.4.40   //下载页面http://mirrors.sohu.com/php/

# tar xf php-5.4.40.tar.gz 

# cd php-5.4.40

编译安装php报错PHP configure: error: mcrypt.h not found. Please reinstall libmcrypt. 解决办法:http://www.21yunwei.com/archives/2511

编译安装php报错PHP configure: error: mcrypt.h not found. Please reinstall libmcrypt. 原因以及解决办法:
原因centos源不能安装libmcrypt-devel,由于版权的原因没有自带mcrypt的包。有

方法1:
1、安装第三方yum源
可以scp将阿里云的文件CentOS-Base.repo直接拷贝过来。
2、使用yum命令安装
yum  install  php-mcrypt  libmcrypt  libmcrypt-devel
     

方法2:
使用php mcrypt 前必须先安装Libmcrypt
libmcrypt源码安装方法:

wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz
tar -zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure  –prefix=/usr/local
make
make install

再去编译安装就可以了。如有其他报错,请根据具体报错解决。

转载:21运维 » 编译安装php报错PHP configure: error: mcrypt.h not found. Please reinstall libmcrypt. 解决办法

# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2  --enable-maintainer-zts

#hash  可查看启动的程序

#

 

 

三、编译安装php-5.4.26  这里安装的5.4.40

1、解决依赖关系:

请配置好yum源(系统安装源及epel源)后执行如下命令:
# yum -y groupinstall "Desktop Platform Development"
# yum -y install bzip2-devel libmcrypt-devel libxml2-devel


2、编译安装php-5.4.26

首先下载源码包至本地目录,下载位置ftp://172.16.0.1/pub/Sources/new_lamp。

# tar xf php-5.4.26.tar.bz2
# cd php-5.4.26
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts


说明:
1、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
2、如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。

# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

# make
# make test
# make intall

为php提供配置文件:
# cp php.ini-production /etc/php.ini

3、 编辑apache配置文件httpd.conf,以apache支持php


# vim /etc/httpd/httpd.conf
1、添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

2、定位至DirectoryIndex index.html
修改为:
DirectoryIndex index.php index.html

而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。

重启httpd时会出现错误,是pidfile的问题

#vim /etc/httpd24/httpd.conf

# ls /usr/local/apache/logs/  在这个目录下

#vim /etc/rc.d/init.d/httpd24   //修改启动脚本

#killall httpd

#service httpd24 start

#service httpd24 restart

测试页面index.php示例如下:
<?php
$link = mysql_connect('127.0.0.1','root','mageedu');
if ($link)
echo "Success...";
else
echo "Failure...";

mysql_close();
?>

安装phpMyAdmin

#unzip phpMyAdmin-4.4.1.1-all-languages.zip

# mv phpMyAdmin-4.4.1.1-all-languages /usr/local/apache/htdocs/pma

#cd /usr/local/apache/htdocs/pma

# cp config.sample.inc.php config.inc.php 

#vim config.inc.php    //添加随机密码

  在浏览器中输入:http://192.168.108.160/pma/index.php

# ab -c 10 -n 10 http://192.168.108.160/pma/index.php //进行压力测试

 

四、安装xcache,为php加速: 

1、安装

下载页面:https://xcache.lighttpd.net/pub/Releases/3.2.0/
# tar xf xcache-3.0.3.tar.gz
# cd xcache-3.0.3
# /usr/local/php/bin/phpize  
# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config

--enable-xcache  //启用xcache模块

 --with-php-config=/usr/local/php/bin/php-config  //把xcache编译成php的模块,一般称为扩展
# make && make install

安装结束时,会出现类似如下行:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/

2、编辑php.ini,整合php和xcache:

首先将xcache提供的样例配置导入php.ini
# mkdir /etc/php.d
# cp xcache.ini /etc/php.d

说明:xcache.ini文件在xcache的源码目录中。

接下来编辑/etc/php.d/xcache.ini,找到zend_extension开头的行,修改为如下行:
zend_extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so

注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。

                # ab -c 10 -n 10 http://192.168.108.160/pma/index.php  //进行压力测试,有xcache就会非常明显

# ab -c 100 -n 1000 http://192.168.108.160/pma/index.php

 

五、启用服务器状态

mod_status模块可以让管理员查看服务器的执行状态,它通过一个HTML页面展示了当前服务器的统计数据。这些数据通常包括但不限于:
(1) 处于工作状态的worker进程数;
(2) 空闲状态的worker进程数;
(3) 每个worker的状态,包括此worker已经响应的请求数,及由此worker发送的内容的字节数;
(4) 当前服务器总共发送的字节数;
(5) 服务器自上次启动或重启以来至当前的时长;
(6) 平均每秒钟响应的请求数、平均每秒钟发送的字节数、平均每个请求所请求内容的字节数;

启用状态页面的方法很简单,只需要在主配置文件中添加如下内容即可:
<Location /server-status>
SetHandler server-status
Require all granted
</Location>

需要提醒的是,这里的状态信息不应该被所有人随意访问,因此,应该限制仅允许某些特定地址的客户端查看。比如使用Require ip 172.16.0.0/16来限制仅允许指定网段的主机查看此页面。


ab测试示例:未启用xcache和启用xcache后,对phpMyAdmin的主而面进行请求测试的结果如下所示:

测试环境:
主机CPU:Core 2 Duo i3-3210
内存大小:734MB

Requests per second: 36.38 [#/sec] (mean)
Time per request: 274.871 [ms] (mean)
Time per request: 27.487 [ms] (mean, across all concurrent requests)


Requests per second: 144.23 [#/sec] (mean)
Time per request: 69.332 [ms] (mean)
Time per request: 6.933 [ms] (mean, across all concurrent requests)

可参考https://blog.csdn.net/reblue520/article/details/50405148

第二部分、配置apache-2.4.9以fpm方式的php-5.4.26

一、apache、MySQL的安装与前一部分相同;请根据其进行安装;

二、编译安装php-5.4.26

1、解决依赖关系:

请配置好yum源(可以是本地系统光盘)后执行如下命令:
# yum -y groupinstall "X Software Development"

如果想让编译的php支持mcrypt扩展,此处还需要下载ftp://172.16.0.1/pub/Sources/ngnix目录中的如下两个rpm包并安装之:
libmcrypt-2.5.7-5.el5.i386.rpm
libmcrypt-devel-2.5.7-5.el5.i386.rpm
mhash-0.9.9-1.el5.centos.i386.rpm
mhash-devel-0.9.9-1.el5.centos.i386.rpm

2、编译安装php-5.4.26

首先下载源码包至本地目录,下载位置ftp://172.16.0.1/pub/Sources/new_lamp。

# tar xf php-5.4.26.tar.bz2
# cd php-5.4.26
# ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2

修改后:

# ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc/php5/ --with-config-file-scan-dir=/etc/php5.d --with-bz2


说明:如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

# make -j 4 && make intall   //开四个线程

为php提供配置文件:

# cp php.ini-production /etc/php.ini

3、配置php-fpm


为php-fpm提供SysV init脚本,并将其添加至服务列表:
# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on

为php-fpm提供配置文件:
# cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf

编辑php-fpm的配置文件:
# vim /usr/local/php5/etc/php-fpm.conf
配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8

#/usr/local/php5/etc/php-fpm.conf
pid = /usr/local/php5/var/run/php-fpm.pid

接下来就可以启动php-fpm了:
# service php-fpm start

使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):
# ps aux | grep php-fpm

默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。
# netstat -tnlp | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 689/php-fpm

三、配置httpd-2.4.9

1、启用httpd的相关模块

在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so


2、配置虚拟主机支持使用fcgi

在相应的虚拟主机中添加类似如下两行。
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

在相应的虚拟主机中以反向代理的方式告诉用户,所有对以.php格式结尾的URL请求,

都基于fcgi这个协议送给(127.0.0.1)这个服务器上的9000端口,

^/(.*.php)$:以任何内容开始,以.php格式结尾的所有内容

/PATH/TO/DOCUMENT_ROOT:表示PHP网页文件的存放位置

$1:表示^/(.*.php)$这个模式中所匹配到的页面资源路径,这是做表达式的后向引用的

  

http://www.magedu.com/admin/index.php

/web/host1/admin/index.php
fcgi://127.0.0.1:9000/web/hosts/admin/index.php


例如:
<VirtualHost *:80>
DocumentRoot "/www/magedu.com"
ServerName magedu.com
ServerAlias www.magedu.com

ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/www/magedu.com/$1

<Directory "/www/magedu.com">
Options none
AllowOverride none
Require all granted
</Directory>
</VirtualHost>

ProxyRequests Off:关闭正向代理
ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

3、编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页

# vim /etc/httpd/httpd.conf

1、启用两行

 LoadModule proxy_module modules/mod_proxy.so

 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so


2、添加如下二行

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

3、定位至DirectoryIndex index.html

修改为:
DirectoryIndex index.php index.html

补充:Apache httpd 2.4以前的版本中,要么把PHP作为Apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现。

4、这里不使用虚拟主机,而使用中心主机,因此加上:把php页面的请求都转发给fpm服务器

 ProxyRequests Off    关闭正向代理

ProxyPassMatch ^/(.*.php)$ fcgi://192.168.108.160:9000/usr    /local/apache/htdocs$1

 

注:如果重启httpd时出现这种情况,就在:

#vim /etc/httpd24/httpd.conf

 ServerName www.example.com:80   //去掉前面的注释符号#

 

CentOS 7上实现LAMP:
解决依赖关系:
yum -y install @"Development Tools" libxml2-devel mariadb-devel bzip2-devel

总结:LAMP
httpd
mariab, mysql
php

LNMMP

原文地址:https://www.cnblogs.com/hanshanxiaoheshang/p/9221072.html