现在公司项目都是前后端分离的方式开发,有些时候由于某些新需求开发或者 bug 修改,想要让前端直接连到我本地开发环境进行调试,而前端代码我并没有,只能通过前端部署的测试环境进行测试,最简单的办法就是直接改 host 把后端测试环境的域名指向我本地的 IP,这对于 HTTP 协议的服务来说是很轻易做到的,不过公司的测试环境全部上了 HTTPS,而我本地的服务是 HTTP 协议这样就算是改了 host 也会由于协议不同导致请求失败,所以需要将本地的服务升级成 HTTPS 才行。

方案

其实 springboot 本身就支持 HTTPS( howto-configure-ssl ),但是这需要改项目代码不太优雅,于是就想直接用 nginx 反向代理到本地服务,这样在 nginx 层面做 HTTPS 就不需要改代码了,只需修改 host 将 后端测试环境域名 指向 nginx 服务的 IP 即可,而且可以适用于其它的 HTTP 服务开发调试。

签发证书

首先要生成一套证书用于 nginx 的 ssl 配置,直接使用 openssl 工具生成一套 根证书 和对应的 服务证书 。

  1. 根证书生成
# 生成一个RSA私钥openssl genrsa -out root.key 2048# 通过私钥生成一个根证书openssl req -sha256 -new -x509 -days 365 -key root.key -out root.crt     -subj "/C=CN/ST=GD/L=SZ/O=lee/OU=work/CN=fakerRoot"
  1. 服务器证书生成
# 生成一个RSA私钥openssl genrsa -out server.key 2048# 生成一个带SAN扩展的证书签名请求文件openssl req -new     -sha256     -key server.key     -subj "/C=CN/ST=GD/L=SZ/O=lee/OU=work/CN=xxx.com"     -reqexts SAN     -config 

这样就得到了三个关键文件:

root.crtserver.keyserver.crt

注:生成的服务器证书域名要支持测试环境访问的域名,否则浏览器会提示证书不安全。

nginx 配置

为了方便,直接使用 docker 启动了一个 nginx 容器进行访问,并将证书和配置文件挂载到对应的目录:

  • nginx.conf
