【python】flask+nginx配置

摘要:
背景信息:Wordpress服务A有一个烧瓶服务B,Gunicorn已启动。八个进程使用nginx代理访问A,然后跳转到B。flask服务B有一个文件上传操作。使用nginx后,发现大型文件无法上传。wordpress1.1.1.1/a-˃flask127.0.0.1/a-˃wordpress1.1.1.1/post-˃flask127.0.0.1/postflash中存在全局变量。在跳过nginx后,原始请求可能会被另一个进程接管,导致无法获得正确的信息。

背景信息

  1. 有wordpress服务A
  2. 有flask服务B, gunicorn启动,8个进程
  3. 用nginx代理,实现访问A然后跳转到B

问题

  1. flask服务B上有文件上传操作,用nginx后发现无法上传大文件。
    解决: nginx代理配置中有文件大小限制client_max_body_size,修改即可
location /test{
                proxy_pass http://127.0.0.1:8001/test;
                proxy_redirect     off;
                proxy_set_header   Host             localhost;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                client_max_body_size 100m;
        }
  1. 访问wordpress的1.1.1.1/a,通过nginx跳转到flask服务的127.0.0.1/b,127.0.0.1/b上有一个上传按钮,上传文件应该交由127.0.0.1/b的post处理,但由于nginx转发,跳转到了1.1.1.1/b post,结果就会找不到对应的服务接口
    解决:将flask和wordpress上的url使用相同的名字。wordpress 1.1.1.1/a -> flask 127.0.0.1/a -> wordpress 1.1.1.1/a post -> flask 127.0.0.1/a post
    (这个方法不好,因为flask和wordpress耦合了,但是我没有找到正确的解决方案,只好临时用这个了)

  2. flask中有全局变量,通过nginx跳转后,原本的请求可能由另一个进程接管,导致无法获取正确的信息。
    解决:用session解决,session中的变量是跨进程共享的,把状态信息放入session变量即可。此外,session也解决了用户识别问题,避免了多个用户同时请求导致的冲突。

免责声明:文章转载自《【python】flask+nginx配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[.net]数组SQL Server 事务、异常和游标下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python学习————drf(三)

1 请求和响应 1.1 请求 # 请求对象 # from rest_framework.request import Request def __init__(self, request, parsers=None, authenticators=None, negotiator=None, parser_cont...

Vscode + Python + Django开发环境常见问题

Vscode 越来越好用了,轻量还跨平台。 1, 主程序安装。 2. 汉化:左侧工具条的扩展菜单,搜索 chinese 第一个就是汉化包 ,安装后重启。 3. 安装Python扩展:还是扩展菜单,搜索python 一般第一个就是, 注释为:Linting,Debugging (multi-threaded, ..... 4. 我用过Kite 自动补全,还不...

scrapyd-deploy 把scrapy项目打包上传部署到scrapyd服务端报错 Deploy failed (500)

Outline 在把scrapy任务部署到scrapyd服务上时,遇到问题一直不成功: 报错如下: (Deploy failed (500):,部署失败) scrapyd-deploy muji_data_python_spider -p muji_data_python_spider Packing version 1617328541 scrapyd...

es查询示例

1. 建立连接 from elasticsearch import Elasticsearch es = Elasticsearch(["localhost:9200"]) 2. 查询所有数据 # 方式1: es.search(index="index_name", doc_type="type_name") # 方式2: body...

python标准库介绍——32 Queue 模块详解

Queue 模块 ``Queue`` 模块提供了一个线程安全的队列 (queue) 实现, 如 [Example 3-2 #eg-3-2] 所示. 你可以通过它在多个线程里安全访问同个对象. ====Example 3-2. 使用 Queue 模块====[eg-3-2] ``` File: queue-example-1.py...

怒肝半月!Python 学习路线+资源大汇总

Python 学习路线 by 鱼皮。 原创不易,请勿抄袭,违者必究! 大家好,我是鱼皮,肝了十天左右的 Python 学习路线终于来了~ 和之前一样,在看路线前,建议大家先通过以下视频了解几个问题: Python 为什么这么火? 为什么都在说学 Python 找不到工作?Python 真香么? 我要学 Python 么? 怎么快速学习? 视频地址:...