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版本的

img

  • 解析php成功了

3、通过第三方软件来实现解析php(php-fpm服务)

  • 将上面的配置注释掉,避免环境影响

img

  • 出现这个表示环境清理成功了,无法解析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、浏览器访问

img

  • 这样就是实现了解析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 

  • 浏览器访问

img

  • 最后的完整配置如下

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

img

  • 安装这个软件包
yum -y install php-mysqli

  • 安装完成后显示的

img

  • 创建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)

  • 连接数据库的操作

img

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


  • 安装wordpress

img

img

  • 搭建成功,可以写文章了

  • 整个流程还是比较简单的

    • 配置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()
?>

img

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

img

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

img

# 在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


  • 完成上面操作就显示这个页面了

img

img

  • 配置数据库了
# 创建数据库
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)

img

  • 安装成功

img

posted @ 2025-11-15 21:45  乔的港口  阅读(12)  评论(0)    收藏  举报