apache / Web Service

1.9 LAMP(YUM)

 

WEB的2种资源类型:
静态资源:原始数据的形式与响应内容一致;
动态资源:原始数据形式通常为程序文件,程序文件需要在服务器端执行后,将执行结果返回给客户端;

客户端技术:javascript;
服务器端技术:php,jsp;

1、CGI简介
==================

CGI:Common  Gateway  Interface,通用网关接口;
CGI可以让一个客户端从网页浏览器向执行在服务器上的程序传输数据;CGI描述了客户端与服务器程序之间数据传输的一种标准;

CGI工作原理
 1> 浏览器通过HTML表单或超链接请求指向一个CGI应用程序的URL;
 2> 服务器收发到请求;
 3> 服务器执行指定CGI应用程序;
 4> CGI应用程序执行所需要的操作,通常是基于浏览者输入的内容;
 5> CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页);
 6> 网络服务器把结果返回到浏览器中;

CGI环境变量
 SERVER_NAME:运行CGI序为机器名或IP地址;
 SERVER_INTERFACE:WWW服务器的类型,如:CERN型或NCSA型;
 SERVER_PROTOCOL:通信协议,应当是HTTP/1.0;
 SERVER_PORT:TCP端口,一般说来web端口是80;
 HTTP_ACCEPT:HTTP定义的浏览器能够接受的数据类型;
 HTTP_REFERER:发送表单的文件URL(并非所有的浏览器都传送这一变量);
 HTTP_USER-AGENT:发送表单的浏览的有关信息;
 GETWAY_INTERFACE:CGI程序的版本,在UNIX下为 CGI/1.1;
 PATH_TRANSLATED:PATH_INFO中包含的实际路径名;
 PATH_INFO:浏览器用GET方式发送数据时的附加路径;
 SCRIPT_NAME:CGI程序的路径名;
 QUERY_STRING:表单输入的数据,URL中问号后的内容;
 REMOTE_HOST:发送程序的主机名,不能确定该值;
 REMOTE_ADDR:发送程序的机器的IP地址;
 REMOTE_USER:发送程序的人名;
 CONTENT_TYPE:POST发送,一般为application/xwww-form-urlencoded;
 CONTENT_LENGTH:POST方法输入的数据的字节数;

2、PHP简介:
================

PHP(外文名:PHP: Hypertext  Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言;
   语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域;
   PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页;
   用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完  全生成HTML标记的CGI要高许多;
  PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快;

PHP技术应用:伪静态、静态页面生成、数据库缓存、过程缓存、div+cssw3c标准、大负荷、分布式、支持MVC模型、Smarty模板引擎;

PHP  Zend  Engine:
————————
Zend Engine 是开源的、PHP脚本语言的解释器,由以色列理工学院(Technlon)的学生Andi Gutmans和Zeev Suraski所开发;

PHP的Opcode:
——————
Opcode是一种PHP脚本编译后的中间语言,就像JAVA的ByteCode或者.NET的MSL;
PHP执行PHP脚本代码一般经过如下4个步骤:
 1> scanning(lexing):将PHP代码转换为语言片段(Tokens);
 2> parsing:将Tokens转换成简单而有意义的表达式;
 3> compilation:将表达式编译成Opcodes;
 4> execution:顺次执行Opcodes,每次一条,从而实现PHP脚本的功能;

PHP的加速器
————————-
基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode焕春与PHP的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段一提高性能;

PHP常见加速器
1>zend  optimizer和zend  Guard  Loader
商业软件;
2>OPcache
OPcache 通过将PHP脚本预编译的字节码存储到共享内存中来提升PHP的性能,存储预编译字节码的好处就是省去了每次加载和解析PHP脚本的开销;
PHP 5.5.0 及后续版本中已经绑定了OPcache扩展;

PHP7.0.30源码包的目录结构:

php-7.0.30
├── acinclude.m4
├── aclocal.m4
├── appveyor
├── build  ---------------> 放置跟源码编译相关的文件;
├── buildconf
├── buildconf.bat
├── CODING_STANDARDS
├── config.guess
├── config.sub
├── configure
├── configure.in
├── CONTRIBUTING.md
├── CREDITS
├── ext  -----------------> 官方的扩展目录,包括了绝大多数PHP函数的定义和实现,如array,pdo,sql等;
├── EXTENSIONS
├── footer
├── generated_lists
├── genfiles
├── header
├── INSTALL
├── install-sh
├── LICENSE
├── ltmain.sh
├── main    --------------> PHP最核心的文件,是实现PHP的基础设施
├── makedist
├── Makefile.frag
├── Makefile.gcov
├── Makefile.global
├── makerpm
├── missing
├── mkinstalldirs
├── netware
├── NEWS
├── pear    ------------------> PHP扩展与应用仓库,包含PEAR的核心文件;
├── php7.spec.in
├── php.gif
├── php.ini-development
├── php.ini-production
├── README.EXT_SKEL
├── README.GIT-RULES
├── README.input_filter
├── README.MAILINGLIST_RULES
├── README.md
├── README.namespaces
├── README.NEW-OUTPUT-API
├── README.PARAMETER_PARSING_API
├── README.REDIST.BINS
├── README.RELEASE_PROCESS
├── README.SELF-CONTAINED-EXTENSIONS
├── README.STREAMS
├── README.SUBMITTING_PATCH
├── README.TESTING
├── README.TESTING2
├── README.UNIX-BUILD-SYSTEM
├── README.WIN32-BUILD-SYSTEM
├── run-tests.php
├── sapi    ---------------------> 各种服务器抽象层的代码,例如Apache的mod_php,cgi,fastcgi以及fpm等接口;
├── scripts
├── server-tests-config.php
├── server-tests.php
├── snapshot
├── stamp-h.in
├── stub.c
├── tests   ------------------> PHP的测试脚本集合,包含PHP各项功能的测试文件;
├── travis
├── TSRM    ------------------> 线程安全资源管理器;PHP的线程安全是构建在TSRM库之上的,PHP实现中常见的*G宏通常是对TSRM的封装;
├── UPGRADING
├── UPGRADING.INTERNALS
├── vcsclean
├── win32  ------------------> Windows平台相关的实现;
└── Zend   ------------------> zend引擎的实现目录,主要实现语言运行环境;比如脚本的词法语法解析,opcode的执行以及扩展机制的实现等;

 

3、YUM方式安装LAMP:

1>安装Apache:
~]# yum  -y  install  httpd  httpd-manual  httpd-tools

