nginx,uwsgi get方法请求参数过长怎么办

简介: nginx,uwsgi get方法请求参数过长怎么办

额外命令

cd /data/env/pyweb/bin
source activate 
killall -9 uwsgi
uwsgi -x /data/wwwroot/Logistics/Logistics.xml
nohup uwsgi /data/wwwroot/yiliao1/uwsgi.ini &
/usr/local/nginx/sbin/nginx  -s reload

前往nginx 配置文件目录

cd  /usr/local/nginx/conf

今天遇到了一个令人头痛的网络请求问题


背景说明,本人负责微信小程序的编写,但是后端用的是django

django 在外来请求为 post 的时候有csrf.CsrfViewMiddleware作为限制

通常解决办法为将前端代码和后段代码放在一起,但是由于微信小程序是提交到微信平台运行的,所以不能采用post 方法请求 django,但是采用get方法访问 django是, 本地测试正常,部署服务器时无法提交订单,因为请求参数过长,本人部署 采用了 nginx + uwsgi 的方式进行部署的 Django


所以猜测是不是nginx 限制了 get 请求头的长度 ,搜索后 发现这两个参数会影响请求头的长度,


client_header_buffer_size 代表了默认请求的长度

large_client_header_buffers 代表了 client_header_buffer_size 不足时

请求头会增大到多少

client_header_buffer_size   1k;
large_client_header_buffers  4 32k;

nginx全部配置文件

user root;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen 80;
        server_name www.limengkai.work limengkai.work;
        large_client_header_buffers 4 32k;
            client_header_buffer_size  1k;
        rewrite ^(.*)$ https://${server_name}$1 permanent; 
    }
    server {
        listen 443 ssl http2;
        server_name www.limengkai.work limengkai.work;
        root /data/wwwroot/Logistics; #项目路径
        charset utf-8;
        ssl_certificate   /data/wwwroot/Logistics/1701030_www.limengkai.work.pem;#.pem证书路径
        ssl_certificate_key  /data/wwwroot/Logistics/1701030_www.limengkai.work.key;#.key证书路径
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        large_client_header_buffers  4 32k;
        client_header_buffer_size   1k;
        error_page 497  https://$host$request_uri;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8999;
           uwsgi_param UWSGI_SCRIPT Logistics.wsgi;
           uwsgi_param UWSGI_CHDIR /data/wwwroot/Logistics/;#项目路径
        }
    server {
        listen 1443 ssl http2;
        server_name www.limengkai.work limengkai.work;
        charset utf-8;
        ssl_certificate   /data/wwwroot/yiliao1/1701030_www.limengkai.work.pem;#.pem证书路径
        ssl_certificate_key  /data/wwwroot/yiliao1/1701030_www.limengkai.work.key;#.key证书路径
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        error_page 497  https://$host$request_uri;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:5000;      # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
     }
     location /OnlineMedical/ {
           root /usr/local/nginx/html;
           index index.html;      # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
     }
        access_log  /data/wwwroot/yiliao1/www.limengkai.work.log;
        error_log  /data/wwwroot/yiliao1/www.limengkai.work.error.log;
    }
    server {
    listen 1401;             # 端口号 django 教程 
    server_name www.limengkai.work limengkai.work;           # 配置域名信息
    root /home/tomcat/apache-tomcat-9.0.21/webapps/web2_war/mk_learn/;               # 静态页面根目录
    index index.html;
    }
    server {
    listen 1402;             # 端口号  顾客的 网上书城
    server_name www.limengkai.work limengkai.work;           # 配置域名信息
    root /home/tomcat/apache-tomcat-9.0.21/webapps/web2_war/mk_learn/as2/;               # 静态页面根目录
    index index.html;
    }
    server {
    listen 1403;             # 端口号 
    server_name www.limengkai.work limengkai.work;           # 配置域名信息
     location / {
           root html/OnlineMedical;              # 静态页面根目录
       index   index.html;
     }
     location /OnlineMedical/static/{
      alias /usr/local/nginx/html/OnlineMedical/static/;
     }
    }
}

但是 uwsgi 依旧需要更改配置文件 ,才可以解决问题,

添加

true

32768

即可,解除 对请求头的限制

<uwsgi>    
   <socket>127.0.0.1:8999</socket> <!-- 内部端口,自定义 --> 
   <chdir>/data/wwwroot/Logistics/</chdir> <!-- 项目路径 -->            
   <module>Logistics.wsgi</module>  <!-- Logistics为wsgi.py所在目录名--> 
   <processes>4</processes> <!-- 进程数 -->     
   <http-keepalive>true</http-keepalive>
   <buffer-size> 32768 </buffer-size>
   <daemonize>uwsgi.log</daemonize> <!-- 日志文件 -->
</uwsgi>
相关文章
|
4月前
|
存储 应用服务中间件 nginx
Nginx - 根据请求参数路由进行不同的响应
Nginx - 根据请求参数路由进行不同的响应
30 0
|
4月前
|
负载均衡 应用服务中间件 nginx
Django通过Nginx和uWSGI实现负载均衡
Django通过Nginx和uWSGI实现负载均衡
|
6月前
|
负载均衡 应用服务中间件 Linux
CentOS7下python3+Flask+uWSGI+Nginx+Supervisor环境搭建
在生产环境中通常用uwsgi作为Flask的web服务网关,通过nginx反向代理进行负载均衡,通过supervior进行服务进行的管理。这一套搭下来还是有一些坑要踩,本文通过一个简单的Flask web应用记录了CentOS7下python3+Flask+uWSGI+Nginx+Supervisor环境搭建的全过程,以及一些注意事项,以免遗忘。
132 0
|
28天前
|
监控 安全 前端开发
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
20 0
|
9月前
|
负载均衡 Unix 应用服务中间件
知其所以然:flask + uwsgi不要nginx,应该怎么写配置文件?
知其所以然:flask + uwsgi不要nginx,应该怎么写配置文件?
127 0
|
应用服务中间件 nginx
Nginx代理POST请求变成GET
Nginx代理POST请求变成GET
460 0
|
应用服务中间件 nginx Python
【Django部署】Nginx+uWsgi部署Django项目
最近需要部署一个Django项目但是不能用宝塔面板!呜呜呜 不能懒人式一键部署了 那就学习一下黑框框部署吧
586 0
【Django部署】Nginx+uWsgi部署Django项目
|
数据可视化 前端开发 应用服务中间件
flask+nginx+uwsgi部署服务器(详细保姆级教程)
本次项目我利用flask写了接口需要部署到服务器供前端使用,一路走来爬了很多坑,所以这一次做了详细的记录,从零开始教大家将flask项目跑起来
842 1
flask+nginx+uwsgi部署服务器(详细保姆级教程)
|
应用服务中间件 nginx
Nginx代理POST请求变成GET
Nginx代理POST请求变成GET
336 0
|
应用服务中间件 nginx Python
Python编程:uWSGI+nginx配置flask实例
Python编程:uWSGI+nginx配置flask实例
148 0