额外命令
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>