2>安装PHP:
~]# yum  install  epel-release
~]# rpm  -Uvh  https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
~]# yum  -y  install  php70w-pdo  php70w-fpm  php70w-opcache  php70w-common  php70w-devel  php70w-gd  php70w-mbstring  php70w-mcrypt  php70w-mysqlnd  php70w-pear  php70w-pecl-apcu  php70w-cli  php70w-process  php70w-xml

查看PHP安装后产生的目录文件
[root@localhost  httpd]# rpm  -ql  php70w-fpm
/etc/logrotate.d/php-fpm
/etc/php-fpm.conf
/etc/php-fpm.d
/etc/php-fpm.d/www.conf
/etc/sysconfig/php-fpm
/usr/lib/systemd/system/php-fpm.service
/usr/lib/tmpfiles.d/php-fpm.conf
/usr/sbin/php-fpm
/usr/share/doc/php70w-fpm-7.0.30
/usr/share/doc/php70w-fpm-7.0.30/fpm_LICENSE
/usr/share/doc/php70w-fpm-7.0.30/php-fpm.conf.default
/usr/share/fpm
/usr/share/fpm/status.html
/usr/share/man/man8/php-fpm.8.gz
/var/log/php-fpm
/var/run/php-fpm

[root@lucifer ~]# rpm  -ql  php70w-opcache
/etc/php-zts.d/opcache-default.blacklist
/etc/php-zts.d/opcache.ini
/etc/php.d/opcache-default.blacklist
/etc/php.d/opcache.ini
/usr/lib64/php-zts/modules/opcache.so
/usr/lib64/php/modules/opcache.so

修改/etc/httpd/conf.d/php.conf,取消注释;
#AddType   application/x-httpd-php-source .phps
AddType   application/x-httpd-php-source .phps

创建测试PHPinfo信息页(/var/www/html/):

~]# vim /var/www/html/phpinfo.php
<?php
phpinfo();
?>

3>启动httpd、php-fpm:
~]# systemctl  start  httpd
~]# systemctl  start  php-fpm

4>浏览器测试PHPinfo:http://192.168.206.88/phpinfo.php

或者使用’elinks’命令:

[root@localhost ~]# elinks  –dump  http://192.168.206.66/phpinfo.php | more

5>安装MariaDB:
~]# vim  /etc/yum.repos.d/MariaDB.repo

# MariaDB 10.1 CentOS repository list - created 2018-06-04 23:53 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

~]# yum  -y  install  MariaDB-server  MariaDB-client

 Package                         Arch                    Version                                     Repository                Size
====================================================================================================================================
Installing:
 MariaDB-client                  x86_64                  10.1.33-1.el7.centos                        mariadb                   39 M
     replacing  mariadb.x86_64 1:5.5.56-2.el7
 MariaDB-server                  x86_64                  10.1.33-1.el7.centos                        mariadb                  104 M
     replacing  mariadb-server.x86_64 1:5.5.56-2.el7
 MariaDB-shared                  x86_64                  10.1.33-1.el7.centos                        mariadb                  1.3 M
     replacing  mariadb-libs.x86_64 1:5.5.56-2.el7
