Я использую Nginx с Phusion Passenger для запуска приложения Rails на компьютере с ECOS CentOS.
У меня довольно стандартная настройка с Nginx, Rails, Phusion Passenger и SSL (я думаю). Мой nginx.conf ниже. До сих пор все работало нормально, за исключением того, что каждый раз, когда два запроса попадают на сервер одновременно, создается новый экземпляр Rails для обслуживания второго запроса.
Проблема в том, что, как только второй запрос направляется во вновь созданный экземпляр Rails, он теряет аутентифицированный сеанс из исходного экземпляра Rails, что приводит к ошибкам. Мои сессии хранятся в памяти.
В качестве обходного пути я установил passenger_max_instances_per_app
на 1, чтобы при создании новых экземпляров Rails создавалось, но это только временное исправление.
Кто-нибудь знает, как заставить Nginx поддерживать тот же сеанс для запросов из того же источника? Я мог бы упустить что-то очевидное здесь.
Спасибо!
worker_processes 1;
events {
worker_connections 1024;
}
http {
...
passenger_pool_idle_time 0;
passenger_max_instances_per_app 1;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# this server isn't rails enabled.
# will redirect all traffic to https
server {
listen 80;
server_name example.com;
rewrite ^ https://www.example.com$request_uri permanent;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# HTTPS server
# - by default everything is served by https
server {
listen 443;
server_name www.example.com;
root /rails/root/public;
passenger_enabled on;
rails_env production;
ssl on;
ssl_certificate /path/to/cert/www.example.com.crt;
ssl_certificate_key /path/to/cert/www.example.com.key;
ssl_session_timeout 5m;
}
}