前四天总结

一、Ubuntu系统下Nginx与PHP环境搭建

1. 系统依赖包安装

构建Web服务器环境前,需要安装必要的编译工具和依赖库:

复制代码
# 更新软件包列表
sudo apt update

# 安装编译工具链
sudo apt install -y gcc make build-essential

# 安装Nginx依赖库
sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev

# 安装SSL相关库
sudo apt install -y openssl libssl-dev

2. Nginx服务器安装与配置

源码下载与解压

复制代码
# 更新软件包列表
sudo apt update

# 安装编译工具链
sudo apt install -y gcc make build-essential

# 安装Nginx依赖库
sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev

# 安装SSL相关库
sudo apt install -y openssl libssl-dev

2. Nginx服务器安装与配置

源码下载与解压

复制代码
# 创建专用安装目录
cd /usr/local
sudo mkdir nginx
cd nginx

# 下载Nginx稳定版源码(以1.21.6为例)
# 假设已下载nginx-1.21.6.tar.gz到当前目录
tar -xvf nginx-1.21.6.tar.gz
cd nginx-1.21.6

编译配置与安装

复制代码
# 配置编译参数
./configure --prefix=/home/centos/nginx \
    --with-http_stub_status_module \
    --with-http_ssl_module \
    --with-http_sub_module

# 编译并安装
make
sudo make install

服务启动与验证

复制代码
# 启动Nginx服务
cd /usr/local/nginx/sbin
./nginx

# 检查运行状态
ps aux | grep nginx

# 测试访问(默认端口80)
curl -I http://localhost

3. PHP运行环境部署

添加PHP源并安装

复制代码
# 添加PHP源地址
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ondrej/php
sudo apt-get update

# 安装PHP 7.3及常用扩展
sudo apt-get install -y php7.3 php7.3-mysql php7.3-fpm \
    php7.3-curl php7.3-xml php7.3-gd \
    php7.3-mbstring php-memcached php7.3-zip
PHP-FPM配置调整

修改PHP-FPM监听方式,从socket改为TCP端口:

复制代码
# 编辑PHP-FPM池配置
sudo nano /etc/php/7.3/fpm/pool.d/www.conf

# 找到并修改以下行
; listen = /run/php/php7.3-fpm.sock
listen = 127.0.0.1:9000
服务管理
复制代码
# 启动PHP-FPM服务
sudo service php7.3-fpm start

# 验证端口监听
netstat -lnt | grep 9000

# 设置开机自启
sudo systemctl enable php7.3-fpm
Nginx与PHP集成配置
复制代码
server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

二、PHP源码编译与深度调试环境构建

1. 环境清理与准备

复制代码
# 清理旧版本PHP编译残留
cd ~/php-src-php-7.3.33
make clean
cd ~
rm -rf ~/php-src-php-7.3.33

2. 获取PHP最新源码

复制代码
# 下载PHP 8.3.23源码
wget https://github.com/php/php-src/archive/refs/tags/php-8.3.23.zip
unzip php-8.3.23.zip
cd php-src-php-8.3.23

3. 全面依赖包安装

复制代码
# 更新系统并安装编译依赖
sudo apt update
sudo apt install -y build-essential libssl-dev \
    libcurl4-openssl-dev libxml2-dev libzip-dev \
    libpng-dev libjpeg-dev libonig-dev \
    libsqlite3-dev libreadline-dev

4. 高级编译配置

复制代码
# 生成配置脚本
./buildconf --force

# 完整功能配置
./configure \
    --prefix=/usr/local/php83 \
    --with-config-file-path=/usr/local/php83/etc \
    --enable-fpm \
    --with-fpm-user=www-data \
    --with-fpm-group=www-data \
    --enable-debug \
    --enable-mbstring \
    --with-curl \
    --with-openssl \
    --with-zip \
    --with-zlib \
    --with-gd \
    --enable-pdo \
    --with-pdo-mysql \
    --with-mysqli \
    --enable-phar \
    --enable-cli

5. 优化编译与安装

复制代码
# 并行编译(利用多核CPU)
make -j$(nproc)

# 安装到指定目录
sudo make install

6. 精细化配置

