2016-08-18 4 views
2

Я создаю блог Rails. Я использую Rails 5 и Devise 4.2.0. Приложение работает на сервере Ubuntu с Nginx и Puma и развертывается с Capistrano. Все работает отлично в производстве, пока не включит HTTPS (с действительным сертификатом SSL) на Nginx и добавит 301 переадресацию формы HTTP к HTTPS.Devise: Невозможно подтвердить подлинность CSRF-токена, включенную HTTPS на сервере (нет JSON/API)

Я проверил журналы производства, а ключи подлинности в журналах не совпадают с теми, которые я вижу в браузере.

Вот файл nginx.conf Я использую:

upstream puma { 
    server unix:///home/deploy/apps/example-blog/shared/tmp/sockets/example-blog-puma.sock; 
} 

server { # Redirect HTTP to HTTPS 
 # Bind port(s) 
 listen   80; 
 listen   [::]:80; 

 # Bind domain(s) 
 server_name blog.example.com; 

 # 301 redirect to HTTPS 
 return 301 https://$server_name$request_uri; 
} 

server { # Primary server block 
 # Bind port(s) 
 listen   443 default_server ssl; 

 # Bind domain(s) 
 server_name blog.example.com; 

 # Bind certificate(s) 
 ssl_certificate       /etc/nginx/ssl/blog.example.com/ssl-bundle.crt; 
 ssl_certificate_key   /etc/nginx/ssl/blog.example.com/blog.example.com.key; 

 root /home/deploy/apps/example-blog/current/public; 
 access_log /home/deploy/apps/example-blog/current/log/nginx.access.log; 
 error_log /home/deploy/apps/example-blog/current/log/nginx.error.log info; 

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

 try_files $uri/index.html $uri @puma; 
 location @puma { 
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
   proxy_set_header Host $http_host; 
   proxy_redirect off; 

   proxy_pass http://puma; 
 } 

 error_page 500 502 503 504 /500.html; 
 client_max_body_size 10M; 
 keepalive_timeout 10; 
} 

Кто-нибудь знает, что может быть здесь происходит? Дайте мне знать, если вам нужна дополнительная информация.

Благодаря

ответ

5

Добавленные proxy_set_header X-Forwarded-Proto $scheme; к location @puma, который получил это происходит.

+0

Большое спасибо, это экономит мой день. У меня была точно такая же проблема, ваше решение работает как шарм. Любое объяснение? –

+0

@CupraR_On_Rails, как я понимаю, он позволяет приложению Rails видеть, что HTTP-протокол, к которому пришел запрос, и используется при создании токена аутентификации. – slehmann36

+0

Очень полезно для меня, спасибо. –

Смежные вопросы