HTTPS的会话过程

1.客户端发起HTTPS请求:当用户在浏览器中输入一个HTTPS网址并访问时,浏览器(作为客户端)会向服务器发起一个HTTPS请求。

2.服务器响应并提供证书:服务器收到请求后,会向客户端发送其SSL证书。这个证书包含了服务器的公钥,证书颁发机构(CA)的信息,以及其他验证服务器身份的信息。

3.客户端验证证书:客户端收到证书后,会检查证书是否由信任的CA签发,证书中的域名是否与服务器的域名匹配,以及证书是否过期。如果证书验证通过,客户端就认为服务器是可信的。

4.客户端生成会话密钥:证书验证通过后,客户端会生成一个随机的会话密钥(也叫对称密钥),用于本次会话的加密。

5.客户端加密会话密钥并发送给服务器:客户端使用服务器的公钥(从证书中获得)来加密会话密钥,然后将加密后的会话密钥发送给服务器。

6.服务器解密会话密钥:服务器收到加密的会话密钥后,会使用自己的私钥来解密,从而获得会话密钥。至此,客户端和服务器都拥有了相同的会话密钥。

7.双方使用会话密钥进行加密通信:客户端和服务器使用会话密钥来加密他们之间的通信(包括数据请求和响应)。这确保了数据传输过程中的安全性和隐私性。

8.会话结束:当会话结束时,双方将丢弃会话密钥,保证即使有人能够捕获到加密数据,也无法解密。

img

SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下:

img

  • SSL:(Secure Socket Layer,安全套接字层),为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。 SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
  • TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。 TLS 1.0是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1,它是写入了 RFC 的。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。

SSL/TLS协议提供的服务主要有:

  • 1.认证用户和服务器,确保数据发送到正确的客户机和服务器;
  • 2.加密数据以防止数据中途被窃取;
  • 3.维护数据的完整性,确保数据在传输过程中不被改变。

Cookie和Session的区别

1.Cookie和Session都是在网络应用中用于保存用户数据的技术,它们帮助网站记住用户的信息,比如登录状态、偏好设置等。虽然它们的目的相似,但它们在处理数据的方式和存储位置上有所不同
2.Cookie
定义:Cookie是一小段数据,由网站发送到用户浏览器,浏览器会将其存储在用户的设备上。每当用户再次访问该网站时,浏览器会将Cookie发送回服务器,以识别用户或恢复用户的偏好设置。
存储位置:用户的计算机或设备上。
安全性:较低,因为它们存储在客户端,容易被篡改或被第三方访问。
生命周期:可以设置过期时间,过期后自动删除。如果不设置过期时间,当浏览器关闭时Cookie就会被删除(会话Cookie)。
3.Session
定义:Session是另一种保存用户数据的方式,但数据是存储在服务器上的。当用户访问网站时,服务器会创建一个Session,并为该Session分配一个唯一的标识符(通常是一个随机生成的字符串),这个标识符会被发送到用户的浏览器并保存在Cookie中。
存储位置:服务器。
安全性:较高,因为数据存储在服务器上,不容易被外部访问或篡改。
生命周期:Session的持续时间通常由服务器设置,用户离开网站一段时间后,Session会过期并被销毁。
4.它们之间的主要区别
存储位置:Cookie存储在客户端(用户的浏览器),而Session存储在服务器。
安全性:Session比Cookie更安全,因为Session数据存储在服务器上。
性能影响:每次浏览器请求都会发送Cookie到服务器,这可能影响性能;而Session ID通常很小,并且只在初次创建Session时通过网络传输。
数据存储:Cookie直接存储数据,而Session可以存储任意类型的数据,因为它在服务器端。

setcookie.php

yum -y intall httpd php
cd /var/www/html
<?php
setcookie('title','cto');
setcookie('user','wang',time()+3600*12);
echo "<h1>test setcookie </h1>"
?>

sid.php

