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服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
原理:
-
Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
-
FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
-
当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
-
FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
PHP-CGI(cgi的php实现):
PHP-CGI是php自带的Fast-CGI管理器
不足:
-
php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。
-
直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)
PHP-FPM(FastCgi的php实现):
特点:
-
PHP-FPM是一个PHP FastCGI的管理器,他是能够调度php-cgi进程的程序。
-
修改php.ini之后,php-cgi进程的确没办法平滑重启,但php-fpm对此的应对方法是新的进程用新的配置,已经存在的进程让按照之前的配置执行到结束。用这种方式进行平滑过渡。
-
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";elseecho "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=‘magedu';$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 进行安装
四,安装 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 OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php/$1 [L]RewriteBase /fc2/To this new variation:RewriteBase /fc2/RewriteRule ^index\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /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/aprcp -r apr-util-1.6.1 httpd-2.4.39/srclib/apr-utilcd 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=preforkmake -j 4 && make install vim /etc/profile.d/httpd24.sh PATH=/app/httpd24/bin:$PATHuseradd -r -s /sbin/nologin apachevim /app/httpd24/conf/httpd.confUser apacheGroup apache vim /etc/rc.d/rc.local/app/httpd24/bin/apachectl startchmod +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.phpAddType application/x-httpd-php-source .phpsProxyRequestsOffProxyPassMatch ^/(.*\.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
来源:https://www.cnblogs.com/g2thend/p/10884579.html