apache和nginx解析php和lnmp和lamp搭建
讲什么
-
apache 处理php请求的2种方式,也就是动态处理资源的方式
-
lamp搭建wordpress
-
lnmp搭建discuss论坛
web服务
1、web服务访问流程
-
用户通过浏览器访问web服务器发送请求
-
服务器收到请求后,如果为静态资源的话,从本地进行读取
-
如果是动态资源的话,则将请求转发给对应的应用程序模块
-
应用程序模块交给对应的应用程序
-
最后返回给web,最终返回给浏览器
2、应用程序网关接口
-
fastcgi就是一个web服务器和外部程序进行交互的一个协议或者接口,CGI 的主要作用是允许 Web 服务
器调用外部程序来处理客户端的请求,并将处理结果返回给客户端 -
FASTCGI:增强版的CGI
-
传统的 CGI协议每次处理一个请求都会创建一个新的进程,执行动态内容生成器中的脚本,并在处理完成后关闭进程。
-
这种方式效率低下,因为每个请求都需要创建和销毁进程,会造成很大的系统开销。而 FastCGI 协议则通过一种持久连接的方式解决
-
-
CGI 的工作流程:
-
客户端发送请求给 Web 服务器,例如请求一个php的动态网页。
-
Web 服务器收到请求后,根据请求的 URL 找到对应的 CGI的程序,如将请求交给php的后端程序。
-
php程序执行相应的处理。
-
CGI 将php程序处理结果返回给 Web 服务器。
-
Web 服务器将处理结果发送给客户端,客户端在浏览器中显示
-
apache动态资源配置(php为例)
1、处理的2种模式
-
第一种:交给web服务器自身的模块来完成,必须是prefork模式下
-
第二种:交给第三方的服务器完成,php-fpm服务,event模式下
-
也就是交给了cgi,应用程序的网关接口,就是一个api地址
-
cgi主要就允许web服务器调用外部的来处理客户端的请求,并将结果返回给客户端
-
2、通过自身模块来实现解析php
1、修改httpd的php的工作模式
[root@node1 conf.modules.d]# pwd
/etc/httpd/conf.modules.d
[root@node1 conf.modules.d]# grep prefork.so 00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
2、在httpd.conf中添加参数
- 这些参数可以安装php-fpm后,会生成一个php.conf文件,进行拷贝
# phpconfig
AddType text/html .php # 添加php的文件类型
DirectoryIndex index.php # php的首页文件,默认去寻找的
<FilesMatch \.(php|phar)$> # 只要是以.php的文件都成为php的类型,
SetHandler application/x-httpd-php
</FilesMatch>
<IfModule prefork.c> # 加载php模块
#LoadModule php7_module modules/libphp.so
LoadModule php_module modules/libphp.so # 还需要将/etc/httpd/conf.modules.d/15-php.conf 也需要注释掉,不然会报错的
# 7这个版本太低了
</IfModule>
3、测试
- 创建php文件
[root@node1 html]# pwd
/var/www/html
[root@node1 html]# cat test.php
<?php
phpinfo()
?>
- 浏览器访问,这个php是8版本的

- 解析php成功了
3、通过第三方软件来实现解析php(php-fpm服务)
- 将上面的配置注释掉,避免环境影响

-
出现这个表示环境清理成功了,无法解析php
-
这个php-fpm,安装后,启动服务,就能自动的解析php
-
这个php-fpm有2种启动的方式
-
第一种就是下面说的通过套接字运行
-
第二种通过监听端口来实现
-
1、安装必要的软件包
- php
yum -y install php
[root@node1 conf.d]# rpm -qc php
/etc/httpd/conf.d/php.conf # 配置php启动之类的
/etc/httpd/conf.modules.d/15-php.conf # 这个里面是加载php模块
- 主要就几个文件
/etc/httpd/conf.modules.d/00-mpm.conf # php工作模式
/etc/httpd/conf.modules.d/15-php.conf # 加载php模块
/etc/php-fpm.d/www.conf # php配置文件
/etc/httpd/conf.d/php.conf # php的启动方式
2、修改php的工作模式
[root@node1 conf.modules.d]# pwd
/etc/httpd/conf.modules.d
vim 00-mpm.conf
LoadModule mpm_event_module modules/mod_mpm_event.so
# 重启服务
[root@node1 conf.modules.d]# systemctl restart php-fpm
[root@node1 conf.modules.d]# systemctl restart httpd
3、浏览器访问

- 这样就是实现了解析php了
4、php-fpm启动模式
- 第一种通过监听套接字
[root@node1 php-fpm.d]# grep www.sock www.conf
listen = /run/php-fpm/www.sock
# php.conf文件中定义了监听套接字来实现
<FilesMatch \.(php|phar)$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
- 第二种通过监听端口来实现
5、php-fpm通过监听端口来实现
# php.conf 修改
<FilesMatch \.(php|phar)$>
#SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
# php-fpm配置文件修改
[root@node1 php-fpm.d]# pwd
/etc/php-fpm.d
vim www.conf
;listen = /run/php-fpm/www.sock # 这个文件;表示注释
listen = 9000
- 启动服务
systemctl restart php-fpm
systemctl restart httpd
# 查看端口
[root@node1 php-fpm.d]# netstat -pant|grep 9000
tcp6 0 0 :::9000 :::* LISTEN 3396/php-fpm: maste
- 浏览器访问