<?php
session_start();
echo session_id();
?>

测试网站是否正常

if [ "$(curl -sL -w '%{http_code}' http://www.wangxiaochun.com -o /dev/null)" = "200" ]; then
echo "Success"
else
echo "Fail"
fi
# 配置防火墙,禁止对80端口的访问
[11:31:55 root@Rocky9 html]#iptables -AINPUT -p tcp --dport 80 -j REJECT
[11:31:55 root@Rocky9 html]#if [ "$(curl -sL -w '%{http_code}' http://10.0.0.107 -o /dev/null)" = "200" ]; then echo "Success"; else echo "Fail"; fi
Fail
[11:31:59 root@Rocky9 html]#iptables -F

压力测试工具

yum -y install http-tools
ab -c 100 -n 2000 http://10.0.0.107/
ab -c 100 -n 2000 http://10.0.0.107/sid.php

#开启opcache加速
vim /etc/php8/conf.d/opcache.ini
[opcache]
zend_extension=opcache.so
opcache.enable=1

systemctl restart php-fpm

CGI和FastCGI

1.CGI(Common Gateway Interface)和FastCGI都是Web服务器与外部内容生成程序(如用于动态网页生成的脚本)之间的接口协议,但它们在实现和性能方面有一些关键区别。
2.CGI (Common Gateway Interface)
概念: CGI是一种标准协议,用于Web服务器执行外部程序(称为CGI程序或CGI脚本),这些程序生成Web页面或其他数据。CGI脚本可以用任何编程语言编写,如Perl、Python或Shell脚本。
工作原理: 当Web服务器接收到一个请求时,它会启动一个新的CGI程序进程来处理该请求。处理完成后,CGI程序向服务器发送输出,服务器再将这个输出发送给客户端。每个请求都会启动一个新的进程。
优点: 简单易用;支持多种编程语言。
缺点: 性能低下。由于每个请求都会启动一个新的进程,这会导致较高的CPU和内存使用率,特别是在高流量的环境中。
3.FastCGI
概念: FastCGI是为了克服CGI性能不足而设计的一种协议。它是CGI的一个扩展,旨在提供更高效的方式处理请求。
工作原理: 与CGI不同,FastCGI设计为长期运行的进程,可以处理多个请求。当Web服务器收到请求时,它会将请求发送给一个已经运行的FastCGI进程。这个进程处理完请求后不会立即终止,而是等待处理下一个请求。
优点: 高性能。由于减少了进程的创建和销毁,FastCGI可以显著减少资源使用,提高请求处理速度。
缺点: 配置比CGI复杂;需要管理长期运行的进程。
4.比较总结
性能: FastCGI比CGI提供了显著的性能提升,特别是在高流量的Web应用中。
资源使用: FastCGI通过重用进程来减少资源消耗,而CGI每个请求都创建新的进程。
适用场景: 对于小型或低流量的Web应用,CGI可能足够使用。但对于需要高性能和高可伸缩性的环境,FastCGI是更好的选择。
实现复杂性: CGI的实现和部署相对简单,而FastCGI需要更复杂的配置和进程管理。
总的来说,选择CGI还是FastCGI主要取决于您的具体需求,包括应用的规模、预期流量以及对性能的要求。FastCGI尽管在配置和管理上更为复杂,但其在处理高流量时的性能优势使其成为了大型、复杂Web应用的首选。
# 查看cgi模块
[13:56:30 root@Rocky9 html]#httpd -M | grep cgi
 proxy_fcgi_module (shared)
 proxy_scgi_module (shared)
 cgid_module (shared)
[13:56:45 root@Rocky9 html]#
# 查看配置文件有关cgi的内容
[13:55:07 root@Rocky9 html]#grep cgi /etc/httpd/conf/httpd.conf
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
<Directory "/var/www/cgi-bin">
    #AddHandler cgi-script .cgi
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"

HTTP响应码

