symfoniers!私は未知の問題を抱えています。私が間違ったことを見つけることはできません。 symfony 2.3については、sylius 0.11バージョン、nginx 1.10、varnish 4.1、php5.5を使用しています。symfony:お客様が海外のユーザにログイン
私たちが設定を準備しようとすると、新しいニスの設定がすべてうまくいきました。しかし、私は「私は自分のアカウントにログインしましたが、別のユーザーになってしまいました!私たちはニスをオフにし、nginxの設定をロールバックします。しかし、問題はまだ私たちを追いかけていました。
ワニスが何らかの形でセッションメカニズムを破ったと考えたので、キャッシュ内のすべてのセッションを削除することにしました。それが私たちを助けるようです。しかし、私たちは確かに分かりません。
次に、ニスの設定を修正してもう一度やり直してください。同じ問題。これに関連して
、私は2つの質問があります。
他のユーザへのロギングの問題を決定する方法を? この問題の根本はどこですか?誰かが何か解決策を提案できますか?
当社のワニスの設定: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あなた混乱して
Cookieは、デフォルトでのみ削除できます。独自の** sub vcl_hash **を書くと、すべてをハッシュできます。 さらに、berespのすべての情報にキャッシュ内の在庫が含まれています。 httpヘッダー、URL、ステータスなどがあります。 ** varnishlog -i BerespHeader **と書いて、すべての情報を見ることができます。別の情報を見るには、* man vsm * –
を参照してください。これは、「vcl_hashでは、ハッシュパラメータに価値のあるCookieを追加する」という文を使用して表現したかったものです。 –