Nginx SSL работает, но отправляет запрос как http - PullRequest
0 голосов
/ 07 марта 2019

Я следовал Развертывание приложения Rails в Ubuntu 14.04 с Capistrano, Nginx и Puma для развертывания приложения Rails в Digital Ocean.

Было предложено сохранить nginx.conf (/ etc / nginx / sites-enabled / medical-app) как

upstream puma {
  server unix:///home/myappuser/apps/medical-app/shared/tmp/sockets/medical-app-puma.sock;
}

server {
  listen 80 default_server deferred;
  # server_name example.com;

  root /home/myappuser/apps/medical-app/current/public;
  access_log /home/myappuser/apps/medical-app/current/log/nginx.access.log;
  error_log /home/myappuser/apps/medical-app/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;
}

и чем я добавил домен и чем установил SSL с использованием зашифруем который изменил nginx.conf (/ etc / nginx / sites-enabled / medical-app) следующим образом

upstream puma {
  server unix:///home/myappuser/apps/medical-app/shared/tmp/sockets/medical-app-puma.sock;
}

server {
  listen 80 default_server deferred;
  # server_name example.com;

  root /home/myappuser/apps/medical-app/current/public;
  access_log /home/myappuser/apps/medical-app/current/log/nginx.access.log;
  error_log /home/myappuser/apps/medical-app/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;
}

server {
  # server_name example.com;
  root /home/myappuser/apps/medical-app/current/public;
  access_log /home/myappuser/apps/medical-app/current/log/nginx.access.log;
  error_log /home/myappuser/apps/medical-app/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;

    server_name www.medtib.com medtib.com; # managed by Certbot

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.medtib.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.medtib.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = medtib.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = www.medtib.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

  listen 80  ;
    server_name www.medtib.com medtib.com;
    return 404; # managed by Certbot
}

Теперь https работает нормально , но если я включаю принудительное SSL черезRails config

config.force_ssl = true

Чем страница ошибок не работает с сообщением перенаправлено слишком много раз

и если я пытаюсь войти в систему через Facebook, который требует https, то он выдает следующую ошибку

Try re-loading the page as https://

Я не имею представления о nginx и т. д.

1 Ответ

1 голос
/ 07 марта 2019

Вам следует переслать заголовок X-Forwarded-Proto в ваше приложение, чтобы сообщить вашему приложению, какой протокол используется.(https, http)

Поставьте следующее:

proxy_set_header X-Forwarded-Proto $scheme;

До:

proxy_pass http://puma;

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...