生产环境LAMP搭建 - 基于 fastcgi

Posted ddz-linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产环境LAMP搭建 - 基于 fastcgi相关的知识,希望对你有一定的参考价值。

生产环境LAMP搭建 - 基于 fastcgi

由于在module模式,php只是已http的模块形式存在,无形中加重了http的服务负载,通常在企业架构中,使用fastcgi的模式,将所有的服务都设置为不同的独立服务,独立进程的形式存在,并部署在不同的设备上。是用的比较多的。

技术图片

php 进程 默认使用9000端口

默认 php-fpm 只监听127.0.0.1 的 9000 端口

配置php的连接方式,有静态和动态两种模式
pm = static|dynamic

static:固定数量的子进程;pm.max_children
dynamic:子进程数量以动态模式管理

最大连接进程数,生产中可以加大
pm.max_children = 500

服务开启第时候开启多少个进程
pm.start_servers = 50

最小空闲进程
pm.min_spare_servers = 5

最大空闲进程
pm.max_spare_servers = 35

假设来了100个人访问,那么服务器一开始会开启50个进程,现在会再开启50个,这时候走了10个,还剩90个,他就会关闭5个进程,因为最小空间被设置为5个,至少还要保留5 个空闲进程

每个进程的最大用户请求数
pm.max_requests = 500

apache 需要在配置文件中,定义php的位置,否则不会把php的请求转发到php服务上

DirectoryIndex index.php
ProxyRequests Off
# fcgi后跟php服务绑定的IP和端口 ,和请求要转发的路径
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 

centos7 搭建 (同一台设备)

#安装环境
yum install httpd php-fpm php-mysql mariadb-server

#配置 apache 转发 php
vim /etc/httpd/conf.d/fastcgi.conf
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 

#配置php 连接 mysql
vim index.php
<?php
    $dsn='mysql:host=localhost;dbname=mysql';
    $username='root';
    $passwd='centos';
    $dbh=new PDO($dsn,$username,$passwd);
    var_dump($dbh);
?>

systemctl restart httpd
systemctl start mariadb

centos7 搭建 (每个服务独立在不同的设备)

web 服务器 192.168.30.17

yum install httpd

vim /etc/httpd/conf.d/fastcgi.conf
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://192.168.30.27:9000/data/www/$1 

注意:在HTTPD服务器上必须启用proxy_fcgi_module模块,充当PHP客户端
httpd –M |grep fcgi
cat /etc/httpd/conf.modules.d/00-proxy.conf

systemctl start httpd

php 服务器 192.168.30.27

yum install php-fpm php-mysql

#修改绑定端口,让他绑定所有IP
vim /etc/php.fpm.d/www.conf
listen = 9000

#修改允许IP访问的选项
listen.allowed_clients

mkdir -pv /data/www/

vim /data/www/index.php
填充php连接数据库语句

systemctl start php

mysql 服务器 192.168.30.37

yum install mariadb mariadb-server

systemctl start mariadb

#执行初始化脚本
mysql_ser_install

#创建php使用的账户
grant all on *.* to [email protected]'192.168.30.%' identified by 'phppassword';
flush privileges;

在LAMP的基础上搭建 DiscuzX

# 解压到php服务器上
unzip Discuz_X3.2_SC_UTF8.zip

cd upload 
cp -r * /data/www/