HTTP响应状态码是由三位数字组成,指示Web服务器处理请求的结果。这些状态码分为五个类别,下面是每个类别的概述以及一些常见状态码的解释:

1xx - 信息性响应
100 Continue: 客户端应继续其请求。这个临时响应用来通知客户端部分请求已经被服务器接收,且客户端可以继续发送请求的剩余部分。
101 Switching Protocols: 服务器根据客户端的请求切换协议。
102 Processing (WebDAV): 服务器已接受并正在处理请求,但还没有完成处理。

2xx - 成功
200 OK: 请求成功。常用于GET和POST请求。
201 Created: 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立。
202 Accepted: 请求已被接受进行处理,但处理尚未完成。
204 No Content: 服务器成功处理了请求,但没有返回任何内容。
205 Reset Content: 告诉客户端重置文档视图,例如清空表单内容或重置canvas状态。
206 Partial Content: 服务器成功处理了部分GET请求。通常用于HTTP分段下载。

3xx - 重定向
301 Moved Permanently: 请求的网页已永久移动到新位置。
302 Found: 服务器目前从不同位置的网页响应请求,但请求者应该继续使用原有位置来进行后续的请求。
304 Not Modified: 自从上次请求后,请求的网页未修改过。
307 Temporary Redirect: 对于请求的资源,请求的响应是临时的移动到另一个URI。
308 Permanent Redirect (RFC 7538): 这意味着资源现在永久位于另一个URI,类似于301,但不允许HTTP方法改变。

4xx - 客户端错误
400 Bad Request: 服务器无法理解请求的格式,客户端不应该尝试再次使用相同的内容进行请求。
401 Unauthorized: 请求未经授权。这个状态码常用于需要用户认证的地方。
403 Forbidden: 服务器拒绝请求。
404 Not Found: 服务器找不到请求的网页。
405 Method Not Allowed: 请求行中指定的请求方法不能被用于请求相应的资源。
406 Not Acceptable: 服务器无法根据客户端请求的内容特性完成请求。
408 Request Timeout: 服务器等待请求时发生超时。
413 Payload Too Large: 请求的实体太大,服务器无法处理,客户端应该减小请求的大小再次请求。
429 Too Many Requests: 用户在给定的时间内发送了太多的请求("限速")。

5xx - 服务器错误
500 Internal Server Error: 服务器遇到错误,无法完成请求。
501 Not Implemented: 服务器不支持请求的功能,无法完成请求。
502 Bad Gateway: 服务器作为网关或代理,从上游服务器收到无效响应。
503 Service Unavailable: 由于临时的服务器维护或者过载,服务器当前无法处理请求。
504 Gateway Timeout: 作为网关或代理工作的服务器,没有及时从上游服务器收到请求。
507 Insufficient Storage (WebDAV; RFC 4918): 服务器无法存储完成请求所必须的内容。
511 Network Authentication Required (RFC 6585): 客户端需要进行身份验证才能获得网络访问权限。

不显示PHP的版本号

expose_php:确定是否向外界公开服务器上安装了 PHP,在 HTTP 标头中包含 PHP 版本号(例如:X-Powered-By: PHP/5.3.7)。
[14:36:43 root@Rocky9 html]#grep expose_php /etc/php.ini
expose_php = On
[14:40:42 root@Rocky9 html]#sed -ri 's/expose_php = On/expose_php = Off/' /etc/php.ini
[14:41:38 root@Rocky9 html]#grep expose_php /etc/php.ini
expose_php = Of
#新版本的php有独立的进程,可以通过ps aux查看
[14:41:38 root@Rocky9 html]#systemctl restart php-fpm.service 

不显示HTTP的版本号