- 最后的完整配置如下
AddType text/html .php 添加php的文件类型
DirectoryIndex index.php php的首页文件名
<FilesMatch \.(php|phar)$> 只要是以.php的文件都称为 php的类型
SetHandler application/x-httpd-php
</FilesMatch>
# 配置php的CGI接口
<FilesMatch \.(php|phar)$>
#setHandler "proxy:fcgi://127.0.0.1:9000" 该种方式需要php监听9000端口
setHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
lamp搭建wordpress
- 从官网下载源码包和安装软件包
wget https://cn.wordpress.org/latest-zh_CN.tar.gz
# 安装数据库,wordpress的存储
yum -y install mariadb-server
- 将其移动到httpd默认的根目录下面
tar -xf latest-zh_CN.tar.gz
[root@node1 wordpress]# cp -a -p * ..
- 赋予根目录权限
# apache用户等会要写入文件的
# 对接数据库的时候,会创建一个文件的
[root@node1 html]# chmod o+w .
[root@node1 html]# ll -d
drwxr-xrwx. 6 root root 4096 Nov 15 21:54 .
- 访问 192.168.50.21

- 安装这个软件包
yum -y install php-mysqli
- 安装完成后显示的

- 创建wordpress数据库
[root@node1 html]# mysql -u root -p
Enter password: # 直接回车,没有密码
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.29-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.002 sec)
MariaDB [(none)]> create database wordpress; # 创建数据库wordpress
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wordpress |
+--------------------+
4 rows in set (0.000 sec)
- root密码不能为空
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.001 sec)
- 连接数据库的操作

- 数据库连接成功后
# 会创建一个文件
# 因此上面需要给网站根目录添加权限 o+w
[root@node1 html]# ll wp-config.php
-rw-rw-rw-. 1 apache apache 3609 Nov 15 22:11 wp-config.php
- 安装wordpress


-
搭建成功,可以写文章了
-
整个流程还是比较简单的
-
配置apache解析php
-
下载wordpress源码包
-
创建数据库和对接数据库
-
安装wordpress
-
lnmp搭建discuss论坛
1、配置nginx解析php
-
nginx只支持第三方程序,也就是使用php-fpm服务
-
启动nginx,php-fpm会自动的起来
-
安装nginx和php
yum -y install nginx php
[root@server nginx]# rpm -qc php-fpm | grep nginx
/etc/nginx/conf.d/php-fpm.conf
/etc/nginx/default.d/php.conf
- php-fpm.conf
[root@server conf.d]# cat php-fpm.conf
# PHP-FPM FastCGI server
# network or unix domain socket configuration
# 定义了后端php的服务器组
upstream php-fpm {
server unix:/run/php-fpm/www.sock; # 可以是监听的ip地址
}
- php.conf文件
# 配置了nginx将php交给了后端的fastcgi(也就是php-fpm)
[root@server default.d]# cat php.conf
# pass the PHP scripts to FastCGI server
#
# See conf.d/php-fpm.conf for socket configuration
#
index index.php index.html index.htm; # 索引文件的位置
location ~ \.(php|phar)(/.*)?$ { # 符合这个.php结尾的文件匹配上
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php; # 定义默认文件
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm; # 将php的请求转发到php-fpm服务
}
systemctl restart nginx
systemctl restart php-fpm
- 测试
[root@server html]# cat test.php
<?php
phpinfo()
?>

2、搭建discuss论坛
[root@server opt]# wget https://gitee.com/Discuz/DiscuzX/archive/refs/tags/v3.5-20231221.tar.gz
# 只有upload下面是源码,其他都没有用
[root@server DiscuzX-v3.5-20231221]# ls
LICENSE readme README.md upload utility
[root@server upload]# cp -ar * /usr/share/nginx/html/
- 浏览器访问 192.168.50.20,开始安装discuss

- 会遇到这些问题,需要解决才能进行下一步

# 在html/config下创建2个文件
[root@server config]# touch config_global.php
[root@server config]# touch config_ucenter.php
# 对这个html组和拥有人改为apache
# 因为这些是要交给php-fpm处理的,查看php-fpm进程为apache
[root@server config]# ps -aux|grep php-fpm
root 2213 0.0 0.7 35280 17552 ? Ss 14:28 0:00 php-fpm: master process (/etc/php-fpm.conf)
apache 2216 0.0 0.5 35788 13840 ? S 14:28 0:00 php-fpm: pool www
[root@server html]# chown -R apache:apache *
# 安装2个软件包
[root@server html]# yum -y install php-mysqli php-xml
- 完成上面操作就显示这个页面了


- 配置数据库了
# 创建数据库
MariaDB [(none)]> create database discuss;
Query OK, 1 row affected (0.000 sec)
# 数据库的密码
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.002 sec)

- 安装成功


浙公网安备 33010602011771号