#ruby #nginx #sinatra #session-cookies #puma
#ruby #nginx #sinatra #файлы cookie сеанса #puma
Вопрос:
В настоящее время я запускаю приложение sinatra, используя puma и обратный прокси-сервер nginx. Сеансы и файлы cookie сохраняются нормально при любых запросах get, как видно из регистрации:
{"user_id"=>1, "session_id"=>"89bb966142230a06fb5103db746c3011a741d88c7759dc2bff00c6bdd597c946"}
Идентификатор пользователя, являющийся важной частью, которая означает, что сеанс сохранил свою информацию. Однако, как только я пытаюсь опубликовать через форму, я вместо этого теряю эту важную информацию:
"POST /price HTTP/1.0" 302 - 0.0045
{"session_id"=>"89bb966142230a06fb5103db746c3011a741d88c7759dc2bff00c6bdd597c946"}
Моя конфигурация sinatra для сеансов:
use Rack::Session::Cookie, :key => 'rack.session',
:path => '/',
:secret => ENV['secret']
Который, похоже, отлично работает во всех других сценариях приложения.
Мои настройки обратного прокси-сервера Nginx для этого приложения следующие:
server {
root /var/www/app/public;
access_log /var/www/app/var/log/nginx_access.log;
error_log /var/www/app/var/log/nginx_error.log;
location / {
try_files $uri @app;
}
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://admin_server;
proxy_pass_request_headers on;
proxy_cookie_domain localhost $http_host;
}
#certbot ssl stuff
}
Сейчас я в относительной растерянности, поскольку все остальные аспекты проверки подлинности и сохранения сеанса, похоже, работают нормально, но сообщение формы разваливается. Любые рекомендации и помощь были бы чрезвычайно полезны!
Комментарии:
1. Возможно ли, что вы столкнулись с механизмом защиты CSRF (подделка межсайтовых запросов)? Не уверен, как это работает в Sinatra, но вы, возможно, пропустили добавление скрытого поля маркера подлинности в вашей форме.
2. Возникает ли проблема при публикации непосредственно в приложении, а не через Nginx? Было бы полезно устранить это как источник проблемы.