Dies ist eine Geschichte, als ich Action Cable verwendet habe, um einer mit Ruby on Rails erstellten App eine Echtzeit-Chat-Funktion hinzuzufügen.
In der lokalen Umgebung funktionierte es einwandfrei, aber der Echtzeit-Chat-Teil funktionierte in der Produktionsumgebung nicht.
Nach der Untersuchung der Ursache scheint es notwendig zu sein, nginx so einzustellen, dass es der in ActionCable verwendeten Kommunikation namens websocket entspricht.
Dies ist die ursprüngliche Nginx-Einstellung. Dies ist auch enthalten, damit der Unterschied zwischen vor und nach der Korrektur leicht verstanden werden kann. Dies hat gut funktioniert, bevor ActionCable implementiert wurde.
# https://github.com/puma/puma/blob/master/docs/nginx.md
upstream app {
server unix:///app/tmp/sockets/puma.sock;
}
server {
listen 80;
Servername ***. ***. ***. ***; # IP-Adresse der App
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;
}
}
Um mit der Websocket-Kommunikation umgehen zu können Ort / Kabel und darunter hinzugefügt.
https://github.com/puma/puma/blob/master/docs/nginx.md
upstream app {
server unix:///app/tmp/sockets/puma.sock;
}
server {
listen 80;
Servername ***. ***. ***. ***; # IP-Adresse der App
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;
}
}
# Fügen Sie Folgendes hinzu
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;
}
#Zusatzteil bis hierher
location ~* \.(ico|css|gif|jpe?g|png|js)(\?[0-9]+)?$ {
expires max;
break;
}
}
Recommended Posts