当前位置: 首页 > 知识库问答 >
问题:

Django uWSGI NGINX错误请求400

越开畅
2023-03-14

在尝试部署我使用django开发服务器开发的博客时收到400错误后,我开始了一个新的测试项目(使用start project,不做其他任何事情——只是在这里和那里进行一点配置)-尽可能少,以保持尽可能简单。

当我执行“manage.py runserver”时,它会显示一个页面,说我看到了这个,因为我的设置中有“DEBUG=True”。

到现在为止,一直都还不错。没有错误。

但是如果我使用uWSGI和NGINX,我会再次得到“错误请求(400)”页面。

最初,我有一些导入错误,我不得不添加一些到sys的路径。路径但现在我没有从python、NGINX或uWSGI中得到任何错误,仍然得到了400个错误页面。

我尝试了以下方法:

  • 调试=假
  • TEMPLATE_DEBUG=假
  • ALLOWED_HOSTS = ['*']
  • ALLOWED_HOSTS = '*'
  • 评论了来自MIDDLEWARE_CLASSES的django.middleware.clickjacking.XFrameOptionsMiddleware
  • 将NGINX与uWSGI一起使用,而不是将Apache与mod_wsgi一起使用(我坚持使用这个设置,因为我喜欢它,但这并没有解决我的问题)

我的设置:uWSGI、NGINX和客户端(火狐)从我的笔记本(kubuntu 14.04)中运行。Vhost/子域(cefk_blawg.localhost),它在主机文件(cefk_blawg.localhost127.0.0.1)中,并在NGINX中正确配置(我知道,因为当我使用金字塔测试项目时,它实际上像魅力一样工作)。没有防火墙挡住去路。用过的虚拟环境和pip安装了其中的所有内容(django/uwsgi/枕头/mysql-python)。

我的uwsgi。ini:

[uwsgi]

# Unix socket (full path)
socket = /tmp/cefk_blawg.sock

# Set socket permissions
chmod-socket = 666

# Master process
master = true

# Maximum number of worker processes
processes = 4

# Set timeout
harakiri = 60
harakiri-verbose = true

# Limit post-size
limit-post = 65536

# When to start buffering for post-vars
post-buffering = 1       ## none of these makes my problem go away
#post-buffering = 8192   ## none of these makes my problem go away
#post-buffering = 32768  ## none of these makes my problem go away

# Daemonize
daemonize = /home/cefk/Dokumente/cefk_blawg/uwsgi.log
pidfile = /home/cefk/Dokumente/cefk_blawg/uwsgi.pid

# Limit queue
listen = 64
max-requests = 1000

# Whatever this does .. it works for pyramid (got it from a tutorial)
reload-on-as = 128
reload-on-rss = 96

no-orphans = true
log-slow = true

# This is the full path to my virtualenv
virtualenv = /home/cefk/Dokumente/cefk_blawg/venv

# Django wsgi file
wsgi-file = /home/cefk/Dokumente/cefk_blawg/cefk_info/cefk_info/wsgi.py

# Settings file (this seems to do nothing)
# And it gets set in the wsgi.py-file
env = DJANGO_SETTINGS_MODULE=cefk_info.settings

# Set domain (this seems to do nothing)
#domain = cefk_blawg.localhost

# Django-project base directory (this seems to do nothing)
#chdir = /home/cefk/Dokumente/cefk_blawg/cefk_info

# This seems to do nothing
#pythonpath=/home/cefk/Dokumente/cefk_blawg/cefk_info/cefk_info/

# Set vhost (this seems to do nothing)
#vhost = true

# Clean up environment on exit
vacuum = true

我的wsgi.py文件:

import os
import pprint
import site
import sys
from django.core.wsgi import get_wsgi_application

base_parent = '/home/cefk/Dokumente/cefk_blawg/'
base = '/home/cefk/Dokumente/cefk_blawg/cefk_info/'

sys.path.append(base_parent)
sys.path.append(base)

site.addsitedir(
    '/home/cefk/Dokumente/cefk_blawg/venv/local/lib/python2.7/site-packages'
)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cefk_info.settings")

activate_env = '/home/cefk/Dokumente/cefk_blawg/venv/bin/activate_this.py'
execfile(activate_env, dict(__file__=activate_env))

# I stole this shamelessly from another stackoverflow-post - this is good to have
class LoggingMiddleware:
    def __init__(self, application):
        self.__application = application

    def __call__(self, environ, start_response):
        errors = environ['wsgi.errors']
        pprint.pprint(('REQUEST', environ), stream=errors)

        def _start_response(status, headers, *args):
            pprint.pprint(('RESPONSE', status, headers), stream=errors)
            return start_response(status, headers, *args)

        return self.__application(environ, _start_response)

application = LoggingMiddleware(get_wsgi_application())

这是我的请求/响应,来自wsgi中的LoggingMiddleware。py:

