[RUBY] [Rails] J'étais accro aux paramètres nginx lors de l'utilisation d'Action Cable.

introduction

C'est une histoire lorsque j'ai utilisé Action Cable pour ajouter une fonction de chat en temps réel à une application créée avec Ruby on Rails.

Cela fonctionnait bien dans l'environnement local, mais la partie de chat en temps réel ne fonctionnait pas dans l'environnement de production.

Après avoir enquêté sur la cause, il semble qu'il soit nécessaire de configurer nginx pour qu'il corresponde à la communication appelée websocket utilisée dans ActionCable.

(Pour référence) Paramètres d'origine nginx

Il s'agit du paramètre nginx d'origine. Ceci est également inclus afin que la différence entre avant et après correction puisse être facilement comprise. Cela a bien fonctionné avant d'implémenter ActionCable.


 # https://github.com/puma/puma/blob/master/docs/nginx.md
upstream app {
  server unix:///app/tmp/sockets/puma.sock;
}

server {
  listen 80;
 nom_serveur ***. ***. ***. ***; # adresse IP de l'application

  keepalive_timeout 5;

  # static files
  root /app/public;

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;

    # static files
    if (-f $request_filename) {
      break;
    }
    if (-f $request_filename.html) {
      rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename.html) {
      rewrite (.*) $1.html break;
    }

    if (!-f $request_filename) {
      proxy_pass http://app;
      break;
    }
  }

   location ~* \.(ico|css|gif|jpe?g|png|js)(\?[0-9]+)?$ {
    expires max;
    break;
  }
}

Paramètres Nginx pour Action Cable

Pour pouvoir gérer la communication Websocket Emplacement / câble ajouté et ci-dessous.


 https://github.com/puma/puma/blob/master/docs/nginx.md
upstream app {
  server unix:///app/tmp/sockets/puma.sock;
}

server {
  listen 80;
 nom_serveur ***. ***. ***. ***; # adresse IP de l'application
  keepalive_timeout 5;

  # static files
  root /app/public;

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;

    # static files
    if (-f $request_filename) {
      break;
    }
    if (-f $request_filename.html) {
      rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename.html) {
      rewrite (.*) $1.html break;
    }

    if (!-f $request_filename) {
      proxy_pass http://app;
      break;
    }
  }

 # Ajoutez ce qui suit

  location /cable {
    proxy_http_version 1.1;
    proxy_set_header Upgrade websocket;
    proxy_set_header Connection Upgrade;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://app/cable;
  }

 #Pièce supplémentaire jusqu'à ici

   location ~* \.(ico|css|gif|jpe?g|png|js)(\?[0-9]+)?$ {
    expires max;
    break;
  }
}

Recommended Posts

[Rails] J'étais accro aux paramètres nginx lors de l'utilisation d'Action Cable.
Une histoire à laquelle j'étais accro lors du test de l'API à l'aide de MockMVC
Ce à quoi j'étais accro en utilisant rspec sur des rails
L'histoire à laquelle j'étais accro lors de la création de STS
J'étais accro à la méthode du rouleau
J'étais accro au test Spring-Batch
Ce à quoi j'étais accro lors de la mise en œuvre de l'authentification Google avec des rails
J'étais accro à l'utilisation de RXTX avec Sierra
Mémorandum: Ce à quoi j'étais accro quand j'ai frappé l'API de comptabilité freee
Problèmes auxquels j'étais accro lors de la création de l'environnement digdag avec docker
[Circle CI] J'étais accro au test automatique de Circle CI (rails + mysql) [Memo]
J'étais accro à NoSuchMethodError dans Cloud Endpoints
J'étais accro au record du modèle associé
Ce que j'ai corrigé lors de la mise à jour vers Spring Boot 1.5.12 ・ Ce à quoi j'étais accro
J'étais accro à la configuration de default_url_options avec l'introduction de la conception de Rails
J'étais accro à la mise à jour de la déclaration dans MyBatis
J'étais accro au réglage de laradock + VSCode + xdebug
Ce à quoi j'étais accro avec l'API REST Redmine
J'étais étrangement accro à l'utilisation de l'API Stream de Java avec Scala
J'étais accro au démarrage de sbt
Une note quand j'étais accro à la conversion d'Ubuntu sur WSL1 en WSL2
À propos de la question pour laquelle j'étais accro à l'utilisation de hashmap
J'étais accro au paramètre API version min23 de registerTorchCallback
[Rails 5] Comment afficher l'écran de changement de mot de passe lors de l'utilisation de l'appareil
[Rails] Comment résoudre ActiveSupport :: MessageVerifier :: InvalidSignature auquel j'étais accro lors de l'introduction de la connexion Twitter [ActiveStorage]
J'étais accro à la réécriture sur @ SpringApplicationConfiguration-> @SpringBootTest
J'ai résumé les points à noter lors de l'utilisation combinée des ressources et des ressources
J'étais accro à l'idée de toucher MySQL 8.0 avec un sentiment de 5.7. Problème de configuration My.cnf
Enregistré parce que j'étais accro à l'entrée standard de la classe Scanner
J'étais accro au scrollview car je ne pouvais pas appuyer sur la taille variable UIView
J'étais accro aux tests unitaires avec l'opérateur de tampon dans RxJava
[Rails] Quand j'utilise form_with, l'écran se fige! ??
[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
J'ai essayé d'organiser la session en Rails
Code utilisé pour connecter Rails 3 à PostgreSQL 10
J'étais accro à faire onActivityResult () avec DialogFragment
J'étais accro à ne pas pouvoir me connecter à AWS-S3 à partir du conteneur Docker
J'étais un peu accro à la comparaison S3 Checksum, alors prenez note.
Ce à quoi j'étais accro lors du développement d'une application Spring Boot avec VS Code
Notez que j'étais accro au traitement par lots avec Spring Boot
Lors de la création d'une application personnelle, je me demandais si je devais la faire en utilisant haml
Lors de l'importation de CSV avec Rails, il était vraiment facile d'utiliser la commande nkf
La partie à laquelle j'étais accro dans "Introduction à Ajax dans les applications Web Java" de NetBeans
Notez que j'étais accro aux paramètres du projet Android d'IntelliJ IDEA
[Rails] Solution lorsque l'erreur "visite de la méthode non définie" "apparaît lors de l'utilisation de Capybara avec Rspec
Une histoire à laquelle j'étais accro lors de l'obtention d'une clé qui a été automatiquement essayée sur MyBatis
Je veux juger la gamme en utilisant le diplôme mensuel
[Rails] Je ne sais pas comment utiliser le modèle ...
[Ruby] Incompréhension que j'utilisais le module [Débutant]
Je veux appeler la méthode principale en utilisant la réflexion
Accro au Webpacker fourni en standard avec Rails 6