近期做一个手机端静态网站,在wcm上网站预览的时候显示正常,网站数据发布到nginx网站服务上后,发现页面有部分不显示:
正常页面:
错误页面:
进入谷歌浏览器的Developer Tools(F12键),进入Network探测
查到错误信息:Request Method:POST Status Code:405 Not Allowed
网上传抄的添加以下配置的解决办法不可用:
error_page 405 =200 @405; location @405 { root /data/jcyweb/hnjcy; }
upstream static_backend { server localhost:80; } server { listen 80; # ... error_page 405 =200 @405; location @405 { root /data/jcyweb/hnjcy; proxy_method GET; proxy_pass http://static_backend; } }
即转换静态文件接收的POST请求到GET方式
最后的配置文件:

#user nobody; worker_processes auto; ##允许Nginx进程生成的worker process数 根据cpu内核数自动生成 #error_log logs/error.log #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { use epoll; ##配置事件驱动模型 worker_connections 2048; ##配置最大连接数 } http { include mime.types; ##定义MIME-Type default_type application/octet-stream; log_format main '$remote_addr - [$time_local] - "$request"' ##定义日志类型,远程地址、时间、请求内容、请求状态 ' - $status'; types_hash_max_size 2048; ##多servername需设置 server_names_hash_bucket_size 512; sendfile on; server_tokens off; ##关闭默认版本号 keepalive_timeout 20; ##定义链接超时时间,防止慢速dos攻击 client_header_timeout 15; ##请求头超时时间 client_body_timeout 15; ##请求体超时时间 reset_timedout_connection on; ##关闭不响应的客户端连接,释放客户端占有内存 send_timeout 10; ##客户端两次读取时间,如果这段时间里没有读取任何数据,nginx就会关闭连接 upstream static_backend { server localhost:80; } server { ##直接访问IP 反馈500错误 listen 80; location / { root /data/jcyweb/hnjcy; index index.html; ssi on; ssi_silent_errors on; ssi_types text/shtml; } error_page 404 /404.html; location = /404.html { root html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } error_page 405 =200 @405; location @405{ root /data/jcyweb/hnjcy; proxy_method GET; proxy_pass http://static_backend; } } }
还有一更好的方法:修改源代码,重新编译安装nginx
编辑nginx源代码
[root@localhost ~]# vim src/http/modules/ngx_http_static_module.c
修改: 找到下面一段注释掉
/* if (r->method & NGX_HTTP_POST) { return NGX_HTTP_NOT_ALLOWED; } */
然后按照原来的编译参数,重新编译安装nginx,即可