symfoniers! 나는 알 수없는 문제가 있는데, 내가 잘못한 것을 발견 할 수 없다. symfony 2.3에서 sylius 0.11 버전, nginx 1.10, varnish 4.1, php5.5를 사용하고 있습니다.Symfony : 고객이 외국 컴퓨터에 로그인
우리가 설정 준비를 할 때 새로운 설정의 바니시가 좋았습니다. 그러나 그때 우리는 "내 계정에 로그인했지만 다른 사용자에게있어!"와 같은 실망스러운 코멘트를 남겼습니다. 우리는 우리의 광택을 끄고 nginx 설정을 롤백합니다. 그러나 문제는 여전히 우리를 쫓고있었습니다.
우리는 바니쉬가 세션 메커니즘을 깨뜨 렸다고 생각했기 때문에 캐시의 모든 세션을 삭제하기로 결정했습니다. 그것은 우리를 돕는 것처럼 보입니다. 그러나 우리는 확실히 모른다.
그런 다음 바니시 구성을 수정하고 다시 시도하십시오. 같은 문제.
어떻게 다른 사용자에게 기록의 문제를 결정 : 이와 관련
, 나는이 개 질문이? 이 문제의 근본 원인은 무엇입니까? 누군가가 어떤 해결책을 제안 할 수 있습니까? 우리의 광택 설정 :vcl_recv {
if (req.method == "POST") {
return (pass);
}
if (req.url ~ "/administration/?.*" ||
req.url ~ "/app_dev.php/?.*" ||
req.url ~ "/account/?.*" ||
req.url ~ "/cart/?.*" ||
req.url ~ "/currency/?.*" ||
req.url ~ "/login_check/?.*" ||
req.url ~ "/login/?.*"
req.url ~ "/logout/?.*"
) {
return (pass);
}
if (req.http.Cookie) {
set req.http.Cookie = ";" + req.http.Cookie;
set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");
set req.http.Cookie = regsuball(req.http.Cookie, ";(ProductsViewMode|PHPSESSID|currency|APP_REMEMBER_ME|recentViews|mobile)=", "; \1=");
set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");
if (req.http.Cookie == "") {
unset req.http.Cookie;
}
}
#all pictures cache by 15 minutes
if (req.url ~ "^.*\.(png|jp[e]?g|gif|swf|css|js|svg)?(\?v=.*)?$") {
unset req.http.Cookie;
# set req.ttl = 900s;
return (hash);
}
#clear all cache content
if (req.method == "PURGE") {
if (!client.ip ~ invalidators) {
return (synth(405, "Not allowed"));
}
return (purge);
}
return (hash);
}
sub vcl_hash {
#unset req.http.Cookie;
set req.http.X-Have-To-Hash = ";" + req.http.Cookie;
set req.http.X-Have-To-Hash = regsuball(req.http.X-Have-To-Hash, "; +", ";");
set req.http.X-Have-To-Hash = regsuball(req.http.X-Have-To-Hash, ";(ProductsViewMode|currency|recentViews|mobile)=", "; \1=");
set req.http.X-Have-To-Hash = regsuball(req.http.X-Have-To-Hash, ";[^ ][^;]*", "");
set req.http.X-Have-To-Hash = regsuball(req.http.X-Have-To-Hash, "^[; ]+|[; ]+$", "");
if (req.http.Cookie ~ "APP_REMEMBER_ME") {
set req.http.X-Have-User = "true";
} else {
set req.http.X-Have-User = "false";
}
hash_data(req.url);
hash_data(req.http.host);
hash_data(req.http.X-Have-To-Hash);
hash_data(req.http.X-Have-User);
return (lookup);
}
sub vcl_backend_response {
#for ban some objects
set beresp.http.X-Url = bereq.url;
set beresp.http.X-Host = bereq.http.host;
if (beresp.http.Cache-Control ~ "private" ||
beresp.http.Cache-Control ~ "no-cache" ||
beresp.http.Cache-Control ~ "no-store"
) {
set beresp.ttl = 1h;
# set beresp.uncacheable = true;
unset beresp.http.Cache-Control;
}
if (beresp.http.X-Url ~ "^.*\.(png|jp[e]?g|gif|swf|css|js|svg)?(\?v=.*)?$") {
set beresp.ttl = 24h;
}
if (beresp.status == 502 || beresp.status == 404 || beresp.http.X-Cache-Debug) {
set beresp.ttl = 0s;
}
return (deliver);
}
우리의 보안 설정 :
# This file is part of the Sylius package.
# (c) Paweł Jędrzejewski
security:
providers:
fos_userbundle:
id: fos_user.user_provider.username
encoders:
FOS\UserBundle\Model\UserInterface: sha512
firewalls:
administration:
switch_user: true
context: user
pattern: /administration/.*
form_login:
provider: fos_userbundle
login_path: /administration/login
check_path: /administration/login-check
failure_path: /administration/login
default_target_path: /administration/dashboard
use_forward: false
use_referer: true
logout:
path: /administration/logout
target: /administration/login
anonymous: true
main:
switch_user: { role: ROLE_SYLIUS_ADMIN }
context: user
pattern: /.*
form_login:
provider: fos_userbundle
login_path: /login
check_path: /login_check
success_handler: authentication_handler
failure_handler: authentication_handler
failure_path: /login
default_target_path:/
use_forward: false
use_referer: true
remember_me:
key: %sylius.secret%
name: APP_REMEMBER_ME
lifetime: 31536000
always_remember_me: true
remember_me_parameter: _remember_me
oauth:
resource_owners:
facebook: "/login/check-facebook"
vk: "/login/check-vkontakte"
twitter: "/login/check-twitter"
google_plus: "/login/check-google"
login_path: /login
failure_path: /login
default_target_path: /account/profile
oauth_user_provider:
service: ostrov_user_provider
logout: true
anonymous: true
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
access_control:
- { path: ^/login.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/connect.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /api/checkauth.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/administration/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/administration/login-check, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: "/administration.*", role: ROLE_SYLIUS_ADMIN }
- { path: /api.*, role: ROLE_API }
- { path: "/account.*", role: ROLE_USER }
- { path: "/account.*", role: ROLE_MANAGER }
- { path: "/_partial.*", ip: 127.0.0.1 }
role_hierarchy:
ROLE_MANAGER: [ROLE_USER]
그리고 하나 더 질문 : 방법으로 session_start() 세션 ID를 부여? PHPSESSID를 사용하는 방법은 무엇입니까? 그것은 존재 sess_id를 확인합니까 nginx 다시로드 또는 서버가 다른 서버가 될 경우 sess 재설정합니까? 당신의 광택 VCL 쿠키 엉망으로
쿠키는 기본적으로 제거 만 가능합니다. 자신 만의 ** sub vcl_hash **를 작성하면 모든 것을 해시 할 수 있습니다. 이상으로, beresp에 저장된 모든 정보는 캐시에 재고가 있습니다. http 헤더, URL, 상태 등이 있습니다. ** varnishlog -i BerespHeader **를 작성하고 모든 정보를 볼 수 있습니다. 다른 정보를 보려면 * man vsm * –
당신 말이 맞습니다. "vcl_hash에서 해시 매개 변수에 가치가있는 쿠키를 추가하십시오."라는 문장을 사용하여 표현하고 싶었습니다. –