反向代理配置实践:Nginx 与 PHP / Node.js 后端协同工作

码农资讯网 阅读:86 2025-07-18

 什么是反向代理?

反向代理是指客户端的请求并不直接访问后端服务,而是由 Nginx 先接收并转发请求给真正的后端服务器(如 PHP-FPM、Node.js、Python 等),并将结果返回给用户。

🔁 工作流程简图:

Client ──> Nginx ──> 后端服务(PHP / Node.js) ──> 数据处理 ──> Nginx ──> Client

💡 为什么要用反向代理?

优势描述
安全性后端服务隐藏于内网,仅由 Nginx 转发请求
负载均衡Nginx 可分发请求到多个后端节点
缓存与压缩静态内容缓存、gzip 压缩,减轻后端负担
路由控制可以做 URL 重写、API 分发、跨项目转发


⚙️ 实战一:Nginx 配置 PHP(通过 PHP-FPM)

适用于 Laravel、ThinkPHP、WordPress 等 PHP 项目

📁 示例项目路径

/data/www/php-site/

✅ 配置示例

server {
    listen 80;
    server_name www.codesou.cn;

    root /data/www/php-site/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;  # 或者 127.0.0.1:9000
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

⚙️ 实战二:Nginx 配置 Node.js 应用(如 Express、Nuxt)

Node 应用通常监听端口(如 localhost:3000),Nginx 用作反向代理

📁 示例服务运行命令

node app.js  # 监听 http://localhost:3000

✅ 配置示例

server {
    listen 80;
    server_name node.codesou.cn;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

📦 可选增强配置

🔐 限制后端直接访问

如 PHP-FPM 不暴露 9000 端口,仅监听 Unix Socket:

listen = /run/php/php8.1-fpm.sock

🧪 配置负载均衡(多个 Node 后端)

upstream node_pool {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

server {
    listen 80;
    server_name node.codesou.cn;

    location / {
        proxy_pass http://node_pool;
    }
}

🧩 常见问题解答

❓ PHP 页面下载不是执行怎么办?

检查 .php 配置是否有 fastcgi_pass,且路径正确,SCRIPT_FILENAME 要设置完整。

❓ Node.js 请求头丢失?

记得加上 proxy_set_header Host 和相关头部,保证请求信息不丢失。


✅ 总结

Nginx 不仅能作为 Web 服务器,还能充当高性能的反向代理服务器,灵活协作 PHP、Node.js 等多种后端技术,是构建现代 Web 系统的重要组成部分。


标签: Nginx
声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!