Linux 服务 LAMP(一)

Linux LAMP
L:linux
A:apache
M:mysql,mariadb
P:php,perl,python
    静态资源:静态内容,客户端从服务器端获得的资源的表现形式和原文件相同;
        http协议的使用过程:客户端首先封装http包发送请求报文,经过网络传输给服务器端用户空间的httpd服务处理,服务器根据请求的需要在磁盘上获取资源然后封装成响应报文返回给客户端;
    动态资源:通常是程序文件,需在服务器端执行之后,将执行结果返回给客户端;客户端收到的依然是静态的;
        http协议的使用过程:客户端首先封装http包发送请求报文,经过网络传输给服务器端用户空间的web服务器程序处理,服务器会判断客户端的请求为什么类型(静态|动态),如果是静态的直接响应返回,如果是动态的(根据文件后缀名判断),则web服务器程序会和相应的服务器(PHP,MYSQL等)程序建立连接,让其去加载客户端请求的资源然后执行,等待其将执行结果返回给自己(APACHE),最后将结果封装成响应报文返回给客户端;
        那么问题来了?客户端请求动态资源时,需要相应的环境执行相应的服务程序然后返回结果,那么web服务程序怎么和它(PHP,MYSQL)交互呢?
        显然,二者之间的交互是基于某种协议来来实现的,它就是CGI(Common Gateway Interface)通用网关接口;在这个交互过程中web服务器成为了客户端,后端相应的服务程序反而成了服务器端;这个CGI就像一个简化的http协议,只在web服务和后端服务之间传输信息;httpd协议可以通过加载cgi_module来将自己扮演成客户端来与后端相应的服务程序交互;
        web服务程序可以解析URL然后web自行去调用可以运行对应动态资源的应用程序的解释器,将它作为自己的子进程,将URL交给子进程,然后从子进程取得结果;但是我们会发现这样做就将解析动态资源的过程也交给web服务程序了,当有一万个请求的到来的时候,web服务程序会生成一万个进程来响应请求,这一万个进程还会生成一万个子进程来处理动态资源,这么大的负载显然是不合理的也不便于分层管理;所以我们可以将前后端的服务程序独立出来:将后端运行动态网站的相应服务程序独立出来,监听在某个套接子上,当客户端请求动态资源时,web服务程序就将信息通过CGI协议传递给后端服务程序,让它去解析然后将结果返回给自己,而不管后端到底是怎么运行的,这种方法叫fastcgi;
        例子:客户端请求PHP动态资源过程:
        客户端封装http请求报文发送给服务器,服务器端web服务程序受到请求,判断资源类型为动态资源,通知(CGI协议)相应的运行环境(PHP程序)调用相应的资源文件(*.PHP),当执行.php资源时需要数据时,会跟数据库交互数据(mysql协议),以达到完成执行产生用户需要的结果,然后返回给http客户端;
    那么问题来了:php程序的代码怎么能理解mysql协议呢?
        这个理解的过程不是由php程序来完成的,而是通过一个以库接口封装的调用,这个库中有相关的代码能够将请求封装成mysql协议理解的请求报文形式来与mysql沟通,还能接收mysql的报文,然后还原成php能够理解的报文形式,以完成交互;一般这个库调用程序是由作为客户端的一方提供的,叫做数据驱动即程序跟某个数据库交互的驱动;如果没有这个驱动,那么就需要使用数据库的程序员自己来编写与mysql可以交互的客户端程序来完成交互数据;
    你可能已经发现了,动态资源请求比静态多了一个步骤,这会使我们请求的资源多样化,但是同时也产生了更多的开销:同相应服务程序建立连接的开销,资源在相应服务程序上执行的开销,执行结果在二者之间传输的开销等;这也是为什么动态站点比静态站点慢的原因;
    安装相关程序:
        Centos    6:
            程序包:
                yum install httpd php php-mysql mysql-server
            服务:
                service httpd start
                service mysqld start
        Centos    7:
            程序包:
                yum install php php-mysql mariadb-server
                Note:php这个包要求httpd使用prefork MPM;
        测试:
            systemctl start httpd
            systemctl start mariadb.service
            vim /var/www/html/index.php
                <?php
                    $link=mysql_connect(‘127.0.0.1’,’mysql’,’’);
                    if ($link)
                        echo “seccess”;
                    else
                        echo “failure”;
                    mysql_close();
                ?>
            关闭防火墙,selinux
                iptables -F
                setenforce 0
            在浏览器端输入地址:127.0.0.1即可;
        使用wordpress建立个人博客:
            1.在官网下载解压包安装;
                tar -xvf wordpress-5.0.tar.gz 
            2.将解压出来的目录复制到网页主目录
                cp -a wprdpress /var/www/html/
            3.使用自带的配置示例作简易配置
                mv wp-config-sample.php  wp-config.php
            4.编辑配置文件
                  /** The name of the database for WordPress */    
                    define('DB_NAME', 'wpdb');
                /** MySQL database username */
                    define('DB_USER', 'wpuser');
                /** MySQL database password */
                    define('DB_PASSWORD', 'wppasswd');
                /** MySQL hostname */
                    define('DB_HOST', 'localhost');
                /** Database Charset to use in creating database tables. */
                    define('DB_CHARSET', 'utf8');
                /** The Database Collate type. Don't change this if in doubt. */
                    define('DB_COLLATE', '');
            5.创建数据库及用户名 密码
                键入mysql进入数据库:
                grant all on wpdb.* to 'wpuser'@'127.0.0.1' identified by 'wppasswd'; 
                grant all on wpdb.* to 'wpuser'@'localhost' identified by 'wppasswd';
                Note:mariadb认为127.0.0.1和localhost是两个地址;
                create datebase wpdb;
                flush privileges;
            6.使用刚才的用户名及密码登陆,查看数据库
                mysql -uwpuser -pwppasswd
                show databases;
            7.在浏览器键入http://192.168.10.1/wordpress即可
        安装phpMyAdmin管理数据库:
            1.首先在官网下载解压
                tar xf phpMyAdmin-4.4.14.1-all-languages.zip 
            2.将解压出来的文件夹复制到网页主目录
                 cp -a phpMyAdmin-4.4.14.1-all-languages /var/www/html/
            3.建立一个软连接为了方便以后升级或更换版本时方便
                cd /var/www/html/
                ln -sv phpMyAdmin-4.4.14.1-all-languager phpMyAdmin
            4.使用自带的配置文件作简易配置
                cd phpMyAdmin 
                mv config.sample.inc.php config.inc.php 
            5.编辑配置文件
                vim congig.inc.php
                     * This is needed for cookie based authentication to encrypt password in
                     * cookie. Needs to be 32 chars long.
                     */
                    $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */   生成一个随即字符串填入单引号内’’;
            6.生成随即字符串
                tr -d 'a-zA-Z0-9' < /dev/urandom | head -30 | md5sum 
                    3b377e5f1a7e7f2ec2cafbe66066143b:将此串字符填入上一步的单引号中;
            7.安装运行phpmyadmin所需要的安装包然后重载httpd
                yum install php-mbstring-5.4.16-46.el7.x86_64
                systemctl reload httpd
            
            8.在了浏览器中键入http://192.168.10.1/phpMyAdmin即可跳出登陆数据库的页面;
            9.为数据库的管理员(root)设置密码
                SET PASSWORD FOR 'root'@'localhost'=PASSWORD('123456');
                SET PASSWORD FOR 'root'@'127.0.0.1'=PASSWORD('123456');
                FLUSH PRIVILEGES;
            10.在第8步输入用户名root以及密码123456即可进入后台管理数据库;
            Note:对于没有数据库基础的童鞋可以使用phpMyAdmin这个图形软件来管理数据库;
    httpd+php的方式:
        modules:将php作为模块加载到httpd中,这样不会产生子进程,也是最简单的部署模式;    
            prefork:libphp5.so
            event  or  worker:libphp5-zts.so
        cgi;使用cgi完成交互;
        fastcgi;相互独立(两个服务器),使用cgi交互;
        请求流程:Client → (http协议) → httpd → (cgi协议) → application server (program file) → mariadb
    php解释器如何与MariaDB交互:
        php解释器本身是不需要与数据库交互的,而是php解释器运行的代码(也就是会使用到数据存储系统的程序)可能需要与数据库交互进而完成工作;
        当一个程序需要与数据库交互时,需要具有相应数据库的驱动;
        存储系统:
            文件系统:文件
                SQL:MariaDB,Oracle,mysql,MSSQL等
                NoSQL:redis,mongodb,hbase等
    php简介:    
        PHP是通用服务器端脚本编程语言,其主要用于web开发,以实现动态web页面,它是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供可一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用。
        Zend Engine是开源的PHP脚本语言的解释器;Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP 代码并将其转换为称作Zend Opcode的二进制格式(类似java的字节码),并将其存储在内存中,加快了执行速度;第二阶段是使用Zend Engine去执行这些转换后的Opcode。
        Opcode:是一种PHP脚本编译后的中间语言,就像JAVA的ByteCode,或者.NET的MSL。PHP执行PHP脚本代码一般会经过如下四个步骤:
            1.Scanning 扫描 (Lexing) --- 将PHP代码转换为语言片段(Tokens)
            2.Parsing 分析 --- 将Tokens转换成简单而有意义的表达式  (区分代码和数据)
            3.Compilation 编译 --- 将表达式编译成Opcode
            4.Execution 执行 --- 顺序执行Opcode,每次一条,从而实现php脚本的功能
        PHP的加速器:
            基于PHP的特殊扩展机制,如Opcode缓存扩展可以将Opcode缓存于php共享内存中,从而可以让同一段代码在后续重复使用执行时跳过编译阶段以提高性能;由此也可以看出,这些加速器并非真正提高了Opcode的运行速度,而是通过分析Opcode后并将它们重新排列以达到快速执行的目的;
            常见的PHP加速器:
                1.APC:Alternative PHP Cache
                    遵循PHP License的开源框架,PHP Opcode缓存加速器;
                2.eAccelerator:源于Turck MMCache,早期的版本包含了一个PHP encoder和PHP loader,目前encoder已经不再支持;
                3.XCache:快速而且稳定的PHP Opcode缓存,经过严格测试且被大量用于生产环境;
                    XCache是作为php的一个模块来安装的,可以通过epel源直接使用yum install php-xcache.x86_64来安装;
                4.Zend Optimizer和Zend Guard Loader:Zend Optimizer并非是一个Opcode加速器它是由Zend Technologies为PHP5.2以及以前的版本提供的一个免费的、闭源的PHP扩展,其能够运行由Zend Guard生成的加密的PHP代码或模糊代码。而Zend Guard Loader 则是专为PHP5.3提供的类似于Zend Optimizer功能的扩展;
                5.UnSphere PhpExpress:NuPhpere的一款开源PHP加速器,它支持装载通过NuPhere PHP Encoder 编码的PHP程序文件,并能够实现对常规PHP文件的执行加速;

注:根据马哥视频做的学习笔记,如有错误欢迎指正;侵删;

原文地址:https://www.cnblogs.com/guowei-Linux/p/11072880.html