Linxu下Yii2的POST提交被拒经历
早期于对Yii2的使用,浅谈一下自己的经验,在以往的项目中我使用的框架是Yii1,由于Yii2的出现,所以极力的想使用一下它的新特性。
根据不同的WEB服务器,分别给出具体的配置信息,在这我的使用环境Linux系统是CentOS 7.3,Nginx1.12.0安装的PHP版本为PHP 7.0.12:
Apache服务器端站点配置
1、修改配置文件:/etc/httpd/conf/httpd.conf中修改两处,若配置虚拟域名另参照其它配置。
DocumentRoot "/data1/vhosts/webapp/app.xxx.com" <Directory "/data1/vhosts/webapp/app. xxx.com">
2、重定向站点目录,当前目录为 /data1/vhosts/webapp/app. xxx.com,该目录下有文件.htaccess
隐藏文件.htaccess中配置内容:
# prevent directory listings Options -Indexes # follow symbolic links Options FollowSymlinks RewriteEngine on RewriteCond %{REQUEST_URI} ^.*$ RewriteRule ^(.*)$ /api/web/$1
Nginx服务器端站点配置
修改配置文件:/web/soft/nginx/conf/conf.d/default.conf
server { listen 80; server_name 47.95.248.18; root /web/www/app.mzhjs.com/api/web; location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; } location ~ /\.(ht|svn|git) { deny all; } location = /50x.html { root html; } location ~* apple-touch-icon { access_log off; rewrite .* /fav-icon.png last; } location ~ \.php$ { try_files $uri = 404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; access_log /web/log/nginx/default.access.log; }
特别说明:
Apache站点目录下的.htaccess文件中的内容移植到Nginx下需要在default.conf中配置,内容即为:
try_files $uri $uri/ /index.php?$args;
遇到问题
按照上面的配置,Yii2框架的站点可以正常访问,做到这认为一切OK。但是在此时遇到了一个很棘手的问题:手机app端以POST方式请求API的Web接口返回500错误,而PC端浏览器POST请求没问题。在此为Yii2的新手排解一些问题:
1、 起初我认为是Nginx的服务器问题,Nginx官方组织也曾发布Bug信息,在1.9.及一些版本的时候对IOS、Android 一些内核POST拒绝,看到这个信息,我一直以为问题是出在Nginx,这让我顿时怀疑它的稳定行,但是我还是不相信。
2、 POST大小限制,然后我又通过查找资料,也有的说受到POST大小限制;这一点我在用PC端浏览器POST提交成功,已经可以证明;同时我查看了配置,限制大小为18M,所以排除了这个疑虑。
3、 找到答案:终于在看Yii2的POST验证才知道有个csrf,是防止csrf攻击的,框架默认是开启的,当我将设置'enableCsrfValidation' => false,时,问题就迎刃而解了,app端可以POST提交了。