• 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提交了。

    感谢技术圈的朋友们常来常往,希望我的每一个分享能帮助到大家,如果帮助到了您,请给我留下点点的评论或关注,我也想和您成为朋友,感谢大家一起交流一起进步
  • 相关阅读:
    管理培训笔记
    Jhipster Registry(Eureka Server) Docker双向联通与高可用部署
    (转阮一峰)深入理解OAuth 2.0
    基于spring security 实现前后端分离项目权限控制
    spring security实现动态配置url权限的两种方法
    Spring Security 架构与源码分析
    开源APM系统skywalking介绍与使用
    Angular 中后台前端解决方案
    SpringBoot+Security+MyBatis+ES+MQ+Redis+Docker+Vue的电商系统
    Jenkins+GitLab+Docker+SpringCloud实现可持续自动化微服务
  • 原文地址:https://www.cnblogs.com/fengguozhong/p/12213154.html
Copyright © 2020-2023  润新知