Приложение Rails, использующее Nginx, работает по HTTP, но не по HTTPS - PullRequest
0 голосов
/ 12 февраля 2020

Я пытался заставить мое приложение работать на производстве. Я смог получить доступ к сайту до изменения config.force_ssl = true в моем config\environments\production.rb.

Я видел, что многим другим с этой проблемой нужно добавить proxy_set_header X-Fowarded-Proto https;

Я пытался добавить это в свой /etc/nginx/sites-available/default, но не увидел разницы.

Мой полный default ниже:

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

server {
  listen 80;
  listen [::]:80; 
  listen 443 ssl;
  listen [::]:443 ssl; 

  root /var/www/html; 

  index index.html index.htm index.nginx-debian.html

  server_name appname.com www.appname.com

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

    proxy_pass http://puma;
  }

}

После внесения изменений я перезагрузил nginx, используя sudo service nginx reload, затем sudo service nginx stop и sudo service nginx start

Я что-то пропустил?


РЕДАКТИРОВАТЬ :

Я обновил default и удалил config.force_ssl = true:

upstream puma {
  server unix:///home/kiui/apps/appnamw/shared/tmp/sockets/appname-puma.sock;
}

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  keepalive_timeout   70;
  server_name appname.com www.appname.com;
  ssl on;
  ssl_certificate /root/appname.com.chain.cer;
  ssl_certificate_key /root/appname.com.key;
  ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
  ssl_session_cache   shared:SSL:10m;
  ssl_session_timeout 10m;

  root /home/deploy/apps/appname/current/public;
  access_log /home/deploy/apps/appname/current/log/nginx.access.log;
  error_log /home/deploy/apps/appname/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 $host;
    proxy_redirect off;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://puma;
  }

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

Теперь я могу получить доступ к сайт с http, но не https.

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Не могли бы вы попробовать следующее:

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

server {
  listen 80;
  server_name appname.com www.appname.com;
  return 301 https://$host$request_uri;
}

server {
  # SSL configuration
  ssl on;
  listen 443 ssl;
  ssl_certificate path-to-your-crt-file;
  ssl_certificate_key path-to-your-key-file;
  server_name appname.com www.appname.com;

  ...
}
0 голосов
/ 12 февраля 2020

Моя проблема была в том, где я добавлял код выше. Я добавил это в default, а не nginx.conf. Перемещение кода выше решило проблему.

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