Installing for dependencies:
 MariaDB-common                  x86_64                  10.1.33-1.el7.centos                        mariadb                  123 k
 galera                          x86_64                  25.3.23-1.rhel7.el7.centos                  mariadb                  8.0 M
 jemalloc                        x86_64                  3.6.0-1.el7                                 epel                     105 k

说明:
MariaDB-server程序包提供的命令:mysqld,mysqld_safe,mysqld_multi;
MariaDB-client程序包提供的命令:mysql,mysqldump,mysqladmin;

关闭mariadb把IP地址解析成主机名:
~]# vim  /etc/my.cnf.d/server.cnf
[mysqld]
skip-name-resolve=ON
innodb_file_per_table=ON

启动mariadb:
~]# systemctl  start  mariadb

测试PHP连接mariadb:

<?php
  $conn = mysqli_connect('127.0.0.1','root','');
  if ($conn)
    echo "OK"
    else
    	echo "FAIL"
?>

浏览器测试php连接mariadb:http://192.168.206.88/php-mysql.php

或者使用’elinks’命令:

[root@localhost ~]# elinks  –dump  http://192.168.206.66/php-mysql.php
OK
[root@localhost ~]#

 

4、安装phpMyAdmin-4.8.1-all-languages.zip注意事项:

1> 此版本对PHP和mysql的版本要求:
Future  version  compatible  with  PHP  5.5  to  7.2  and  MySQL  5.5  and  newer.

2> 软件依赖包:
mbstring
~]# yum  -y  install  php70w-mbstring

解压程序包phpMyAdmin-4.8.1-all-languages.zip后,需要做如下操作:
3> 在解压后的”phpMyAdmin-4.8.1-all-languages”目录下重命名config文件
~]# cp  config.sample.inc.php  config.inc.php

4> 编辑文件”config.inc.php”,添加随机数
生成随机数:
[root@localhost wordpress]# openssl  rand  -base64  20
GSZ0xC1vlMtReG1e/Luv8pgMSbI=
[root@localhost wordpress]#

~]# vim  config.inc.php
$cfg[‘blowfish_secret’] = ‘GSZ0xC1vlMtReG1e/Luv8pgMSbI‘; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

***************************************************************

 

5、下面仅供测试时使用:
——————–

如果fpm的status页面输出的URL为”/status”,测试接口的输出位置为”/ping”,
则可以在httpd.conf或者虚拟主机配置文件中添加如下URL跳转:

ProxyPassMatch  ^/(status|ping)$   fcgi://192.168.206.99:9000/$1

本例采用虚拟主机:

Listen 8080
DirectoryIndex index.php
<VirtualHost *:8080>
  ServerName www.abc.com
  DocumentRoot /data/web1
  ProxyRequests Off
  ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.206.99:9000/data/php/$1
  ProxyPassMatch ^/(status|ping)$ fcgi://192.168.206.99:9000/$1
  <Directory "/data/web1">
    Options None
    AllowOverride None
    Require all granted
  </Directory>
</VirtualHost>

注意,首先要在’/etc/php-fpm.d/www.conf’文件中开启如下2项配置:

pm.status_path = /status
ping.path = /ping

http://192.168.206.55:8080/status          显示php-fpm主控进程的运行状态信息:

pool:                 www
process manager:      dynamic   进程是动态管理机制;
start time:           07/Jun/2018:07:52:45 -0400
start since:          514
accepted conn:        14
listen queue:         0         等待队列长度;
max listen queue:     0         最大请求队列长度;
listen queue len:     128       监听队列;
idle processes:       4         空闲进程数;
active processes:     1         活动进程数;
total processes:      5         总共开启的进程数;
max active processes: 1
max children reached: 0
slow requests:        0

http://192.168.206.55:8080/status?full                 显示php-fpm主控进程以及子进程的运行状态信息:

http://192.168.206.55:8080/status?xml                xml格式显示php-fpm主控进程的运行状态信息:

<status>
  <pool>www</pool>
  <process-manager>dynamic</process-manager>
  <start-time>1528372365</start-time>
  <start-since>845</start-since>
  <accepted-conn>22</accepted-conn>
  <listen-queue>0</listen-queue>
  <max-listen-queue>0</max-listen-queue>
  <listen-queue-len>128</listen-queue-len>
  <idle-processes>4</idle-processes>
  <active-processes>1</active-processes>
  <total-processes>5</total-processes>
  <max-active-processes>1</max-active-processes>
  <max-children-reached>0</max-children-reached>
  <slow-requests>0</slow-requests>
</status>

 

Leave a Reply

Your email address will not be published. Required fields are marked *