一,概念

CGI:

CGI全称是通用网关接口(Common Gateway Interface),是外部应用程序与与服务器之间的接口标准,是在CGI程序和web服务器之间传递信息的规程

CGI是一段程序,运行在服务器上。

CGI可以用任意语言编写,主要这种语言具有标准输入、输出和环境变量

原理:

每当客户请求CGI的时候,WEB服务器就请求操作系统读取配置文件,生成一个新的解释器进程(如php-cgi.exe),当CGI进程完成当前任务结束后,web服务器就会杀死这个进程

FastCGI:

一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口,

接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

原理:

  1. Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)

  2. FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。

  3. 当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

  4. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。

PHP-CGI(cgi的php实现):

PHP-CGI是php自带的Fast-CGI管理器

不足:

  1. php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。

  2. 直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)

PHP-FPM(FastCgi的php实现):

特点:

  1. PHP-FPM是一个PHP FastCGI的管理器,他是能够调度php-cgi进程的程序。

  2. 修改php.ini之后,php-cgi进程的确没办法平滑重启,但php-fpm对此的应对方法是新的进程用新的配置,已经存在的进程让按照之前的配置执行到结束。用这种方式进行平滑过渡。

  3. PHP-fpm就是针对于PHP的,Fastcgi的一种实现,他负责管理一个进程池,来处理来自Web服务器的请求。目前,PHP-fpm是内置于PHP的

PHP-FPM 进程管理器有两种进程组成,一个 Master 进程和多个 Worker 进程。Master 进程负责监听端口,接收来自 Web 服务器的请求,然后指派具体的 Worker 进程处理请求;worker 进程则一般有多个 (依据配置决定进程数),每个进程内部都嵌入了一个 PHP 解释器,用来执行 PHP 代码

二,基础知识

1,http与php结合方式

http与php结合的方式:modules 和FastCGI

centos7:

modules: httpd, php, php-mysql, mariadb-server

FastCGI: httpd, php-fpm, php-mysql, mariadb-server

centos6:

modules: :httpd, php, php-mysql, mysql-server

FastCGI:默认不支持

php与数据库连接的三种方式:

rpm -ql php-mysql

/usr/lib64/php/modules/mysql.so

<?php
$conn = mysql_connect('mysqlserver','username','password');
if ($conn)
echo "OK";
else
echo "Failure";
#echo mysql_error();
mysql_close();
?>

/usr/lib64/php/modules/mysqli.so

<?php
$mysqli=new mysqli("mysqlserver","username","password");
if(mysqli_connect_errno()){
echo "Failure";
$mysqli=null;
exit;
}
echo "OK";
$mysqli->close();
?>

/usr/lib64/php/modules/pdo_mysql.so

<?php
$dsn='mysql:host=mysqlhost;dbname=test';
$username=‘root';
$passwd=‘cnedu';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>
2,phpmyadmin

yum -y install httpd mariadb-server php php-mysql 启动程序

创建登陆数据库的用户

grant all on . to 'test'@'127.0.0.1' identified by "redhat";

yum -y install php-mbstring

tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.xz cd /var/www/html

cd phpadmin/

cp config.sample.inc.php config.inc.php并修改:

$cfg['blowfish_secret'] = 'wwwww'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

systemctl reload httpd

访问首页 ip/phpadmin/index.php

2,安装wordpress

创建数据库用户

解压软件至网站根目录的文件夹,访问ip/wordpress/

填写数据库连接信息,根据提示修改配置文件 vim wp-config.php ,填写站点信息并登陆使用。

3,DIscuz!

解压软件 unzip Discuz_X3.3_SC_UTF8.zip 转移upload下的文件到指定根目录

为目录加写权限 setfacl -R -m u:apache:rwx upload/ 安装成功后去除权限

访问ip/upload/install/

4,加速器 XCache

机制:

基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode 缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译 阶段以提高性能。这些加速器并非真正提高了opcode的运行速度,而仅是通过 分析opcode后并将它们重新排列以达到快速执行的目的

yum -y install php-xcache 或

源码 解压

yum -y install php-devel

$ phpize --clean && phpize ​ ./configure --enable-xcache --enable... ​ $ make ​ # make install

拷贝模块至php模块目录中

cp /data/xcache-3.2.0/modules/xcache.so /usr/lib64/php/modules/

引用模块

cp /data/xcache-3.2.0/xcache.ini   /etc/php.d/

将动态页面缓存为静态

三,安装

1,yum 安装

yum -y install php-fpm php-mysql mariadb-server httpd

在主配置文件后添加(/etc/httpd/conf/httpd.conf)

proxyrequests off proxypassmatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1

修改:DirectoryIndex index.php