Apache的ServerTokens指令可以设置为以下几种值,来控制服务器提供给客户端的信息量:
Full: 发送Apache的完整版本号,以及编译时的服务器版本和操作系统信息。
OS: 发送Apache的主版本号和操作系统信息,但不包括次要版本号。
Minor: 发送Apache的主版本号和次要版本号,但不包括补丁级别。
Major: 仅发送Apache的主版本号。
Prod: 仅发送"Apache"作为响应头中的服务器值,不包含版本号或操作系统信息。
Minimal: 发送最少的信息,仅Apache的主版本号。

ServerSignature指令控制是否在服务器生成的页面底部(如错误页面)显示Apache的版本号。要禁用这一功能,你需要将ServerSignature设置为Off。

vim /etc/httpd/conf/httpd.conf
ServerTokens Prod
ServerSignature Off

# 如果是ubuntu22.04中安装的apache2,修改完不起作用,需要查看下面文件是否有对应配置
vim /etc/apache2/conf-enabled/security.conf

替换时区

[15:22:20 root@Rocky9 html]#grep zone /etc/php.ini 
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =
[15:23:05 root@Rocky9 html]#sed -i '/date.timezone =/c date.timezone =Asia/Shanghai' /etc/php.ini 
[16:08:30 root@Rocky9 html]#grep zone /etc/php.ini 
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone =Asia/Shanghai
[16:08:32 root@Rocky9 html]#systemctl restart php-fpm.service
vim /var/www/html/info.php
<?php
phpinfo();
?>

PHP执行过程以及Opcode

加载PHP脚本:当请求到达Web服务器,并且目标是一个PHP文件时,PHP解释器(通常作为Apache的模块或者PHP-FPM等)会被触发来处理这个请求。
词法分析(Lexing):PHP代码首先被词法分析器处理,这一步骤将原始的PHP代码字符串转换为标记(tokens),这些标记使得代码更容易被进一步分析和解释。
语法分析(Parsing):接下来,语法分析器接收这些标记,并根据PHP语言的语法规则,将它们组织成一个抽象语法树(AST)。这个树结构表示了PHP代码的逻辑结构。
编译:PHP代码的抽象语法树随后被编译成opcode(操作码)。opcode是底层的、可以被PHP虚拟机执行的指令集。每一条PHP代码都会被转换成一系列的opcode。
执行:编译得到的opcode由Zend Engine的虚拟机(VM)执行。Zend Engine是PHP的核心,负责执行opcode,进行内存管理等。
响应:PHP脚本执行的最终结果被发送给Web服务器,然后传送给客户端。
Opcode(操作码)
定义:Opcode(Operation Code)是中间代码(Intermediate Code)的一种形式,它代表了低级的、可以直接被虚拟机执行的指令。每个opcode代表了一个操作,比如变量赋值、条件分支、循环等。
作用:Opcode是PHP代码执行的中间步骤,它是抽象语法树到最终执行结果的桥梁。通过将PHP代码编译成opcode,PHP实现了代码的高效执行。
优化和缓存:由于每次执行PHP脚本都需要编译成opcode,这个过程可能会消耗一定的资源,特别是对于复杂或者大型的PHP应用。为了优化性能,可以使用opcode缓存(如OPcache)来存储已编译的opcode。当同一PHP脚本再次请求执行时,可以直接使用缓存的opcode,避免重复编译,从而提高执行效率。

安装Discuz

#下载安装包: Discuz_X3.5_SC_UTF8_20231221.zip
# 解压:unzip  Discuz_X3.5_SC_UTF8_20231221.zip
# 将upload目录移动到/var/www/html/下重命名成forum
mv upload/ /var/www/html/forum
chown -R apache.apache /var/www/html/

#访问:http://10.0.0.107/forum

image-20240229121257702
image-20240229121323727
image-20240229121413629

wordpress提示图片大小过大

#需要修改/etc/php.ini文件中的这两个值
post_max_size = 100M
upload_max_filesize = 100M
# 重启php-fpm
systemctl restart php-fpm.service

通过Remi仓库安装PHP