php.ini开发环境配置
复制代码
# 复制开发版配置模板
sudo cp php.ini-development /usr/local/php83/etc/php.ini
sudo nano /usr/local/php83/etc/php.ini

在php.ini中添加以下配置:

复制代码
; 安全与调试配置
open_basedir = /var/www/html/src
display_errors = On
disable_functions = 
PHP-FPM配置
复制代码
# 复制配置文件
sudo cp /usr/local/php83/etc/php-fpm.conf.default /usr/local/php83/etc/php-fpm.conf
sudo cp /usr/local/php83/etc/php-fpm.d/www.conf.default /usr/local/php83/etc/php-fpm.d/www.conf

7. 服务启动与验证

复制代码
# 创建软链接方便管理
sudo ln -s /usr/local/php83/sbin/php-fpm /usr/local/bin/php-fpm83

# 启动PHP-FPM
sudo php-fpm83

# 验证进程
ps aux | grep php-fpm

# 创建全局命令别名
sudo ln -s /usr/local/php83/bin/php /usr/local/bin/php83

8. Nginx集成配置

复制代码
# 编辑Nginx站点配置
sudo nano /etc/nginx/sites-available/default

修改PHP处理部分:

复制代码
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    # 使用新的PHP-FPM端口
    fastcgi_pass 127.0.0.1:9000;
}

重启Nginx:

复制代码
sudo systemctl restart nginx

9. 环境验证

复制代码
# 创建测试文件
echo '<?php phpinfo(); ?>' > /var/www/html/src/info.php

# 命令行验证
/usr/local/php83/bin/php -v
php83 -v

三、使用Docker进行PHP源码远程调试

1. Docker环境搭建

复制代码
# 拉取PHP调试专用镜像
docker pull tuwen/phpsrc-debug:8.1-backdoor

# 运行容器(映射SSH和Web端口)
docker run -it --rm --name debug \
    -p 8080:8080 \
    -p 2222:22 \
    tuwen/phpsrc-debug:8.1-backdoor

2. SSH连接配置

容器运行后会输出私钥,保存私钥文件后连接:

复制代码
# 设置私钥权限
chmod 600 /path/to/private.key

# SSH连接容器
ssh -p 2222 -i /path/to/private.key root@your-host-ip

3. VSCode远程调试配置

  1. 安装Remote-SSH扩展

  2. 添加SSH Target:ssh -p2222 -i /path/to/private.key root@host

  3. 连接后打开目录:/usr/src/php/

  4. 安装C/C++扩展

4. 调试配置

在VSCode中创建调试配置:

复制代码
{
    "name": "PHP Debug",
    "type": "cppdbg",
    "request": "launch",
    "program": "/usr/local/bin/php",
    "args": ["-S", "0.0.0.0:8080", "-t", "/var/www/html"],
    "cwd": "${workspaceFolder}"
}

5. 创建测试文件并调试