在根目录下创建测试文件:

<?php $conn = mysql_connect('192.168.36.72','yon','redhat'); if ( $conn ) echo "OK"; else echo "faiiooal"; mysql_close();

?>

<?php

phpinfo();

?>

注意:需关闭firewalld 及selinux

2,源码编译

1)源码准备 带有apr apr-util,否则报错

configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/

apr-1.7.0.tar.gz

apr-util-1.6.1.tar.gz

httpd-2.4.39.tar.bz2

mariadb-10.2.23-linux-x86_64.tar.gz

php-7.3.2.tar.xz

wordpress-5.0.3-zh_CN.tar.gz

2)安装相关包组

yum install gcc glibc pcre-devel openssl-devel expat-devel libxml2-devel bzip2-devel libmcrypt-devel

编译httpd 过程:

编译httpd

tar xf apr-1.7.0.tar.gz

tar xf apr-util-1.6.1.tar.gz

tar xf httpd-2.4.39.tar.bz2

mv apr-1.7.0    httpd-2.4.39/srclib/apr

mv apr-util-1.6.1   httpd-2.4.39/srclib/apr-util

cd httpd-2.4.39/

# ./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork --with-included-apr

make && make install

useradd -r -s /sbin/nologin apache

echo 'PATH=/app/httpd24/bin:$PATH' > /etc/profile.d/lamp.sh

vim /app/httpd24/conf/httpd.conf

user apache

group apache

编译php7.x

./configure --prefix=/app/php --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-mbstring --enable-xml --enable-sockets --enable-fpm --enable-maintainer-zts --disable-fileinfo make -j 4 && make install

cd /app/php

cp php-fpm.conf.default php-fpm.conf

cp php-fpm.d/www.conf.default php-fpm.d/www.conf

service php-fpm start

修改httpd配置文件支持fpm

vim /app/httpd24/conf/httpd.conf 取消下面两行的注释 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so 修改下面行

<IfModuledir_module>

DirectoryIndex index.php index.html

</ifModule>

加下面四行

AddType application/x-httpd-php.php

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

ProxyRequestsOff ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1

安装二进制数据库:

tar -xf mariadb-10.2.23-linux-x86_64.tar.gz -C /usr/local/

cd /usr/local

ln -s mariadb-10.2.23-linux-x86_64/ mysql

chown -R root.root /usr/local/mysql/

useradd -r -s /sbin/nologin mysql

mkdir -pv /data/mysql chown mysql.mysql /data/mysql

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

mkdir /etc/mysql/

cp support-files/my-huge.cnf /etc/mysql/my.cnf

vim /etc/mysql/my.cnf

datadir=/data/mysql

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

chkconfig --add mysqld

service mysqld start

echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

. /etc/profile.d/mysql.sh

# 创建wordpress 数据库

CREATE DATABASE wpdb

创建用户

mysql>create database wpdb;

mysql>grant all on wpdb.* to wpuser@'192.168.36.%' identified by 'centos';

mysql>grant all on wpdb.* to wpuser@'localhost' identified by 'centos';

安装wordpress

tar -xvf wordpress-5.0.3-zh_CN.tar.gz -C /app/httpd24/htdocs/

chown -R root.root wordpress/

cp wp-config-sample.php wp-config.php

修改wp-config .php, 填写数据库连接信息

在浏览器访问 http://ip/wordpress/wp-admin/install.php 进行安装

参考:codex.wordpress.org

四,安装 Powerdns+mysql

1,安装powerdns,需要EPEL源

yum install -y pdns pdns-backend-mysql

准备数据库表及用户:

准备mariadb中的数据库,表和用户 CREATE DATABASE powerdns; GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'centos';

创建表:参考官网资料

或导入SQL语句:

cat pdns.sql

CREATE DATABASE powerdns; GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'centos';

use powerdns CREATE TABLE domains ( id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, master VARCHAR(128) DEFAULT NULL, last_check INT DEFAULT NULL, type VARCHAR(6) NOT NULL, notified_serial INT DEFAULT NULL, account VARCHAR(40) DEFAULT NULL, PRIMARY KEY (id) ) Engine=InnoDB;

CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records ( id BIGINT AUTO_INCREMENT, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(10) DEFAULT NULL, content VARCHAR(64000) DEFAULT NULL, ttl INT DEFAULT NULL, prio INT DEFAULT NULL, change_date INT DEFAULT NULL, disabled TINYINT(1) DEFAULT 0, ordername VARCHAR(255) BINARY DEFAULT NULL, auth TINYINT(1) DEFAULT 1, PRIMARY KEY (id) ) Engine=InnoDB;

