File upload Nginx阻止文件上载到静态页面:405不允许
我的Nginx服务器有问题。我安装了一台新服务器,并认为我安装的与旧服务器相同。但是,从那时起,我无法将文件上载到静态页面。我在index.php中有一个上载函数。当我显式调用index.php时,它仍然有效,但当我只调用/,它会给我一个405错误 我在互联网上看到过很多讨论,都归结为nginx不允许POST请求访问静态文件。但是,我的安装接受对静态文件的POST请求,但不接受文件上载。澄清一下,这是我目前的情况:File upload Nginx阻止文件上载到静态页面:405不允许,file-upload,nginx,upload,php,File Upload,Nginx,Upload,Php,我的Nginx服务器有问题。我安装了一台新服务器,并认为我安装的与旧服务器相同。但是,从那时起,我无法将文件上载到静态页面。我在index.php中有一个上载函数。当我显式调用index.php时,它仍然有效,但当我只调用/,它会给我一个405错误 我在互联网上看到过很多讨论,都归结为nginx不允许POST请求访问静态文件。但是,我的安装接受对静态文件的POST请求,但不接受文件上载。澄清一下,这是我目前的情况: +----------------------+-------------+--
+----------------------+-------------+------------------+
||普通帖子|带文件上传|
+----------------------+-------------+------------------+
|请求/|允许|允许|
|请求index.php |允许| 405不允许|
+----------------------+-------------+------------------+
它可能没有添加任何内容,但为了完整性:我也在这台服务器上运行WordPress站点,自从迁移服务器后,我就无法上传新媒体
日志文件(/var/log/nginx/error.log
,/var/log/php5 fpm.log
,/var/log/syslog
)没有提供任何信息。后来,我也为FastCGI池启用了日志记录,在访问日志中,没有对静态页面的POST请求的记录。所以nginx必须在它们到达FastCGI之前阻止它们
相关的PHP ini设置:
启用上的数据读取
文件上传到
max_文件上传20
上载\u最大\u文件大小20M
上传\u tmp\u目录无值
我怎样才能让它再次工作?
补充资料 我的旧服务器和新服务器之间存在一些差异(可能更多,但我不知道):
- 在nginx之前,我必须使用
fastcgi_pass127.0.0.1:9000代码>-现在,这已经不起作用了,但我正在使用
fastcgi\u pass unix:/var/run/php5-fpm.sock代码>。我不知道这是为什么,也不知道这是否重要
- 我从源代码构建了nginx。以下是不同的安装,首先是旧的:
新的:$nginx-V nginx版本:nginx/1.4.6(Ubuntu) 由GCC4.8.2(Ubuntu 4.8.2-16ubuntu6)构建 TLS SNI支持已启用 配置参数:--使用cc opt='-g-O2-fstack protector--param=ssp buffer size=4-Wformat-Werror=format security-D_FORTIFY_SOURCE=2'--使用ld opt='-Wl,-b符号函数-Wl,-z,relro'-prefix=/usr/share/nginx--conf path=/etc/nginx/nginx.conf--http log path=/var/log/nginx/access.log--error log path=/var/log/nginx/error.log--lock path=/var/lock/nginx.lock--pid path=/run/nginx.pid--http client body temp path=/var/lib nginx/body--http fastcgi temp=/var/lib nginx/fastcgi--http代理临时路径=/var/lib/nginx/proxy--http scgi临时路径=/var/lib/nginx/scgi--http uwsgi临时路径=/var/lib/nginx/uwsgi--带调试--带pcre jit--带-ipv6--带-http_ssl_模块--带-http_存根_状态_模块--带-http_realip_模块--带-http_添加_模块--带-http_dav_模块--带-http_geoip_模块--with-http_gzip_静态_模块——with-http_图像_过滤器_模块——with-http_spdy_模块——with-http_子模块——with-http_xslt_模块——with-mail_ssl_模块——添加模块=/build/buildd/nginx-1.4.6/debian/modules/nginx-auth-pam——添加模块=/build/buildd/nginx-1.4.6/debian/modules/nginx-dav-ext-module--add module=/build/buildd/nginx-1.4.6/debian/modules/nginx-echo--add module=/build/buildd/nginx-1.4.6/debian/modules/nginx-upstream-fair--add module=/build/buildd/nginx-1.4.6/debian/modules/ngx\u http\u substitutions\u filter\u module
$nginx-V nginx版本:nginx/1.6.0 由GCC4.8.2(Ubuntu 4.8.2-19ubuntu1)构建 TLS SNI支持已启用 配置参数:--使用cc opt='-g-O2-fstack protector--param=ssp buffer size=4-Wformat-Werror=format security-D_FORTIFY_SOURCE=2'--使用ld opt='-Wl,-b符号函数-Wl,-z,relro'-conf path=/etc/nginx/nginx.conf--http log path=/var/log/nginx/access.log--error log path=/var/log/nginx/error.log--lock path=/var/lock/nginx.lock--pid path=/run/nginx.pid--http客户端主体临时路径=/var/lib/nginx/body--http fastcgi temp路径=/var/lib nginx/fastcgi--http代理临时路径=/var/lib nginx/proxy--http scgi temp path=/var/lib/nginx/scgi——http uwsgi temp path=/var/lib/nginx/uwsgi——带调试——带pcre jit——带-ipv6——带-http_ssl_模块——带-http_存根_状态_模块——带-http_realip_模块——带-http_添加_模块——带-http_geoip_模块——带-http_geoip_模块——带-http_gzip_静态_模块——带-http_图像过滤器_模块--with-http_spdy_模块——with-http_sub_模块——with-http_xslt_模块——with mail——with-mail_ssl_模块——add模块=/home/camilstaps/nginx模块/nginx auth pam——add模块=/home/camilstaps/nginx模块/ngx http_替换过滤器模块——with-http_mp4_模块--with-http_flv_模块
- 旧PHP版本:
新的:$php5-v PHP 5.5.9-1ubuntu4.3(cli)(构建时间:2014年7月7日16:36:58) 版权所有(c)1997-2014 PHP集团 Zend Engine v2.5.0版权所有(c)1998-2014 Zend Technologies Zend OPcache v7.0.3版权所有(c)1999-2014,由Zend Technologies提供
$php5-v PHP 5.5.9-1ubuntu4.3(cli)(构建时间:2014年7月7日16:36:58) 版权所有(c)1997-2014 PHP集团 Zend Engine v2.5.0版权所有(c)1998-2014 Zend Technologies
最后,我仍然可以访问我的旧安装。因此,如果您想查看某个文件的内容或某个命令的输出,这是可能的。问题是我将http_mp4_模块的指令放在了
位置/
块中:
location / {
...
mp4;
}
显然,这在某种程度上造成了冲突