setfacl -R -m  u:apache:rwx /data/www/*

#修改http的默认路径
vim /etc/http/conf/http.conf

DocumentRoot "/data/www/"

<Directory "/data/www">
    Require all granted
</Directory>


#修改php服务器的设置 ,搭建discuzX的话,把apache 和 php 放在同一台设备上 (待测试)
vim /etc/httpd/conf.d/fastcgi.conf
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/www/$1 

第一次老王执行的时候,发现网页显示错误,只能显示文字,其他的东西显示不出来,他认为是传输问题 ,php无法处理静态页面,就改了这句话
ProxyPassMatch ^/(.*.*)$ fcgi://127.0.0.1:9000/data/www/$1 

后来发现是默认网站路径的问题,要修改默认网站的路径
vim /etc/httpd/conf/http.conf
#这边的路径要改成新的路径 
DocumentRoot "/var/www/html/

自己的真实解决方案!!!如果配置多个虚拟主机的话,直接注释到主配置文件中的
DocumentRoot "/var/www/html/!!!!!!
自己的真实解决方案!!!如果配置多个虚拟主机的话,直接注释到主配置文件中的
DocumentRoot "/var/www/html/!!!!!!
自己的真实解决方案!!!如果配置多个虚拟主机的话,直接注释到主配置文件中的
DocumentRoot "/var/www/html/!!!!!!


执行install/index.php 初始化

初始化完成后,回收acl权限
setfacl -R -b /data/www/*


实现虚拟主机,在同一台设备上搭建wordpress 和 DiscuzX

#虚拟主机设置
<virtualhost *:80>
servername www.bbs.com
documentroot /data/www
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/www/$1
<directory /data/www>
require all granted
</directory>
</virtualhost>


<virtualhost *:80>
servername www.blog.com
documentroot /data/www2
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/www2/$1
<directory /data/www2>
require all granted
</directory>
</virtualhost>

源码编译实现LAMP 并且基于Fastcgi模型

准备3台设备:
apache : 192.168.30.7
php: 192.168.30.17
mysql / mariadb : 192.168.30.27

编译顺序:通常是 apache > mysql > php

准备安装包

http
httpd-2.4.33.tar.bz2
apr-1.6.3.tar.gz
apr-util-1.6.1.tar.gz

mysql
mariadb-10.2.15-linux-x86_64.tar.gz

php
php-7.1.18.tar.bz2

blog
wordpress-4.9.4-zh_cn.tar.gz

#安装编译包组
yum groupinstall Development

#创建账户,用于未来apache和php使用
groupadd -r -g 80 apache
useradd -r -s /sbin/nologin -g 80 -u 80 apache

编译apache


#安装apache依赖包
yum install pcre-devel openssl-devel expat-devel

tar xvf httpd-2.4.33.tar.bz2
tar xvf apr-1.6.3.tar.gz
tar xvf apr-util-1.6.1.tar.gz

mv apr-1.6.3 httpd-2.4.33/srclib/apr
mv apr-util-1.6.1 httpd-2.4.33/srclib/apr-util

cd httpd-2.4.33

./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

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

#设置服务使用apache账户密码
vim /app/http.conf


#启动服务
apachectl 

二进制安装mysql

tar xvf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local

cd /usr/local
ln -s mariadb-10.2.15-linux-x86_64/ mysql

useradd -r mysql -s /sbin/nologin 

chown -R mysql.mysql mysql

mkdir /data/mysqldb -pv

chown mysql.mysql /data/mysql/

vim /etc/profile.d/lamp.sh
PATH=/usr/local/mysql/bin:/app/httpd24/bin:$PATH > /etc/profile.d/lamp.sh

.  /etc/profile.d/lamp.sh

cd /usr/local/mysql/
./scripts/mysql_install_db --datadir=/data/mysqldb --user=mysql

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

vim /etc/my.cnf
datadir=/data/mysqldb
innodb_file_per_table
log_bin

chkconfig --add mysqld
service mysqld start

create database wpdb;
grant all on wpdb.* to [email protected]'192.168.30.%' identified by 'centos'; 
flush privileges;

编译php 7.1.7 基于 fastcgi 模式

php编译后需要自己准备ini 配置文件

#安装php依赖包
yum install libxml2-devel bzip2-devel libmcrypt-devel (epel)

tar xvf php-7.1.7.tar.bz2
cd php-7.1.7/

#设置编译项
./configure --prefix=/app/php --enable-mysqlnd --with-mysqli=mysqlnd --with-openssl --with-pdo-mysql=mysqlnd --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-maintainer-zts --disable-fileinfo

make -j 4 && make install

--enable-fpm  表示以 fastcgi模式来编译安装

vim /etc/profile.d/lamp.sh
PATH=/app/php/bin:/usr/local/mysql/bin:/app/httpd24/bin:$PATH > /etc/profile.d/lamp.sh

.  /etc/profile.d/lamp.sh


#准备配置文件
cd /root/srcs/php-7.1.18/
cp php.ini-production /etc/php.ini

#准备启动脚本
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on

cd /app/php/etc
cp php-fpm.conf.default php-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf

#设置服务使用apache账户密码
vim /app/etc/php-fpm.d/www.conf

service php-fpm start

编辑apache 配置 使其支持 php


vim /app/httpd24/conf/httpd.conf 
取消下面两行的注释 激活fcgi模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
修改下面行
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

addType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1

以上是关于生产环境LAMP搭建 - 基于 fastcgi的主要内容,如果未能解决你的问题,请参考以下文章

基于lamp+fastcgi+https搭建phpMyAdmin和wordpress

CentOS6源码安装LAMP----基于fastcgi方式(2台机器)

LAMP ----- 编译实现基于FASTCGI的LAMP的WordPress

编译安装基于FASTCGI模式LAMP架构多虚拟主机WEB应用及loganalyzer图形化日志

实战案例:编译安装基于 FastCGI 模式LAMP架构多虚拟主机WEB应用(WordPress 和Discuz)

编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构