CREATE INDEX nametype_index ON records(name,type); CREATE INDEX domain_id ON records(domain_id); CREATE INDEX recordorder ON records (domain_id, ordername);

CREATE TABLE supermasters ( ip VARCHAR(64) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) NOT NULL, PRIMARY KEY (ip, nameserver) ) Engine=InnoDB;

CREATE TABLE comments ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(10) NOT NULL, modified_at INT NOT NULL, account VARCHAR(40) NOT NULL, comment VARCHAR(64000) NOT NULL, PRIMARY KEY (id) ) Engine=InnoDB;

CREATE INDEX comments_domain_id_idx ON comments (domain_id); CREATE INDEX comments_name_type_idx ON comments (name, type); CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);

CREATE TABLE domainmetadata ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, kind VARCHAR(32), content TEXT, PRIMARY KEY (id) ) Engine=InnoDB;

CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);

CREATE TABLE cryptokeys ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, flags INT NOT NULL, active BOOL, content TEXT, PRIMARY KEY(id) ) Engine=InnoDB;

CREATE INDEX domainidindex ON cryptokeys(domain_id);

CREATE TABLE tsigkeys ( id INT AUTO_INCREMENT, name VARCHAR(255), algorithm VARCHAR(50), secret VARCHAR(255), PRIMARY KEY (id) ) Engine=InnoDB;

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

配置PowerDNS使用mariadb作为后台数据库

vim /etc/pdns/pdns.conf,查找到包含launch= 的行,修改并添加下面的内容

launch=gmysql

gmysql-host=localhost

gmysql-port=3306

gmysql-dbname=powerdns

gmysql-user=powerdns

gmysql-password=centos

systemctl start pdns

systemctl enable pdns

2,安装httpd和php相关包

搭建poweradmin环境

以之前编译安装的环境进行安装,无法识别安装首页,查看日志报 “ Primary script unknown”

原因未知:网上解决资料

I changed this old .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
RewriteBase /fc2/

To this new variation:
RewriteBase /fc2/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /fc2/index.php [L]

重新安装(模块化php安装)

yum -y install httpd php php-devel php-gd php-mcrypt php-imap phpldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring phpmcrypt php-mhash gettext

systemctl start httpd

3,下载安装poweradmin

http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz

解压 tar xf poweradmin-2.1.7.tgz -C /var/www/html

访问 http://192.168.36.73/poweradmin/install/

复制执行授权命令到数据库执行

按图所示修改配置文件

结束。

ps:

报错:

1,Distributor caught fatal exception: Unable to launch gmysql connection: Unable to connect to database: Access denied for user 'powerdns'@'localhost' (using password: YES)

解决:密码错误 修改 vim /etc/pdns/pdns.conf

2,不能连接至 /tmp/mysql.sock

解决:

1,修改数据库的sock文件位置

2,修改/etc/pdns/pdns.conf ,使用端口及IP地址连接

重点:看日志进行排错

操作记录要存档查看。

4,小实验

1,实现基于UDS的fastcgi的LAMP

