当前位置: 首页 > news >正文

nginx配置代理服务器

Nginx 作为代理服务器时,主要用于反向代理(最常用,转发客户端请求到后端服务)或正向代理(较少用,为客户端提供访问外部网络的代理)。以下是两种场景的具体配置示例:

一、反向代理配置(最常用)

反向代理是 Nginx 最核心的功能之一,用于将客户端请求转发到后端的应用服务器(如 Java、Node.js、Python 服务等),可隐藏后端服务地址、实现负载均衡、SSL 终结等。

基础配置示例(代理单个后端服务)
# 全局配置
worker_processes auto; # 自动设置工作进程数(通常等于CPU核心数)
events {worker_connections 1024; # 每个工作进程的最大连接数
}http {include mime.types; # 引入MIME类型映射default_type application/octet-stream;# 反向代理核心配置server {listen 80; # 监听80端口(HTTP)server_name example.com; # 代理服务器域名(客户端访问的域名)# 所有请求都转发到后端服务location / {# 后端服务地址(协议://IP:端口,如Node.js服务、Java服务等)proxy_pass http://127.0.0.1:3000; # 传递客户端真实IP和请求头(重要)proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 超时设置(按需调整)proxy_connect_timeout 60s; # 连接后端超时proxy_read_timeout 60s;    # 读取后端响应超时proxy_send_timeout 60s;    # 发送请求到后端超时}}
}
配置说明:
  1. proxy_pass:指定后端服务地址(必须),格式为 协议://IP:端口协议://域名

    • 示例:proxy_pass http://127.0.0.1:3000 表示转发到本地3000端口的服务。
    • 注意:proxy_pass 后是否带 / 影响路径拼接(见下方“路径匹配规则”)。
  2. proxy_set_header:传递客户端请求头到后端,避免后端服务获取不到真实客户端信息(如 IP、Host)。

    • Host $host:传递客户端访问的域名(如 example.com)。
    • X-Real-IP $remote_addr:传递客户端真实 IP。
  3. 超时设置:防止后端服务无响应时 Nginx 长期等待,避免连接泄露。

路径匹配规则(proxy_pass/ vs 不带 /
  • 场景1location /api + proxy_pass http://backend(不带 /
    客户端请求 http://example.com/api/user → 转发到 http://backend/api/user(保留 /api 前缀)。

  • 场景2location /api + proxy_pass http://backend/(带 /
    客户端请求 http://example.com/api/user → 转发到 http://backend/user(去掉 /api 前缀)。

高级:代理多个服务(按路径区分)
server {listen 80;server_name example.com;# 1. 代理API服务(路径以/api开头)location /api {proxy_pass http://127.0.0.1:8080; # 后端API服务(如Java SpringBoot)proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}# 2. 代理前端静态资源(路径以/static开头)location /static {proxy_pass http://127.0.0.1:8000; # 前端服务(如Node.js静态服务器)proxy_set_header Host $host;}# 3. 其他请求默认返回404location / {return 404;}
}

二、正向代理配置(客户端代理)

正向代理用于为客户端提供访问外部网络的代理(如科学上网、客户端IP隐藏),配置较少见。

http {# 正向代理核心配置server {listen 8888; # 客户端需连接的代理端口# 允许客户端通过代理访问任意域名resolver 8.8.8.8; # DNS resolver(使用谷歌DNS解析外部域名)location / {# 正向代理到客户端请求的目标地址proxy_pass http://$http_host$request_uri;# 支持HTTPS代理(需配置SSL隧道)proxy_connect_timeout 10s;proxy_send_timeout 10s;proxy_read_timeout 10s;}}
}
使用方式:

客户端(如浏览器、curl)需手动设置代理为 http://代理服务器IP:8888,即可通过该代理访问外部网络。

三、配置SSL(HTTPS代理)

若需要代理 HTTPS 请求(客户端通过 https://example.com 访问),需配置 SSL 证书:

server {listen 443 ssl; # 监听443端口(HTTPS)server_name example.com;# SSL证书配置(替换为实际证书路径)ssl_certificate /path/to/cert.pem;   # 公钥证书ssl_certificate_key /path/to/key.pem; # 私钥# 代理到后端HTTP服务(Nginx终结SSL,后端用HTTP通信)location / {proxy_pass http://127.0.0.1:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}# 可选:HTTP自动跳转到HTTPS
server {listen 80;server_name example.com;return 301 https://$host$request_uri;
}

四、配置检查与生效

  1. 检查配置是否正确

    nginx -t  # 输出 "syntax is ok" 表示配置无误
    
  2. 重启Nginx生效

    nginx -s reload  # 平滑重启(不中断现有连接)
    

核心总结

  • 反向代理:用于服务器端转发请求到后端服务,配置核心是 location + proxy_pass + 头信息传递。
  • 正向代理:用于客户端代理,需配置 resolver 和代理端口。
  • 注意路径匹配规则和超时设置,生产环境建议配置 SSL 证书。

根据实际需求修改 server_nameproxy_pass 地址、端口和路径即可。

http://www.dtcms.com/a/329475.html

相关文章:

  • (50)QT 绘图里,视图 QGraphicsView、场景 QGraphicsScene 及图形项 QGraphicsRectItem 的举例
  • gunicorn + flask 处理高并发请求
  • Redis学习——Redis的十大类型String、List、Hash、Set、Zset
  • clickhouse集群的安装与部署
  • 相机按键功能解析
  • 国内时序数据库概览
  • vue导出功能
  • python学习DAY40打卡
  • RTCP详解
  • webrtc弱网-QualityRampUpExperimentHelper类源码分析与算法原理
  • Pytorch FSDP权重分片保存与合并
  • Node.js简介及安装
  • 人工到智能:塑料袋拆垛的自动化革命 —— 迁移科技的实践与创新
  • Node.js浏览器引擎+Python大脑的智能爬虫系统
  • Vue3从入门到精通: 3.5 Vue3与TypeScript集成深度解析
  • 热门手机机型重启速度对比
  • PCB题目基础练习2
  • 从“字”到“画”:基于Elasticsearch Serverless 的多模态商品搜索实践
  • aave v3 存款利息的计算方式
  • 《红黑树的原理与C++实现:详解平衡艺术的高效构建与操作》
  • 无人设备遥控器之编码技术篇
  • 【剑指offer】搜索算法
  • 力扣(跳跃游戏I/II)
  • c++26新功能—inplace_vector
  • 达梦数据库常见漏洞及处理方案
  • PostgreSQL——索引
  • TensorFlow实现回归分析详解
  • npm install 的作用
  • HTTP 请求转发与重定向详解及其应用(含 Java 示例)
  • Windows平台RTSP播放器选型与低延迟全解析及技术实践