• 编译安装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

  • 相关阅读:
    STL的移动算法
    mysql insert和前台显示乱码
    垃圾回收算法简单介绍——JVM读书笔记&lt;二&gt;
    UVA
    读取系统执行状态的shell脚本
    【web 回车】web项目 注册或登录页面 回车登录无效,解决方案
    【maven】maven项目移除Maven Dependencies后如何再添加进去
    【web.xml】报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    【shiro】关于shiro匹配URL的小用法
    【Sets】使用Google Guava工程中Sets工具包,实现集合的并集/交集/补集/差集
  • 原文地址:https://www.cnblogs.com/hanshanxiaoheshang/p/9221072.html
Copyright © 2020-2023  润新知