复制代码
# 在容器中创建测试文件
echo '<?php echo "hello world"; ?>' > /var/www/html/index.php
  1. 在VSCode中找到目标代码(如ext/zlib/zlib.c:366

  2. 设置断点

  3. 启动调试会话

  4. 访问 http://host-ip:8080 触发断点

四、HTTPS/TLS安全通信深度解析

1. TLS握手过程详解

传统RSA密钥交换流程

  1. Client Hello

    • TLS版本号

    • 客户端随机数(Client Random)

    • 支持的密码套件列表

    • 会话ID

  2. Server Hello

    • 选定的TLS版本

    • 服务器随机数(Server Random)

    • 选定的密码套件

    • 服务器证书

  3. 密钥交换

    • 客户端验证证书

    • 使用服务器公钥加密预主密钥

    • 服务器用私钥解密获取预主密钥

  4. 生成会话密钥

    复制代码
    # 密钥生成原理
    master_secret = PRF(pre_master_secret, 
                        "master secret", 
                        ClientRandom + ServerRandom)
    
    # 生成对称加密密钥
    key_block = PRF(master_secret, 
                    "key expansion", 
                    ServerRandom + ClientRandom)

2. 证书验证机制

证书链验证过程;终端证书 -> 中间证书 -> 根证书

验证步骤:

  1. 检查证书有效期

  2. 验证证书签名

  3. 检查证书吊销状态(CRL/OCSP)

  4. 验证证书用途

  5. 确认根证书受信任

证书伪造防护

  • CA私钥加密证书哈希值生成签名

  • 客户端用CA公钥解密验证签名

  • 哈希值匹配则证书可信

3. 中间人攻击与防护

BurpSuite解密HTTPS条件
  1. 客户端必须信任BurpSuite的CA证书

    bash

    复制代码
    # 导入BurpSuite证书到系统信任库
    # 浏览器需安装并信任证书
  2. BurpSuite作为中间代理

    • 拦截客户端请求

    • 使用自签名证书与客户端建立TLS

    • 使用真实证书与服务器建立TLS

    • 解密、查看、修改后重新加密传输

Wireshark解密TLS流量
  1. 获取会话密钥(需配置SSLKEYLOGFILE)

  2. Wireshark导入密钥文件

  3. 自动解密TLS流量

4. 安全与效率平衡

非对称加密 vs 对称加密
特性 非对称加密(RSA) 对称加密(AES)
速度 慢(用于密钥交换) 快(用于数据传输)
密钥管理 公钥/私钥对 共享密钥
用途 身份验证、密钥交换 批量数据加密
混合加密系统优势
  1. 身份认证:数字证书确保服务器身份

  2. 密钥安全:非对称加密安全传递对称密钥

  3. 传输效率:对称加密处理实际数据传输

  4. 前向安全:每次会话使用不同密钥

5. 实操:HTTPS流量分析

使用OpenSSL分析连接
复制代码
# 查看服务器证书信息
openssl s_client -connect example.com:443 -showcerts

# 测试协议支持
openssl s_client -connect example.com:443 -tls1_2

# 检查证书链
openssl verify -CAfile ca-bundle.pem certificate.pem
TLS版本选择建议
  • 禁用TLS 1.0和1.1(已不安全)

  • 优先使用TLS 1.3

  • 兼容使用TLS 1.2

  • 配置完美前向保密(PFS)

五、安全部署检查清单

1. 服务器配置加固

复制代码
# Nginx安全配置示例
server {
    # 强制HTTPS
    listen 443 ssl http2;
    
    # 安全协议配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;
    
    # 安全头部
    add_header Strict-Transport-Security "max-age=63072000" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
}

2. PHP安全配置

复制代码
; php.ini安全设置
expose_php = Off
display_errors = Off
log_errors = On
allow_url_fopen = Off
allow_url_include = Off
disable_functions = exec,passthru,shell_exec,system
open_basedir = /var/www/html

3. 持续监控与维护

复制代码
# 定期安全扫描
# 使用工具:nmap, nikto, openssl测试

# 证书过期监控
openssl x509 -in certificate.pem -noout -dates

# 日志分析监控
tail -f /var/log/nginx/access.log | grep -E "(404|500|POST)"
相关推荐
Red丶哞2 小时前
[Django Message超全总结教程](武沛齐老师)
数据库·django·sqlite
数据知道2 小时前
PostgreSQL实战:一文掌握 pg_hba.conf 配置,涵盖密码认证、IP限制与安全策略
数据库·tcp/ip·postgresql
数据知道2 小时前
PostgreSQL实战:序列深度解析,高并发下的ID生成陷阱与优化
数据库·postgresql
Mr__Miss2 小时前
Redis网络模型
数据库·redis·面试
哈__2 小时前
2026 年国产时序数据库技术深度解析:多模态融合架构与工程实践
数据库·架构·时序数据库
亲爱的非洲野猪2 小时前
Apigee Hybrid 数据存储架构详解:Redis与数据库的精确分工
数据库·redis·架构
不想写bug呀2 小时前
Redis基础知识及五种类型操作
数据库·redis·缓存
小宇的天下2 小时前
Cadence allegro---Design Compare
数据库
小北方城市网3 小时前
SpringBoot 集成 MyBatis-Plus 实战(高效 CRUD 与复杂查询):简化数据库操作
java·数据库·人工智能·spring boot·后端·安全·mybatis