使用 Remi 仓库安装 PHP 是 CentOS 和其他基于 Red Hat 的系统上的一个常见做法,尤其是当需要安装 PHP 的较新版本时。Remi 仓库提供了官方仓库中可能不包含的更新版本的 PHP。这里解释一下 Remi 安装的 PHP、Apache HTTP Server (httpd) 之间的关系,以及 PHP-FPM 的作用。

Remi 安装的 PHP 和 Apache (httpd) 的关系:

  1. 独立性:
  • Apache (httpd) 是一个开源的 Web 服务器,用于托管网站,它可以独立于 PHP 运行。
  • PHP 是一种服务器端脚本语言,用于生成动态网页内容。它可以在多种环境下运行,包括 Apache、Nginx 或作为独立的服务 (如 PHP-FPM)。
  1. 依赖与集成:
  • 当 Apache 用于托管 PHP 应用时,它需要与 PHP 集成以处理 PHP 脚本。这种集成可以通过 mod_php (Apache 的 PHP 模块) 或 PHP-FPM (FastCGI Process Manager) 实现。
  • PHP 本身并不依赖于 Apache。它可以与 Apache (通过 mod_php 或 PHP-FPM) 集成,也可以与其他 web 服务器如 Nginx (通常通过 PHP-FPM) 集成。

PHP-FPM 的作用

  • PHP-FPM (FastCGI Process Manager) 是一个 PHP FastCGI 实现,提高了 PHP 在 web 服务器环境中的性能和管理能力。PHP-FPM 作为一个独立的服务运行,监听一个端口或 socket,等待来自 web 服务器 (如 Apache 或 Nginx) 的连接。
  • 当使用 Apache 与 PHP-FPM 集成时,Apache 通过 mod_proxy_fcgi 模块将 PHP 请求转发给 PHP-FPM 处理,然后 PHP-FPM 执行 PHP 脚本并返回结果给 Apache,最终由 Apache 发送给客户端。这种方式使得 PHP 处理从 Apache 进程中分离出来,提高了灵活性和性能,特别是在高负载环境下。
  • PHP-FPM 提供了高级管理功能,如适应性进程管理和详细的状态信息,使得它成为高性能 PHP 应用的首选方式。

总结

  1. 使用 Remi 仓库安装 PHP 时,您获得的 PHP 版本通常比系统默认仓库中的版本更新。
  2. Apache (httpd) 可以独立于 PHP 运行,但如果要托管 PHP 应用,需要通过某种方式与 PHP 集成。
  3. PHP-FPM 是一种实现 PHP 支持的高性能方式,特别是与 Apache 或 Nginx 等 web 服务器结合使用时。
  4. 在使用 Remi 仓库安装 PHP 并配置 Apache 或其他 web 服务器时,重要的是了解配置文件的位置和如何正确配置这些服务以实现最佳性能和兼容性。

image-20240301142400921

