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

Nginx反向代理

配置步骤

  1. 确保内网服务可访问
    在Nginx服务器上测试内网服务是否可达(如 curl http://内网IP:端口)。

  2. 修改Nginx配置文件
    编辑Nginx配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ 目录下)。

  3. 添加反向代理配置
    示例配置(将公网IP的80端口代理到内网服务 192.168.1.100:8080):

    server {listen 80;  # 监听公网IP的80端口(HTTP)server_name your-public-ip.com;  # 替换为公网IP或域名location / {proxy_pass http://192.168.1.100:8080;  # 内网服务地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
    }
  4. 保存并测试配置

    sudo nginx -t        # 检查配置语法
    sudo systemctl reload nginx  # 重启Nginx生效

关键参数说明

配置项作用
listen 80;监听公网IP的80端口(HTTP),如需HTTPS改用 listen 443 ssl;
server_name填写公网IP或域名(若无私用域名可直接用 _ 或省略)
proxy_pass核心参数:指向内网服务的地址(格式:http://内网IP:端口
proxy_set_header传递客户端真实IP和Host信息,避免内网服务丢失来源信息

高级场景配置

1. 通过域名区分多个内网服务
server {listen 80;server_name service1.your-domain.com;  # 域名1location / {proxy_pass http://192.168.1.101:8000;}
}server {listen 80;server_name service2.your-domain.com;  # 域名2location / {proxy_pass http://192.168.1.102:9000;}
}
2. 启用HTTPS加密
server {listen 443 ssl;server_name your-domain.com;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/privkey.pem;location / {proxy_pass http://192.168.1.100:8080;proxy_set_header Host $host;proxy_set_header X-Forwarded-Proto $scheme;  # 告诉内网服务是HTTPS}
}
3. 路径转发(非根路径)
location /api/ {proxy_pass http://192.168.1.100:3000/;  # 注意结尾的斜杠(/)会移除/api前缀
}

网络与安全设置

  1. 防火墙开放端口

    sudo ufw allow 80/tcp    # 开放HTTP端口
    sudo ufw allow 443/tcp   # 开放HTTPS端口
  2. 路由器端口转发(如果Nginx不在公网)
    将公网IP的端口(如80)转发到运行Nginx的内网服务器IP和端口。

  3. 安全建议

    • 使用HTTPS加密流量(免费证书可通过Let's Encrypt获取)。

    • 限制访问IP:Nginx配置中通过 allow/deny 控制来源IP。

    • 内网服务本身配置防火墙,仅允许Nginx服务器访问。


验证访问

通过公网地址测试访问:

curl http://公网IP       # 或浏览器访问

若返回内网服务的响应内容,则配置成功。

💡 提示:若遇到502错误,检查内网服务是否运行、Nginx能否访问内网IP、内网防火墙是否放行Nginx服务器的IP。

http://www.xdnf.cn/news/10354.html

相关文章:

  • NodeJS全栈开发面试题讲解——P12高性能场景题
  • Chorme如何对于youtube视频进行画中画背景播放?
  • 多模态AI的企业应用场景:视觉+语言模型的商业价值挖掘
  • 8天Python从入门到精通【itheima】-62~63
  • 结合源码分析Redis的内存回收和内存淘汰机制,LRU和LFU是如何进行计算的?
  • 深度学习|pytorch基本运算-乘除法和幂运算
  • 初识PS(Photoshop)
  • 【Oracle】安装单实例
  • 【Go】2、Go语言实战
  • python打卡day42@浙大疏锦行
  • 动态库导出符号与extern “C“
  • 2025年05月总结及随笔之家电询价及以旧换新
  • 剪枝中的 `break` 与 `return` 区别详解
  • APM32主控键盘全功能开发实战教程:软件部分
  • 【论文解读】Deformable DETR | Deformable Transformers for End-to-End Object Detection
  • 题单:最大公约数(辗转相除法)
  • 安全漏洞修复导致SpringBoot2.7与Springfox不兼容
  • 爬虫工具链的详细分类解析
  • 力扣刷题Day 66:分割回文串(131)
  • 【Redis】数据类型补充
  • t018-高校宣讲会管理系统 【含源码!】
  • 浅谈简历制作的四点注意事项
  • NLP学习路线图(十四):词袋模型(Bag of Words)
  • Go语言中的数据类型转换
  • 数据结构之ArrayList
  • 【 SpringCloud | 微服务 网关 】
  • CppCon 2014 学习:Unicode in C++
  • win10手动调整日期和时间
  • ​​技术深度解析:《鸿蒙5.0+:无感续航的智能魔法》​
  • Java基本数据类型、抽象类和接口、枚举、时间类、String类全面介绍