(
    'REQUEST',
    {
        'CONTENT_LENGTH': '',
        'CONTENT_TYPE': '',
        'DOCUMENT_ROOT': '/home/cefk/Dokumente/cefk_blawg/cefk_info/cefk_info',
        'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'HTTP_ACCEPT_ENCODING': 'gzip, deflate',
        'HTTP_ACCEPT_LANGUAGE': 'de,en-US;q=0.7,en;q=0.3',
        'HTTP_CACHE_CONTROL': 'max-age=0',
        'HTTP_CONNECTION': 'keep-alive',
        'HTTP_DNT': '1',
        'HTTP_HOST': 'cefk_blawg.localhost',
        'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0',
        'PATH_INFO': '/',
        'QUERY_STRING': '',
        'REMOTE_ADDR': '127.0.0.1',
        'REMOTE_PORT': '42518',
        'REQUEST_METHOD': 'GET',
        'REQUEST_URI': '/',
        'SERVER_NAME': 'cefk_blawg.localhost',
        'SERVER_PORT': '80',
        'SERVER_PROTOCOL': 'HTTP/1.1',
        'UWSGI_SCHEME': 'http',
        'uwsgi.node': 'lt',
        'uwsgi.version': '2.0.5.1',
        'wsgi.errors': <open file 'wsgi_errors', mode 'w' at 0x7ff4337110c0>,
        'wsgi.file_wrapper': <built-in function uwsgi_sendfile>,
        'wsgi.input': <uwsgi._Input object at 0x7ff437271e70>,
        'wsgi.multiprocess': True,
        'wsgi.multithread': False,
        'wsgi.run_once': False,
        'wsgi.url_scheme': 'http',
        'wsgi.version': (1, 0)
    }
)
('RESPONSE', '400 BAD REQUEST', [('Content-Type', 'text/html')])
[pid: 2652|app: 0|req: 1/1] 127.0.0.1 () {42 vars in 675 bytes} [Thu Jun 12 17:16:59 2014] GET / => generated 26 bytes in 150 msecs (HTTP/1.1 400) 1 headers in 53 bytes (1 switches on core 0)

编辑:这是我的nginx配置(请注意,文件夹名称在此期间可能已更改-请忽略此项):

# Server configuration
server {
    # Make site accessible from http://cefk_blawg.localhost/
    server_name cefk_blawg.localhost;

    root /home/cefk/Dokumente/cefk_blawg_django;

    # Set charset
    charset utf-8;
    client_max_body_size 100M;

    location /static {
        autoindex on;
        alias /home/cefk/Dokumente/cefk_blawg_django/static;
    }

    location /media {
        autoindex on;
        alias /home/cefk/Dokumente/cefk_blawg_django/media;
    }

    ################################
    # Port-based (old)             #
    ################################
    #location / {
    #    try_files $uri @application;
    #}  

    #location @application {
    #    include /etc/nginx/uwsgi_params;
    #    uwsgi_pass 127.0.0.1:8000;
    #}
    ################################
    # /Port-based (old)            #
    ################################

    location / {
        include /etc/nginx/uwsgi_params;
        uwsgi_pass unix:///tmp/cefk_blawg.sock;
    }
}

/编辑

我没有主意了。

请帮忙。

共有3个答案

东门文斌
2023-03-14

因为我在5年前问过这个问题,我可能错了。但我现在会尽我所能回答它,因为所有的答案似乎离我的解决方案很远。

我最近在几个项目中再次使用Django,遇到了类似的问题。

我做错了什么的清单:

  • uwsgi是否已安装在virtualenv中以及系统的全局上
  • uwsgi配置中的应用程序路径错误
  • uwsgi配置中的virtualenv路径错误
  • 用于连接uwsgi和nginx的套接字文件的权限设置不正确

这就是我能想到的,我一直在做错事,回到今天。

我希望这能帮助所有在设置中挣扎的人。

杜俊远
2023-03-14

您可以在服务器上设置DEBUG=True,重新启动uwsgi服务,并在浏览器中检查django的调试输出。django的开发服务器没有出现任何错误,这并不意味着该错误与nginx或uwsgi服务有关。

凌和悦
2023-03-14

在设置中。py公司

ALLOWED_HOSTS = ['*']

会解决的

 类似资料:
  • 我正在使用实现一个联系人应用程序。现在,我正试图通过发送以下格式的put请求来更新联系人 我将XML作为字符串发送,作为请求的主体。这是我的xmlString(请求主体) 我写了下面的代码来发送更新联系人的PUT请求。 当我试图在中发送请求时,联系人更新成功。但是当我试图运行上面的程序时,我得到了 400错误请求错误 我不知道我哪里出错了。任何帮助都将不胜感激!

  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常:

  • 目前从Angular JS controller中,我试图将JSON数据发送到后端服务。但是我有400个错误的请求错误。 在Controller中,我试图通过http服务发送数据,如下所示:

  • 我得到了这个错误,有什么想法会导致它吗?我试图发送一个DTO,它有一个扩展抽象类的对象列表,我想这个问题可能是因为DTO中的列表,还是因为抽象类的子类?

  • 我正在为一个项目使用Hackerrank API。查看官方文档,点击这里! 在他们的网站上有一个使用UNIREST的例子, 由于我使用的是axios,所以我将其转换为类似的axios代码,如下所示: 我希望这只适用于示例中所示的示例,但它给我带来了以下错误: 请求失败,状态代码为400 错误:请求失败,状态代码为400 在createError(createError.js:16) 在sett(s

  • 我正在尝试从访问代码中获取访问令牌。但存在 400 错误请求错误的错误 我正在使用此链接获取访问代码 https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 响应此链接,我正在获取查询字符串中的代码,返回 URL 代码=Mh12d04c8

  • 我正在尝试搜索亚马逊的产品广告,并使用botlenose来帮助我做到这一点。但是,我刚刚收到HTTP错误400。 其他一些重要信息: 我来自巴西,我的标签也来自亚马逊。这是个问题吗? 我确实检查了我的钥匙、秘密和标签,一切正常。我确实在StackOverflow上查看了其他一些问题,但对我来说没有任何效果。 当然,出于安全原因,我更改了密钥。 Traceback(最近一次调用最后一次):File"

  • 目标是通过ajax将对象发送到另一台服务器,这是我为CORS设置的,下面是代码。ajax代码片段: 正确发布数据,但使用