使用WSGIServer修改静态文件

背景:公司水务项目要求提供一个以POST方法修改静态文件的接口,由于nginx已经关闭了对POST方法的支持,并且开启POST方法后也无法去修改静态文件,所以需要额外的一个api接口去修改,而python的WSGIServer正好适用

一、使nginx支持POST方法

1、下载nginx的tar包:http://nginx.org/download/nginx-1.15.9.tar.gz

2、解压tar包后,修改src/http/modules/ngx_http_static_module.c文件,将文件中的NGINX_HTTP_POST选项,注释,如下图:

3、为nginx添加nginx-upload-module模块:

模块下载地址:https://github.com/winshining/nginx-upload-module

直接git conle https://github.com/winshining/nginx-upload-module即可

4、然后编译并安装nginx即可,下面为Dockerfile内容:

FROM ubuntu
ADD nginx-1.15.9.tar.gz nginx-upload-module.tar.gz /opt/
RUN apt update   && apt -y install python3.7 python3-pip libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev make gcc   && cd /opt/nginx-1.15.9   && ./configure --with-debug --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=../nginx-upload-module --with-http_ssl_module   && make   && make install   && mkdir /opt/nginx/conf/conf.d   && rm -rf /opt/nginx-1.15.9 /opt/nginx-upload-module   && ln -s /usr/bin/python3.7  /usr/bin/python   && apt -y autoclean
COPY nginx.conf /opt/nginx/conf/
COPY water.conf /opt/nginx/conf/conf.d/
ADD ["upload.py", "/opt/"]
ENV PYTHONPATH="/usr/local/lib/python3.6/dist-packages:$PYTHONPATH"
RUN pip3 install flup-py3
EXPOSE 80 443
VOLUME /opt/openapi
CMD nginx && python /opt/upload.py

二、WSGIServer的脚本编写

1、编写upload.py脚本

#!/usr/bin/env python
# coding=utf-8

import os
from flup.server.fcgi import WSGIServer

def write_file(filename, file_body):
    if os.path.exists(filename):
        with open(filename, ‘w+‘, encoding=‘utf-8‘) as f:
            f.write(file_body)

def get_environ(environ):
    rquest_method = environ["REQUEST_METHOD"]
    str1 = "rquest_method:" + rquest_method + "\r\n"
    query_string = environ["QUERY_STRING"]
    str1 += ",query_string:" + query_string + "\r\n"
    request_uri = environ["REQUEST_URI"]
    str1 += ", request_uri:" + request_uri + "\r\n"
    remote_addr = environ["REMOTE_ADDR"]
    str1 += ",remote_addr:" + remote_addr + "\r\n"
    remote_port = environ["REMOTE_PORT"]
    str1 += ",remote_port:" + remote_port + "\r\n"

    request_body_size = int(environ.get(‘CONTENT_LENGTH‘, 0))
    body = environ[‘wsgi.input‘].read(request_body_size)
    str_body = str(body, encoding="utf-8")
    str1 += ",body:" + str_body + "\r\n"
    if len(str_body):
        file_uri = request_uri.replace(‘/upload‘, ‘/opt/openapi‘)
        write_file(file_uri, str_body)
    return str1

def webapp(environ, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/plain‘)])
    str2 = get_environ(environ)
    content = str2
    return [content]

if __name__ == ‘__main__‘:
    WSGIServer(webapp, multithreaded=True, multiprocess=False, bindAddress=(‘127.0.0.1‘, 10080)).run()

2、配置nginx的配置文件:

