【问题标题】:Nginx ignores client_max_body_size defined in nginx.conf in /etc/nginx/conf.d/Nginx 忽略 /etc/nginx/conf.d/ 中 nginx.conf 中定义的 client_max_body_size
【发布时间】:2019-07-27 17:16:48
【问题描述】:

我有一个通过 django 服务器公开的上传 api。每当我尝试上传任何超过 1MB 的文件时,我都会从 nginx 收到一条错误消息,提示“413 Entity too large”

我有一个名为 nginx.conf 的配置文件,其中 client_max_body_size 在目录 /etc/nginx/conf.d 中设置为 75M 在/etc/nginx/nginx.conf 文件中,我将include /etc/nginx/conf.d/*.conf; 作为http 块的最后一行,那么为什么我会看到这个错误?

我已经按照https://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html?highlight=client_max_body_size 使用 uWSGI 和 Nginx 配置 Django 和 webserver

nginx 版本 1.15.6

# /etc/nginx/nginx.conf

user nginx;

# Set number of worker processes automatically based on number of CPU cores.
worker_processes auto;

# Enables the use of JIT for regular expressions to speed-up their processing.
pcre_jit on;

# Configures default error logger.
error_log /var/log/nginx/error.log warn;

# Includes files with directives to load dynamic modules.
include /etc/nginx/modules/*.conf;


events {
        # The maximum number of simultaneous connections that can be opened by
        # a worker process.
        worker_connections 1024;
}

http {
        # Includes mapping of file name extensions to MIME types of responses
        # and defines the default type.
        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        # Name servers used to resolve names of upstream servers into addresses.
        # It's also needed when using tcpsocket and udpsocket in Lua modules.
        #resolver 208.67.222.222 208.67.220.220;

        # Don't tell nginx version to clients.
        server_tokens off;

        # Specifies the maximum accepted body size of a client request, as
        # indicated by the request header Content-Length. If the stated content
        # length is greater than this size, then the client receives the HTTP
        # error code 413. Set to 0 to disable.
        client_max_body_size 1m;

        # Timeout for keep-alive connections. Server will close connections after
        # this time.
        keepalive_timeout 65;

        # Sendfile copies data between one FD and other from within the kernel,
        # which is more efficient than read() + write().
        sendfile on;

        # Don't buffer data-sends (disable Nagle algorithm).
        # Good for sending frequent small bursts of data in real time.
        tcp_nodelay on;

        # Causes nginx to attempt to send its HTTP response head in one packet,
        # instead of using partial frames.
        #tcp_nopush on;
        # Path of the file with Diffie-Hellman parameters for EDH ciphers.
        #ssl_dhparam /etc/ssl/nginx/dh2048.pem;

        # Specifies that our cipher suits should be preferred over client ciphers.
        ssl_prefer_server_ciphers on;

        # Enables a shared SSL cache with size that can hold around 8000 sessions.
        ssl_session_cache shared:SSL:2m;


        # Enable gzipping of responses.
        #gzip on;

        # Set the Vary HTTP header as defined in the RFC 2616.
        gzip_vary on;

        # Enable checking the existence of precompressed files.
        #gzip_static on;


        # Specifies the main log format.
        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';

        # Sets the path, format, and configuration for a buffered log write.
        access_log /var/log/nginx/access.log main;


        # Includes virtual hosts configs.
        include /etc/nginx/conf.d/*.conf;
}

和site.conf文件在/etc/nginx/conf.d/

# the upstream component nginx needs to connect to
upstream django {
    server unix:///my-app/socketfiles/nginx-django.sock; # for a file socket
    #server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      8443;
    # the domain name it will serve for
    server_name example.com; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
        alias /my-app/code/media;  # your Django project's media files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /my-app/code/uwsgi_params; # the uwsgi_params file you installed
    }
}

【问题讨论】:

  • 你能发布一个完整的 nginx 配置吗?
  • @DanilaVershinin 添加了
  • 也许您正在处理类似this - uwsgi 上传限制?
  • @DanilaVershinin 谢谢,但我没有在 uwsgi.ini 文件中定义任何上传限制,我也尝试设置 limit-post=0 并尝试但没有成功

标签: nginx file-upload uwsgi django-2.1


【解决方案1】:

确保将client_max_body_size 添加到服务器块

http {
    server {
        client_max_body_size 20M;
        listen       80;
        server_name  test.com;
    }
}

最重要的是通过以下方式使您的配置工作:

sudo /etc/init.d/nginx reload

【讨论】:

  • 如果你看一下 site.conf client_max_body_size 是在服务器块中定义的..那不应该工作吗?
猜你喜欢
  • 2014-04-04
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 2022-01-23
  • 2020-03-30
  • 2021-10-27
相关资源
最近更新 更多