Lucrez cu doi Nginx unul în spatele celuilalt.
Infrastructura noastră este așa
infrastructura
Problemă
Am probleme cu conexiunile websocket, când trimit cererea către Nginx Proxy pass returnează întotdeauna 404, dar când trimit cererea către NGINX final, funcționează bine.
Conectați-vă în FINAL NGINX
# când solicitarea nu trece prin NGINX PROXY PASS
# este în regulă
<SOME-CLIENT-IP> - - [30/Sep/2021:13:46:02 +0000] „GET /cablu HTTP/1.1” 101 22120 „-” „Mozilla/5.0 (Linux; Android 9; SM-A105M ) AppleWebKit/537.36 (KHTML, ca Gecko) Chrome/94.0.4606.61 Mobile Safari/537.36"
# când solicitarea trece prin NGINX PROXY PASS
# este gresit
<IP-NGINX-PROXY-PASS> - - [30/Sep/2021:13:46:09 +0000] „GET /cablu HTTP/1.0” 301 14 „-” „Mozilla/5.0 (Linux; Android 11; SM -A505G) AppleWebKit/537.36 (KHTML, cum ar fi Gecko) Chrome/89.0.4389.105 Mobile Safari/537.36"
Acest lucru se întâmplă numai cu conexiunile Websockets endpoint /cablu.
NGINX Proxy pass conf
Server {
nume_server domeniu.com;
Locație / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Gazdă $gazdă;
proxy_set_header X-Forwarded-Ssl activat; # Opțional
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Host $gazdă;
proxy_redirect dezactivat;
proxy_pass https://<IP-FINAL-NGINX>;
}
locație /cablu {
proxy_pass http://<IP-FINAL-NGINX>;
proxy_http_versiunea 1.1;
proxy_set_header Actualizare $http_upgrade;
proxy_set_header Conexiune „upgrade”;
proxy_set_header Gazdă $gazdă;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Gazdă $gazdă;
proxy_set_header X-Real-IP $adresă_la distanță;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect dezactivat;
}
asculta [::]:443 ssl http2 ipv6only=on;
asculta 443 ssl http2; # gestionat de Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # gestionat de Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # gestionat de Certbot
dacă ($gazdă != „domeniu.com”) {
întoarce 404;
}
}
Server {
nume_server www.domeniu.com;
asculta 443 ssl http2; # gestionat de Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # gestionat de Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # gestionat de Certbot
returnează 301 example.com$request_uri;
}
Server {
nume_server domeniu.com;
asculta 80;
returnează 301 https://<IP-FINAL-NGINX>$request_uri;
}
Server {
nume_server domeniu.com;
Locație / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Gazdă $gazdă;
proxy_set_header X-Forwarded-Ssl activat; # Opțional
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Host $gazdă;
proxy_redirect dezactivat;
proxy_pass https://<IP-FINAL-NGINX>;
}
locație /cablu {
proxy_pass http://<IP-FINAL-NGINX>;
proxy_http_versiunea 1.1;
proxy_set_header Actualizare $http_upgrade;
proxy_set_header Conexiune „upgrade”;
proxy_set_header Gazdă $gazdă;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Gazdă $gazdă;
proxy_set_header X-Real-IP $adresă_la distanță;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect dezactivat;
}
asculta [::]:31117 ssl http2 ipv6only=on;
asculta 31117 ssl http2; # gestionat de Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # gestionat de Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # gestionat de Certbot
dacă ($gazdă != „domeniu.com”) {
întoarce 404;
}
}
Server {
nume_server www.domeniu.com;
asculta 31117 ssl http2; # gestionat de Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # gestionat de Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # gestionat de Certbot
returnează 301 example.com$request_uri;
}
Server {
nume_server domeniu.com;
asculta 30723;
returnează 301 https://<IP-FINAL-NGINX>$request_uri;
}
NGINX final - aceasta se conectează cu aplicația finală
în amonte aplicația mea {
server unix:/var/www/myapp/current/tmp/sockets/puma.sock fail_timeout=30s;
}
Server {
nume_server domeniu.com;
Locație / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Gazdă $http_host;
proxy_set_header X-Forwarded-Ssl activat; # Opțional
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Host $gazdă;
proxy_redirect dezactivat;
proxy_pass http://myapp;
}
locație /cablu {
# acest punct final „/cablu” se ocupă de conexiunile websocket
proxy_pass http://myapp;
proxy_http_versiunea 1.1;
proxy_set_header Actualizare $http_upgrade;
proxy_set_header Conexiune „upgrade”;
proxy_set_header Gazdă $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Gazdă $http_host;
proxy_set_header X-Real-IP $adresă_la distanță;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect dezactivat;
}
locație ~ ^/(assets|img|static|favicon)/ {
root /var/www/nulinga/current/public;
gzip_static activat;
expira max;
add_header Cache-Control public;
}
asculta [::]:443 ssl http2 ipv6only=on;
asculta 443 ssl http2; # gestionat de Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # gestionat de Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # gestionat de Certbot
includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot
dacă ($gazdă != „domeniu.com”) {
întoarce 404;
}
pagina_eroare 502 503 504 =503 /503.html;
error_page 404 =404 /404.html;
locație = /503.html {
root /var/www/myapp/current/public;
permite totul;
intern;
}
locație = /404.html {
root /var/www/myapp/current/public;
permite totul;
intern;
}
}
Server {
nume_server www.domeniu.com;
asculta 443 ssl http2; # gestionat de Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # gestionat de Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # gestionat de Certbot
includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot
returnează 301 example.com$request_uri;
}
Server {
nume_server domeniu.com www.domeniu.com;
asculta 80;
returnează 301 example.com$request_uri;
}