同时文件上传返回403禁止使用nginx和php-fpm

时间:2016-08-19 01:32:15

标签: php nginx cakephp-2.0

我有一个应用程序,允许通过拖放同时上传文件。此应用程序目前:

  • 有3个版本的本地实例,分段,生产。
  • php 5.6 w / nginx
  • 上运行php-fpm
  • 建立在CakePhp2上。

以下是我遇到的问题:

  1. 我上传1张图片,1张成功,一切正常。
  2. 我上传2张图片,1张成功,403则返回第二次上传请求。
  3. 我上传3张以上的图片,1张成功,所有其他请求返回403,用户退出应用程序(会话过期)
  4. 只要有多个并发帖子,就会发生这种情况。它们不必是文件上传。

    此功能适用于除登台服务器之外的所有服务器。本地开发机器和生产盒没有这个问题。

    通过拖放到页面上传文件。每个文件都通过ajax在单独的请求中上传。

    尺寸无关紧要小图像失败以及较大的图像。

    我正在寻找环境之间不匹配的配置参数,但差别尚不明显。我应该检查什么想法?

    我的nginx网站配置:

    server {
       listen       *:443 ssl;
    
       server_name  stagingsite.com ;
    
       ssl on;
       ssl_certificate           /site.crt;
       ssl_certificate_key       /site.key;
       ssl_session_cache         shared:SSL:10m;
       ssl_session_timeout       5m;
       ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
       ssl_ciphers               "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-    SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384: ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-   SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-   CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:    AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!  MD5:!PSK:!RC4";
     ssl_prefer_server_ciphers on;
     client_max_body_size 256m;
     index  index.html index.htm index.php;
    
     access_log            /var/log/nginx/site.access.log;
     error_log             /var/log/nginx/site.error.log;
    
     root /var/www/site/webroot;
    
     location / {
        root  /site/webroot;
        try_files $uri $uri/ /index.php$is_args$args;
        autoindex off;     
        index  index.html index.htm index.php;
     }
    
     location ~ \.php$ {
     set $path_info $fastcgi_path_info;
     fastcgi_index index.php;
     fastcgi_split_path_info ^(.+\.php)(/.*)$;
     try_files $uri $uri/ /index.php$is_args$args;
     include /etc/nginx/fastcgi_params;
     fastcgi_pass 127.0.0.1:9000;
     fastcgi_param SCRIPT_FILENAME $request_filename;
       }
    
       sendfile off;
    } 
    

1 个答案:

答案 0 :(得分:0)

我发现了我的问题的答案。该问题存在于CakePhp2的会话配置中。 auto-regenerate选项设置为true,导致应用程序为每个请求生成新的会话ID。第二个请求进入后,它不知道新的会话ID。到第三个请求进入会话时,ID一起丢失了。

导致发现解决方案的资源在这里:

How to resolve "ajax 403 error forbidden in CAKEPHP 2.x"

CakePHP 403 on AJAX request

我希望这个问题有助于下一个遇到类似问题的家伙。