Laravel CSRF 在 nginx 后面带有 SSL 负载平衡

标签 laravel nginx csrf laravel-5.1 laravel-routing

我们有一个带有 SSL 终止功能的 Nginx 负载均衡器。它后面是两个运行 nginx/laravel 5.1 的 Web 服务器,并且都在 redis 上共享 session 。当负载平衡设置为 session 关联模式(用户返回同一服务器)时, session 可以正常工作。如果我们使用循环,我们将面临 CSRF“Illuminate\Session\TokenMismatchException”,并且用户不会获得有效的 session 。如何让 session 以循环方式运行?

这是 nginx 上的代理设置。

    proxy_set_header 'Access-Control-Allow-Origin' '*';
    proxy_set_header 'Access-Control-Allow-Credentials' 'true';
    proxy_set_header 'Access-Control-Allow-Headers' 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept';
   proxy_set_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';

在登录 Blade 上我们有

<div class="signin_form_modal">
    <div class="signin_form">
        <form id="signin_form">
            <div class="modal_header">
                <a href="#" class="modal_back inline" title="close">+</a>
                <h1 class="modal_title">Sign in</h1>
            </div>
        <div class="modal_input_group">
            {!! csrf_field() !!}
            <input type="text" name="email" placeholder="Username or Email" class="email modal-input">
            <input type="password" name="password" placeholder="Password" class="password modal-input">
        </div>
        <div class="modal_footer">
            <!--<a href="#"><i class="fa fa-check"></i> Done</a>-->
            <button class="submit" type="submit"><i class="fa fa-check"></i> Done</button>
        </div>
        </form>
    </div>
</div>

路由定义为

Route::post('/signin', 'Auth\AuthController@signin');

最佳答案

某些提供商的 session 存储在本地服务器上。 如果用户因负载均衡而更换服务器,则所有 session 都会丢失。

唯一的解决方案是使用跨服务器共享的 session 提供程序。

关于Laravel CSRF 在 nginx 后面带有 SSL 负载平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33797128/

相关文章:

php - 在 laravel Controller 中处理从 mysql 存储过程接收的数组

redirect - 我如何在 nginx 负载均衡器上将 https 重定向到 http

java - 如何在Spring运行时启用/禁用CSRF?

linux - 我想在没有 PDO 的情况下使用 laravel

Laravel日志文件权限问题

proxy - nginx 代理背后的 TeamCity

javascript - ajax POST 处理程序循环

facebook - CSRF 状态 token 与提供的 FB PHP SDK 3.1.1 Oauth 2.0 不匹配

php - 相同的路线但在 Laravel 5.1 路由中调用不同的 Controller

php - NGINX 图像不显示