php - Symfony2 防火墙需要很长时间

标签 php symfony

我有一个问题,Symfony2 防火墙组件在处理某些请求时会花费很长时间。

我注意到它主要发生在 AJAX 请求期间,以及非常具体的请求 - 当我在原则中使用 LIKE %..% 语句搜索实体时(不确定它是否重要,但这就是我注意到的 ;))。

稍后(1 或 2 秒后)调用相同的 URL 会导致“正常”的防火墙处理时间。

我没有使用任何外部数据源进行身份验证,所有内容都存储在 PostgreSQL 中。

请看下面的时间线:

timeline

有没有办法直接调试防火墙?

我的配置是这样的:

security:
firewalls:
    admin_area:
        provider: db_users
        pattern: ^/admin
        anonymous: ~
        form_login:
          login_path: /admin/login
          check_path: /admin/login-check
        logout: 
          path: /admin/logout
          target: /admin
        switch_user: { role: ROLE_SUPERADMIN, parameter: _become_user }

    secured_area:
        pattern:    ~
        anonymous: ~
        http_basic:
            realm: "Secured Demo Area"

access_control:
    - { path: ^/admin/clip-manager/clip/encode/*, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
    - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/login-check, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, roles: [ROLE_ADMIN_LOGIN, ADMIN_AREA] }

providers:
    db_users:
        entity: { class: Webility\Bundle\AppUserBundle\Entity\User, property: username }

encoders:
    Webility\Bundle\AppUserBundle\Entity\User:
        algorithm:          sha256
        iterations:         3
        encode_as_base64:   false

acl:
    connection: default

我正在使用 Symfony\SecurityBundleJMSSecurityExtraBundle

最佳答案

我遇到了同样的问题,想与大家分享解决方案。

Server Response Time increase

由 Symfony\Component\Security\Http\Firewall 引起的问题 ~ 107406 ms

Application Timeline

解决方案;

在我们的案例中,问题出在我们在 php.ini 文件上使用的 session 处理程序。

以前的配置;

session.save_handler = files

新配置;

;session.save_handler = files

session.save_handler = memcached
session.save_path = "127.0.0.1:11212"

我将 session 处理程序更改为 memcached。因为我已经在使用 memcached,所以我需要第二个 memcached 实例,或者因为我实现了由 memcached 监听的额外端口,所以解决了这个问题;

要运行 memcached 以监听两个端口,我编辑 memcached.conf

以前的配置;

-p 11211
-l 127.0.0.1

新配置

#-p 11211
#-l 127.0.0.1

-l 127.0.0.1:11211
-l 127.0.0.1:11212

并且只是重新启动 memcached 实例,memcached 开始监听同一实例上的两个端口。

service memcached restart

要验证 memcached 是否在新端口上监听和响应,您可以运行 telnet 命令;

telnet 127.0.0.1 11211
telnet 127.0.0.1 11212

预期输出是;

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

结果是应用非常快;

Final Application Timeline

希望这个解决方案对您有所帮助。

关于php - Symfony2 防火墙需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13459157/

相关文章:

routing - 在生产中找不到 symfony 2 路线

php - Composer 冲突和 Symfony 3

php - 如何将天数添加到 Twig 中的可变日期

php - 如何在声明 PHP 变量之前回显它

php - 获取先前的数组值

php - SQLSTATE[HY000] [2002] 连接被拒绝 - MAMP & Symfony 2

php - MySql 学说 : find if given variable is IN array property

php - 将选项传递给 jquery 文件的正确方法是什么?

php - PDO SQL 我正在尝试将我的 SQL 查询设置为检查多列,但它不起作用

php - 添加 http ://prefix to URL when missing