#通过配置清华镜像源仓库remi来安装php
wget https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm
[root@localhost ~]# 
[root@localhost ~]# ls
anaconda-ks.cfg   remi-release-7.rpm  
[root@localhost ~]# yum -y install remi-release-7.rpm
# 查看yum源目录是否有新的生成
[root@localhost ~]# ll /etc/yum.repos.d/
total 72
drwxr-xr-x. 2 root root 4096 Aug 29  2023 bak
-rw-r--r--  1 root root 1179 Nov 14 14:05 Base.repo
-rw-r--r--  1 root root 1358 Sep  5  2021 epel.repo
-rw-r--r--  1 root root 1457 Sep  5  2021 epel-testing.repo
-rw-r--r--  1 root root  143 Nov 14 17:19 pxc.repo
-rw-r--r--  1 root root  855 Nov 28 15:39 remi-modular.repo
-rw-r--r--  1 root root  456 Nov 28 15:39 remi-php54.repo
-rw-r--r--  1 root root 1314 Nov 28 15:39 remi-php70.repo
-rw-r--r--  1 root root 1314 Nov 28 15:39 remi-php71.repo
-rw-r--r--  1 root root 1314 Nov 28 15:39 remi-php72.repo
-rw-r--r--  1 root root 1314 Nov 28 15:39 remi-php73.repo
-rw-r--r--  1 root root 1314 Nov 28 15:39 remi-php74.repo
-rw-r--r--  1 root root 1314 Nov 28 15:39 remi-php80.repo
-rw-r--r--  1 root root 1314 Nov 28 15:39 remi-php81.repo
-rw-r--r--  1 root root 1314 Nov 28 15:39 remi-php82.repo
-rw-r--r--  1 root root 1314 Nov 28 15:39 remi-php83.repo
-rw-r--r--  1 root root 2605 Nov 28 15:39 remi.repo
-rw-r--r--  1 root root  750 Nov 28 15:39 remi-safe.repo
[root@localhost ~]# 
# 查看php信息
[root@localhost ~]# yum list php*
Loaded plugins: fastestmirror
Repository epel is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * base: mirrors.cloud.tencent.com
 * epel: mirrors.cloud.tencent.com
 * extras: mirrors.cloud.tencent.com
 * remi-safe: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.aliyun.com
Available Packages
php80-php.x86_64                                      8.0.30-3.el7.remi                      @remi-safe
php80-php-cli.x86_64                                  8.0.30-3.el7.remi                      @remi-safe
php80-php-common.x86_64                               8.0.30-3.el7.remi                      @remi-safe
php80-php-mysqlnd.x86_64                              8.0.30-3.el7.remi                      @remi-safe
php80-php-pdo.x86_64                                  8.0.30-3.el7.remi                      @remi-safe
php80-php-sodium.x86_64                               8.0.30-3.el7.remi                      @remi-safe
php80-runtime.x86_64                                  8.0-3.el7.remi                         @remi-safe
......
# 安装php和mysqlnd,mysqlnd是php连接mysql所需要的,在安装php的时候会默认安装httpd,这里的php没有单独的服务是依赖httpd的
[root@localhost ~]# yum install php80-php php80-php-mysqlnd

# 下载wordpress压缩包,解压到/var/www/html/目录下即可
[root@localhost ~]#unzip latest-zh_CN.zip
[root@localhost ~]# mv wordpress/* /var/www/html/
#编写info.php测试文件
vim info.php
<?php
phpinfo();
?>
# 在浏览器访问
http://10.0.0.122/info.php
# 这里要注意的是,使用remi仓库安装的php,它的配置文件的路径在:/etc/opt/remi/php80/php.ini不是以往的/etc/php.ini
# 修改wordpress上传图片大小:
sed -i '/^upload_max_filesize/c upload_max_filesize = 100M' /etc/opt/remi/php80/php.ini
sed -i '/^post_max_size/c post_max_size = 100M' /etc/opt/remi/php80/php.ini
systemctl restart httpd

image-20240301143824322

编译安装基于 FASTCGI 模式LAMP架构多虚拟主机WEB应用

1.使用脚本编译安装http
2.使用脚本安装php8.3
3.使用脚本安装mysql 8.3
4.使用更新脚本修改配置,包括php-fpm的,以及httpd中的

#在多虚拟主机之前,可以进行测试,php是否正常工作
[root@blog ~]# vim /apps/httpd/conf/httpd.conf
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
AddType application/x-httpd-php .php
ProxyRequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/apps/httpd/htdocs/$1
ProxyPassMatch ^/(fpm_status|ping) fcgi://127.0.0.1:9000

#测试
#编译安装的网页根目录在/apps/httpd/htdocs/下
cd /apps/httpd/htdocs/
cat test.php <<EOF
<?php
phpinfo();
?>
EOF
systemctl restart httpd php-fpm
http://10.0.0.122/test.php
http://10.0.0.122/ping
http://10.0.0.122/fpm_status