server {    listen 443 ssl;    server_name _;    ssl_certificate "/usr/local/nginx/ssl/server.pem";    ssl_certificate_key "/usr/local/nginx/ssl/server.key";    location / {        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_set_header Host $http_host;        proxy_set_header X-NginX-Proxy true;        proxy_set_header Upgrade $http_upgrade;        proxy_set_header Connection "upgrade";        proxy_pass http://127.0.0.1:3000;        proxy_redirect off;        proxy_http_version 1.1;    }}

通过配置 ssl_certificate 和 ssl_certificate_key 来指定服务器的证书和私钥, proxy_pass 指定开发环境的访问地址。

  • 启动
docker run -d --name https -p 443:443 -v ~/forword/ssl:/usr/local/nginx/ssl -v ~/forword/config/nginx.conf:/etc/nginx/conf.d/default.conf  nginx

将 nginx 配置和证书相关文件挂载至对于的目录,并暴露 443 端口,这样服务启动后即可通过 https 访问到本地开发环境了。

安装根证书

由于服务证书是自己签发的,并不会被浏览器所信任,所以需要将 根证书 安装至操作系统中。

  1. 打开 chrome 浏览器->设置->高级->管理证书
  2. 受信任的根证书颁发机构->导入
  3. 选择之前生成的根证书 root.crt 导入即可

修改 host

在需要调试时,只需要将本地服务启动,再将 host 中将要测试的域名解析到 nginx 服务器的 IP,即可将前端请求转发到开发环境上,通过浏览器地址栏的 小锁图标 可以看到证书,已验证服务已经部署成功。

后记

本文中其实已经提到了两种解决方案了,其实还有其它的解决方案,例如使用 fidder 这种中间人攻击的方式来实现,这里就不做多叙了。

如何通过svg代码还原图片_如何通过nginx反向代理来调试代码?相关推荐

  1. nginx解决浏览器跨域问题_前端通过Nginx反向代理解决跨域问题

    在前面写的一篇文章SpringMVC解决跨域问题,我们探讨了什么是跨域问题以及SpringMVC怎么解决跨域问题,解决方式主要有如下三种方式: JSONP CORS WebSocket 可是这几种方式 ...

  2. 如何通过svg代码还原图片_【UWA学堂】如何通过技术美术师来弥合代码与艺术之间的鸿沟?...

    原文标题:The Code/Art Divide: How Technical Artists Bridge The Gap 这是一篇最初发表在<游戏开发者>上的技术文章,作者Jason ...

  3. 使用nginx负载均衡的webservice wsdl访问不到_谁说前端不用懂,Nginx 反向代理与负载均衡(超实用)...

    谁说前端不需要懂-Nginx反向代理与负载均衡 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等.用一句别人开玩笑的话来说,java十年前的技术现在还能 ...

  4. nginx 反向代理(完成图片回显示效果)

    1. Nginx 1.1 Nginx服务器介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索 ...

  5. sql server代理无法启动_谁说前端不需要懂Nginx反向代理与负载均衡

    作者 | chenhongdong 链接 | https://juejin.im/post/5b01336af265da0b8a67e5c9 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入 ...

  6. 【完整教程】nginx反向代理wss,实现不修改服务器端websocket代码加密通讯请求

    最近在用go语言的leaf框架开发H5游戏的服务器端,用websocket的方式进行服务器与客户端之间的通讯.然后之前都是本地websocket开发,要部署到facebook平台的时候,平台要求与第三 ...

  7. docker安装_使用docker在带有SSL的Nginx反向代理后面部署Quarkus或任何基于Java的微服务...

    docker安装 已经有一段时间了,但是根据一位朋友的要求,我将向您展示如何使用docker在Nginx反向代理后面部署Quarkus微服务. 我们会做什么- 我将在centos 8主机上安装dock ...

  8. nginx请求转发被拒绝_解决nginx反向代理proxy不能转发header报头

    做了一个德国高防plesk卖虚拟主机,奈何地理位置太过于遥远,控制台使用上速度难以接受.用户站点可以使用cloudflare等等的加速手段,控制台能否也这么干呢?理论是完全可以的,那么时间上手看吧.安 ...

  9. html svg导出图片,将SVG保存为图片_唐霜的博客

    原文:http://techslides.com/save-svg-as-an-image SVG超赞,但是有的时候你想把它转换为其他的图片格式,比如jpg或png.如果你用d3.js创建了一些图表, ...

最新文章

  1. armv8 汇编 绝对地址赋值_ARMv8带来的变化
  2. POJ--3268--Silver Cow Party【SPFA+邻接表】
  3. Linux 使用ntpdate自动对时
  4. mysql --prompt
  5. centos6.6安装hadoop-2.5.0(四、hadoop HA安装)
  6. 698. Partition to K Equal Sum Subsets
  7. LeetCode 1504. 统计全 1 子矩形(记录左侧的连续1的个数)
  8. 学习笔记之23-typedef
  9. 从闭包到 语法糖 装饰器
  10. 浮点上下文中的整数除法
  11. mnist数据集无法下载
  12. 有PMP证书后,如何继续成长?
  13. 10.5NOIP模拟考 dfs序+贪心
  14. 树的计数 + prufer序列与Cayley公式 学习笔记
  15. asyncore斗鱼弹幕抓取
  16. 如何获取计算机网络地址,如何查看电脑网卡获取的IP地址是多少?
  17. 新浪微博批量取消关注引发的思考
  18. [HSI论文阅读] | Deep Feature Extraction and Classification of Hyperspectral Images Based on CNNs
  19. Python使用阿里API进行情感分析
  20. AES128加密算法的实现(C/Java/C#)

热门文章

  1. Win11cpu不支持怎么办,Win11cpu不支持解决方法
  2. (Activiti6.0.0)SpringProcessEngineConfiguration配置bean时属性注入不了,问题已经找到
  3. linux 改路由表 宕机,网管宕机,服务停止?别担心,解决方案来了
  4. 移动端上下拖动调整顺序效果_HTML5 移动端的上下左右滑动问题
  5. 表达式和返回值(JS)
  6. java 静态初始化数据_Java 静态数据初始化的示例代码
  7. hash地址_hash 算法原理及应用漫谈
  8. 机器视觉硬件选型——镜头选型
  9. 【mysql处理远程登陆授权及数据库迁移备份问题】
  10. 看上90亿的当当,海航的眼光是极好的