高版本编译httpd + php-fpm (Apache/2.4.39

yum install gcc glibc pcre-devel openssl-devel expat-devel libxml2-devel bzip2-devel libmcrypt-devel

tar  xf  apr-1.7.0.tar.gz 
tar xf apr-util-1.6.1.tar.gz
cp -r apr-1.7.0 httpd-2.4.39/srclib/apr
cp -r apr-util-1.6.1 httpd-2.4.39/srclib/apr-util
cd httpd-2.4.39/
  ./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
make -j 4 && make install

vim /etc/profile.d/httpd24.sh
PATH=/app/httpd24/bin:$PATH

useradd -r -s /sbin/nologin apache
vim /app/httpd24/conf/httpd.conf
User apache
Group apache
vim /etc/rc.d/rc.local
/app/httpd24/bin/apachectl start
chmod +x /etc/rc.d/rc.local

配置php-fpm

yum  -y install   php-fpm  
vim /app/httpd24/conf/httpd.conf
取消下面两行的注释
LoadModule proxy_module modules/mod_proxy.so          
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
修改此行
DirectoryIndex index.php index.html

添加下面四行
AddType application/x-httpd-php.php
AddType application/x-httpd-php-source .phps
ProxyRequestsOff
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1
参看:http://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html

走UNIX 套接字:

 addType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
#ProxyPassMatch ^/(.*\.php)$ unix:/var/run/php.sock|fcgi://localhost/app/httpd24/htdocs/$1
<FilesMatch "\.php$">
  # Note: The only part that varies is /path/to/app.sock
SetHandler "proxy:unix:/var/run/php.sock|fcgi://localhost/"                                        
</FilesMatch>

​## 使用如下没有成功,参考官网文档修改为上面所示成功了

ProxyPassMatch    ^/(.*.php)$     unix:/var/run/php.sock|fcgi://localhost/app/httpd24/htdocs/$1

 

LAMP 搭建,wordpress.xcache,powerdns及poweradmin的更多相关文章

  1. LAMP 搭建wordpress部署教程贴.

    LAMP 搭建wordpress部署教程贴.这是一篇主要将LAMP,并且通过wordpress来进行验证,演示.如何去部署PHP CMS很多新手看到LAMP就很很头大,觉得很难搞,编译安装,搞了好几天 ...

  2. LVS之-LAMP搭建wordpress

    author:JevonWei 版权声明:原创作品 LVS搭建wordpress,涉及的知识点有DNS,LAMP,NFS及LVS 网络拓扑图 网络环境 NFS 192.168.198.130 mysq ...

  3. Centos 7使用docker部署LAMP搭建wordpress博客系统

    0.简要概述 LAMP是目前比较流行的web框架,即Linux+Apache+Mysql+PHP的网站架构方案.docker是目前非常流行的虚拟化应用容器,可以为任何应用创建一个轻量级.可移植的容器. ...

  4. LAMP搭建wordpress

    centos7安装Apache centos7安装mysql8 centos7安装php7 先登录mysql创建一个wordpress的数据库 create database wordpress 下载 ...

  5. 实战!基于lamp安装wordpress详解-技术流ken

    简介 LAMP 是Linux Apache MySQL PHP的简写,其实就是把Apache, MySQL以及PHP安装在Linux系统上,组成一个环境来运行动态的脚本文件.现在基于lamp搭建wor ...

  6. LAMP模拟搭建wordpress,phpmyadmin环境

    1.安装需要的环境,centos7的mysql叫mariadb,所有的配置文件默认就可以 [root@test ~]# yum install httpd php mariadb mariadb-se ...

  7. LAMP 搭建练习

    目录 LAMP 搭建 1:CentOS 7, lamp (module): http + php + phpMyAdmin + wordpress 192.168.1.7 配置虚拟主机 xcache ...

  8. 阿里云centos7搭建wordpress环境

    阿里云搭建wordpress系统 一.购买阿里云 二.安装php开发环境 1. https://www.apachefriends.org/zh_cn/index.html网站下载linux下的xam ...

  9. 生产环境LAMP搭建 - 基于 fastcgi

    生产环境LAMP搭建 - 基于 fastcgi 由于在module模式,php只是已http的模块形式存在,无形中加重了http的服务负载,通常在企业架构中,使用fastcgi的模式,将所有的服务都设 ...

随机推荐

  1. 统计学习方法 | 第1章 统计学习方法概论 | Scipy中的Leastsq()

    Scipy是一个用于数学.科学.工程领域的常用软件包,可以处理插值.积分.优化.图像处理.常微分方程数值解的求解.信号处理等问题.它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解 ...

  2. sublime text3 注册码 (Version 3.0)

    -– BEGIN LICENSE -– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA ...

  3. c++贪吃蛇

    显示方式:清屏打印二位数组,数组即游戏地图,包括墙面(用‘W’表示),蛇(‘H’表蛇头,‘B’表身体)和食物(用‘f’表示). ; char map[MaxMap][MaxMap]; 边缘为墙面: ; ...

  4. Dango之视图函数

    1.request对象 HTTPRequest对象就是咱们的视图函数的参数request def home(request): print(request) #<WSGIRequest: GET ...

  5. 如何利用 CSS 的动画原理,创作一个乒乓球对打动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/rvgLzK 可交互视频教 ...

  6. 基于C# Socket实现多人网络聊天室

    首先不多说,最终实现界面如下,可以通过点击启动服务,开启TCP服务器: 开启TCP服务器之后,可以通过点击客户端,打开一个独立的TCP客户端,打开客户端之后,输入正确的IP地址和端口号,可以进行连接服 ...

  7. 分布式的几件小事(三)dubbo的通信协议与序列化

    1.dubbo的通信协议 ①dubbo协议 Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况. 特点 : dubbo缺 ...

  8. web-CSS居中大全

    居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...

  9. 了解并安装Nginx

    公司使用nginx作为请求分发服务器,发现本人在查看nginx配置上存在些许困难,故仔细阅读了陶辉的<深入理解nginx模块开发与框架>第一部分,并作此记录. 了解 我根据书上的思路来了解 ...

  10. c# HttpClient和HttpWebRequest添加Basic类型的Authentication认证

    c#项目中用到调用客户接口,basic身份认证,base64格式加密(用户名:密码)贴上代码以备后用 1.使用HttpClient实现basic身份认证 using (HttpClient clien ...