#测试正常的话,加入虚拟主机,这时候要将下面两条注释掉,否则会覆盖虚拟主机里面指向的路径
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/apps/httpd/htdocs/$1
ProxyPassMatch ^/(fpm_status|ping) fcgi://127.0.0.1:9000

vim apps/httpd/conf/httpd.conf
<VirtualHost *:80>
    ServerName blog.magedu.org
    DocumentRoot /data/wordpress
    <Directory /data/wordpress>
        Require all granted
    </Directory>
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1
    ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
    CustomLog "logs/access_wordpress_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerName forum.magedu.org
    DocumentRoot /data/discuz
    <Directory /data/discuz/>
        Require all granted
    </Directory>
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/discuz/$1
    CustomLog "logs/access_discuz_log" common
</VirtualHost>

#创建目录/data/wordpress、/data/discuz
mkdir -p /data/{wordpress,discuz}
#将latest-zh_CN.zip解压出来一个wordpress目录,将目录下的所有文件拷贝到/data/wordpress下
unzip latest-zh_CN.zip
#将Discuz_X3.5_SC_UTF8_20231221.zip解压,解压出来其中有一个upload,将upload下所有的内容拷贝到/data/discuz
unzip Discuz_X3.5_SC_UTF8_20231221.zip
#修改/data/wordpress /data/discuz这两个目录的所属主
chown -R apache.apache /data/{wordpress,discuz}
#在Windows中配置hosts文件
10.0.0.122 blog.magedu.org forum.magedu.org

Rocky9.2使用dnf安装php-fpm没有9000端口

在 Rocky Linux 上通过 dnf 安装 PHP-FPM 后,如果你在 /etc/php-fpm.d/www.conf 中看到 listen = /run/php-fpm/www.sock 而不是 listen = 127.0.0.1:9000,这是因为 PHP-FPM 默认使用 Unix 套接字(Unix Socket)而不是 TCP 端口来处理 PHP 请求。

Unix 套接字是一种用于在同一台计算机上的进程间通信的方法,而不是通过网络端口。这种方法的一个优势是,它避免了网络堵塞,因为所有通信都是在本地进行的,而不需要经过网络协议栈。

在默认配置下,PHP-FPM 通过 Unix 套接字监听 PHP 请求。这也是为什么在 /etc/php-fpm.d/www.conf 中看到 listen = /run/php-fpm/www.sock 的原因。

如果你希望 PHP-FPM 监听 TCP 端口(例如 9000),你需要做以下更改:

  1. 编辑 /etc/php-fpm.d/www.conf 文件:

    sudo vim /etc/php-fpm.d/www.conf
  2. listen 配置项更改为所需的 TCP 地址和端口,例如:

    listen = 127.0.0.1:9000
  3. 保存并退出编辑器。

  4. 重新启动 PHP-FPM 服务以使更改生效:

    sudo systemctl restart php-fpm

现在,PHP-FPM 将监听 127.0.0.1 地址的 9000 端口,而不是 Unix 套接字。确保在配置 Web 服务器时,指定正确的 PHP-FPM 地址和端口。

Categories: http

邢宇宇

我是一名热情的云原生架构师和Java开发者,专注于构建可扩展的大数据解决方案。我的职业旅程始于对代码的热爱和创新技术的追求。我拥有在云计算和大数据领域深厚的技术背景,这使我能够设计和实现高效、稳健的系统。 我擅长使用Java来开发高性能的应用程序,同时也深入研究了如何利用云服务来优化数据处理过程。我热衷于探索新技术,如容器化、微服务架构和自动化,这些都是当今构建和部署现代软件解决方案的关键元素。 在我的博客中,我分享我的专业知识和行业见解,探讨最佳实践,以及如何克服在云原生生态系统中遇到的挑战。我相信通过共享和协作,我们可以推动技术的发展,创造出更好的解决方案来解决复杂问题。欢迎加入我的技术之旅,与我一起深入云原生的世界!

0 Comments

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注