【问题标题】:Where to give client_max_body_size 2M; in nginx.conf file哪里给client_max_body_size 2M;在 nginx.conf 文件中
【发布时间】:2015-05-06 12:03:12
【问题描述】:

我已经在我的 /etc/nginx/nginx.conf 文件中提到了这一点

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;    
        # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # nginx-naxsi config
    ##
    # Uncomment it if you installed nginx-naxsi
    ##

    #include /etc/nginx/naxsi_core.rules;

    ##
    # Phusion Passenger config
    ##
    # Uncomment it if you installed passenger or passenger-enterprise
    ##

    passenger_root /home/dinshaw/.rvm/gems/ruby-2.1.5/gems/passenger-4.0.56;
    passenger_ruby /home/dinshaw/.rvm/gems/ruby-2.1.5/wrappers/ruby;
    client_max_body_size 2M;
    ##
    # Virtual Host Configs
    ##

     include /etc/nginx/conf.d/*.conf;
     include /etc/nginx/sites-enabled/*;
        server {
           rails_env development;
           listen 80;
           server_name localhost;
           root /home/dinshaw/projects/freeway/freeway-sdk-portal/public;
           access_log /home/dinshaw/projects/freeway/freeway-sdk-portal/log/nginx_access.log;
           error_log /home/dinshaw/projects/freeway/freeway-sdk-portal/log/nginx_error.log;
           passenger_enabled on;
         }
}


# mail {
#   # See sample authentication script at:
#   # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#   # auth_http localhost/auth.php;
#   # pop3_capabilities "TOP" "USER";
#   # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#   server {
#       listen     localhost:110;
#       protocol   pop3;
#       proxy      on;
#   }
# 
#   server {
#       listen     localhost:143;
#       protocol   imap;
#       proxy      on;
#   }
# }

在此之后我在服务器之外没有任何效果,即也像这样:

passenger_root /home/dinshaw/.rvm/gems/ruby-2.1.5/gems/passenger-4.0.56;
passenger_ruby /home/dinshaw/.rvm/gems/ruby-2.1.5/wrappers/ruby;


server {
    rails_env development;
    client_max_body_size 2M; 
    listen 80;
    server_name localhost;
    root /home/dinshaw/projects/myCode/public;
    access_log /home/dinshaw/projects/myCode/log/nginx_access.log;
    error_log /home/dinshaw/projects/myCode/log/nginx_error.log;
    passenger_enabled on;
}

但这也行不通,如果上传的内容不止于此,也不会出错。我的

 nginx version: nginx/1.6.3

请指导我大约 2 天以上的工作,但没有得到做什么。

【问题讨论】:

  • 你的第一个配置应该没问题。修改后重启nginx了吗?
  • 是的,我已经重新启动并重新加载了服务器,但没有任何反应:(
  • 以上是整个 nginx 配置吗?
  • 编辑了我的问题,这是我的全部设置
  • 当你说它没有给出错误时,你的意思是它可以让你上传大于 2M 的文件还是它完全停止并且什么都不显示?

标签: ruby-on-rails ruby-on-rails-4 nginx server passenger


【解决方案1】:

通过将 client_max_body_size 放在 http {} 和 server {} 括号内,您所做的就是微定义您的 client_max_body_size。

NGINX 的工作原理基本上是嵌套控制设置,最外层的 shell 是 http {} -> server {} -> location {}。因此,这意味着如果您在 http {} 中设置某些内容,它将应用于服务器 {} 和位置 {}。但是,如果您在服务器 {} 中设置了某些内容,它将仅适用于该服务器 {},而不适用于 http {}。

注意:总是,每当您对 nginx.conf 文件进行一些更改时,您必须重新启动您的 nginx 服务器(如上面@ihsan 建议的那样):

sudo service nginx restart

您在这里所做的是一次很好的尝试,但是您已经定义了两次相同的东西,所以如果第一次没有工作,它应该不会有太大的不同。

我已经多次遇到这个问题,除了更改您的 nginx.conf 文件以允许您的最大大小为 2M 之外,您还需要更改您的 php.ini 文件以允许您上传一定的大小(2M我猜?)。

在您的 php.ini 文件中,您会发现如下内容:

upload_max_filesize = 10M
post_max_size = 10M

您还必须更改这些限制以匹配您预期的上传文件大小。您选择多大是您的选择,但请记住,您设置的这个限制越大,您给垃圾邮件发送者或服务器霸凌者上传大文件到您的服务器的机会就越大,从而占用宝贵的空间和带宽。

最后,如果您监控 NGINX error.log,您应该能够看到限制上传的确切过程。您在 http {} 或 server {} 括号内启用 error.log,如下所示:

error_log /var/log/nginx/error.log warn;

但请注意,将日志级别设置为警告会生成非常大的文件(尤其是在您运行大量虚拟服务器的情况下),因此建议您仅在进行故障排除时保持这种状态,然后再打开它只返回更高的错误。

有关如何监控 NGINX 错误的更多信息,请阅读此处:https://www.nginx.com/resources/admin-guide/logging-and-monitoring/

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-04
    • 2014-03-23
    • 2017-03-12
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2011-07-06
    相关资源
    最近更新 更多