2013-08-28 2 views
0

У меня есть следующая конфигурация для лака. Но когда я обращаюсь к приложению, он не запрашивает логин, это просто логин. Что я делаю неправильно?Лак с применением Nginx для Rails (проблема с аутентификацией)

default.vcl

backend default { 
.host = "127.0.0.1"; 
.port = "80"; 
} 


sub vcl_recv { 
    if(req.url ~ "sign_in" || req.url ~ "sign_out" || req.request == "POST" || req.request == "PUT" || req.request == "DELETE") { 
    return (pass); 
    } 
    return (lookup); 
} 

sub vcl_fetch { 
if(req.url ~ "logout" || req.url ~ "sign_out"){ 
    unset beresp.http.Set-Cookie; 
} 
if (req.request == "GET") { 
     unset beresp.http.Set-Cookie; 
     set beresp.ttl = 360m; 
} 

if (req.url ~ "images/" || req.url ~ "javascripts" || req.url ~ "stylesheets" || req.url ~ "assets"){ 
     set beresp.ttl = 360m; 
} 
} 

/и т.д./по умолчанию/лак

DAEMON_OPTS="-a 192.241.136.37:80 \ 
     -T localhost:6082 \ 
     -f /etc/varnish/default.vcl \ 
     -S /etc/varnish/secret \ 
     -s malloc,256m" 

/и т.д./Nginx/сайты с поддержкой/по умолчанию

upstream app { 
    server unix:/tmp/unicorn.socket fail_timeout=0; 
} 

server { 
listen 80; 
client_max_body_size 2G; 
server_name localhost; 
keepalive_timeout 5; 
root /home/deploy/apps/wms/current/public; 
access_log off; 
error_log off; 

if ($request_method !~ ^(GET|HEAD|PUT|POST|DELETE|OPTIONS)$){ 
    return 405; 
} 

location ~ ^/(assets)/ { 
    gzip_static on; 
    expires  max; 
    add_header Cache-Control public; 
} 

location/{ 
    try_files $uri/index.html $uri.html $uri @app; 
    error_page 404    /404.html; 
    error_page 422    /422.html; 
    error_page 500 502 503 504 /500.html; 
    error_page 403    /403.html; 
} 

location @app { 
    proxy_pass http://app; 
} 

location = /favicon.ico { 
    expires max; 
    add_header Cache-Control public; 
} 

location ~ \.php$ { 
    deny all; 
} 

} 

ответ

1

Вы предотвращая ваш бэкэнд удалите cookie сеанса, поэтому вы не можете выйти из системы, если вы явно не удаляете файлы cookie браузеров.

Глядя на ваши выборки VCL (Комментарий инлайн):

sub vcl_fetch { 
    # This prevents server from deleting the cookie in the browser when loging out 
    if(req.url ~ "logout" || req.url ~ "sign_out"){ 
    unset beresp.http.Set-Cookie; 
    } 
    if (req.request == "GET") { 
    unset beresp.http.Set-Cookie; 
    set beresp.ttl = 360m; 
    } 
    if (req.url ~ "images/" || req.url ~ "javascripts" || req.url ~ "stylesheets" || req.url ~ "assets"){ 
    set beresp.ttl = 360m; 
    } 
} 

Так что ваш бэкенд не может удалить куки клиента, если в результате запроса POST.

ИМХО вы не должны связываться с заголовками Set-Cookie BACKEND, если только вы не знаете (и проверить хорошо) Возможные побочные эффекты

+0

Я новичок в лак. Должен ли я удалить эту строку? Что мне делать? –

+0

Я достаточно уверен, что проблему можно избежать, если вы удалите/прокомментируете первый блок if и перезагрузите/перезапустите лак. – NITEMAN

+0

Работало. Я удалил два блока, и это сработало как шарм. –