反向代理配置实践: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 系统的重要组成部分。
声明
1、部分文章来源于网络,仅作为参考。 2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!