如何处理nginx在静态文件接收数据405错误问题 1. server { listen 80; server_name www.wiki.com; root /Data/code/wiki/; index index.php index.html index.htm; location ~* ^.+\.(jpg|jpeg|png|ico|gif|css|js)$ { access_log off; expires 30d; } location ~ (.*\.json) { root /Data/code/wiki/; error_page 405 =200 $1; } location ~ \.php { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 其实这个里边最重要的一个就是 location ~ (.*\.json) { root /Data/code/wiki/; error_page 405 =200 $1; } 这个的意思是将405错误重新指向200,也就是把405当作200来处理,并给405这个错误指定了root目录,这个目录其实就是和网站本来的目录一样就可以,当然不同的写法location和error_page 405 =200 $1也是要相应改变的哦~~ 这里就不做深入研究了~ ps: 这里的json的绝对路径是/Data/code/wiki/language,例如:/Data/code/wiki/language/languages.json 对于location这里的正则我就不说了,因为我也不是很懂,只是误打误撞能够使用了,哈哈,望大牛多多指点~ 这样我们的wiki就能够正常的访问到我们的json文件格式的文件了,而且还可一接收数据~ 第一个方法是我实践过的是可以使用的. 2. 网上还有一种方法说是可以解决的,但是我没试,有情趣的童鞋可以试试 修改源码,重新编译nginx,并覆盖原来的nginx的sbin目录 vim src/http/modules/ngx_http_static_module.c 找到下边内容把他注释掉 /* if (r->method & NGX_HTTP_POST) { return NGX_HTTP_NOT_ALLOWED; } */ 然后按照原来的编译参数重新编译一边. PS:只要make就可以了,不需要make install,然后把objs下的nginx文件复制到你原来的nginx安装目录的sbin下,替换原来的nginx程序即可. (责任编辑:IT) |