type
Post
status
Published
date
Apr 1, 2023
slug
summary
事情是来自我们公司内部引用了一个开源系统,其架构为Django + React,但部署的服务是我们临时是使用内网穿透的本地机器,且开启ssl和反向代理后所遇到的问题
tags
Linux
category
爱折腾
icon
password
Property
Apr 7, 2023 07:53 AM
事情是来自我们公司内部引用了一个开源系统,其架构为Django + React,但部署的服务是我们临时是使用内网穿透的本地一台普通机器,但使用穿透和反向代理后所遇到的问题
🧐问题来源
由于我们后台服务会处理url,拼接好host再将url给前端,亦或是请求自身的静态资源时,由于我们反代的原因导致request的scheme无法传递到django中

🤔问题分析
- 一般情况下我们部署前端项目是由前端提前将后端的host配置env中,本次所遇问题类似,但情况不同
- 由于是django并没有做前后端分离,其提供web服务的能力是由django + uwsgi,所以我们的js是在django项目中
- 在请求阶段我们完全可以通过用户request的scheme、http_host来区分用户的请求域名和http协议,这点是完全OK的,但当我们又上了一层frp内网穿透 + nginx 并且开启了ssl,情况就变了
- 当用户请求公网nginx时,nginx反向代理转发frp的8100端口时,是用什么协议呢?若是用户请求发起的是https ,我们配置nginx proxy_pass 是http://localhost 其就会导致https的请求信息并没有传到django中,而django解析出来的request.scheme为http
但是配置proxy_pass 为https时,用户请求http时就会有问题,除非开启强制https
简单粗暴解决方案:在公网nginx的 location / 和 location .js 中所设置直接开启全局过滤替换
更简单的方式是开启强制https,并且proxy_pass 为https://xxx ,但并不是我想要的效果

- 作者:Javen73
- 链接:https://blog.javen73.com/article/f7e651f6-9a11-4c4b-9855-0e942f94344c
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章