server {
    listen       80;
    server_name  dev-water.wavewisdom-bj.com;
    access_log  /opt/nginx/logs/water_access.log;
    error_log /opt/nginx/logs/water_error.log;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /openapi {
          alias /opt/openapi;
        add_header Content-Type application/json;
    }
    location /upload {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:10080;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

三、以上即为全部内容,然后进行post测试

1、post方法修改文件

2、获取文件

原文地址:https://www.cnblogs.com/caibao666/p/12310941.html

时间: 2024-08-02 07:05:06

使用WSGIServer修改静态文件的相关文章

Nginx修改静态文件访问路径

外网用户访问服务器的 Web 服务由 Nginx 提供,Nginx 需要配置静态资源的路径信息才能通过 url 正确访问到服务器上的静态资源.打开 Nginx 的默认配置文件 vim /usr/local/nginx/conf/nginx.conf 将service中添加如下配置 root 静态文件根路径 示例代码:/etc/nginx/nginx.conf user nobody nobody; worker_processes 2; error_log /usr/local/nginx/lo

maven jetty 启动后,不能修改静态文件,js,css,html

解决办法: 1.从jetty的jar包中(位置可能不同,有的jetty-web中)拷贝一份webdefault.xml文件 2.将webdefault.xml 中的useFileMappedBuffer  设置为false. <init-param> <param-name>useFileMappedBuffer</param-name> <param-value>false</param-value></init-param> 3.

Django的配置文件和静态文件以及路由

配置文件 1. BASE_DIR BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 当前工程的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径. 2. DEBUG 调试模式,创建工程后初始值为True,即默认工作在调试模式下. 作用: 修改代码文件,程序自动重启 Django程序出现异常时,向前端显示详细的错误追踪信息 注意:部署线上运行的Django不要运行在调式模式

Python Django 之 静态文件存放设置

一.静态文件存放路径设置STATICFILES_DIRS 1.在django项目目录下面新建静态文件保存目录 2.在setting中添加相应寻找静态文件目录的配置 STATICFILES_DIRS=( os.path.join(BASE_DIR,"static"),) 3.将jquery放入相应路径中 4.验证静态文件的路径设置 1)url from django.contrib import adminfrom django.urls import pathfrom blog imp

windows环境vagrant修改静态资源文件,centos虚拟机中nginx的web环境下不生效

最近上手krpano,本地修改了krpano.html文件或者xml文件,在虚拟机环境打开文件是修改过来了,在nginx中就是不生效. 修改nginx.conf中http{}中的 sendfile        on; 改成 sendfile        off;  修改后立刻生效. 附带一份nginx配置说明,备忘. ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总

IDEA springboot 项目静态文件修改不更新的问题

springboot 项目的页面和静态文件,在项目启动后,修改无效.按照下面的配置可以解决问题. 1.file-setting 勾选项目自动构建 2.使用快捷键 ctrl+ shift+ alt + / 勾选复选框后重启,就可以了. 原文地址:https://www.cnblogs.com/yg_zhang/p/10730507.html

django 模板使用静态文件

1.新建项目 2.新建app,并在install_app中添加该app 3.和app文件夹并列新建static.和TEMPLATES  文件夹,分别放静态文件和模板 4.setting.py中设置 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.path.join(BASE_DIR, "templates").replace("\\"

ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介

概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要介绍了ASP.NET Core中StaticFile.Middleware.CustomizeMiddleware和Asp.NetCore Identity.但是由于所有的ASP.NET Core的版本有些老,所以,此次重写一次.使用最新的ASP.NET Core 1.1版本.对于ASP.NET Core 1.1 Preview 1会在以后的文章中介绍 目录 使用静态文件 使用路由

Idea使用记录--每次修改JS文件都需要重启Idea才能生效解决方法

最近开始使用Idea,有些地方的确比eclipse方便.但是我发现工程每次修改JS或者是JSP页面后,并没有生效,每次修改都需要重启一次Tomcat这样的确不方便.我想Idea肯定有设置的方法,不可能有这么不方便的功能存在. 需要在Tomcat的设置中为: on 'update' action:当用户主动执行更新的时候更新 快捷键:Ctrl + F9 on frame deactication:在编辑窗口失去焦点的时候更新 你可以根据自己的需求进行设置,我这里两个都有设置. 如果你的工程中没有