Score:0

Nginx เคารพพร็อกซี Websocket ข้อผิดพลาด 404

ธง cn

ฉันกำลังทำงานกับ Nginx สองตัวที่อยู่ข้างหลังกัน

โครงสร้างพื้นฐานของเราเป็นแบบนี้ โครงสร้างพื้นฐาน

ปัญหา

ฉันมีปัญหากับการเชื่อมต่อ websocket เมื่อฉันส่งคำขอไปยัง Nginx Proxy pass จะส่งคืน 404 เสมอ แต่เมื่อฉันส่งคำขอไปยัง NGINX สุดท้ายก็ใช้งานได้ดี

บันทึกใน FINAL NGINX
# เมื่อคำขอไม่ผ่าน NGINX PROXY PASS
#เท่านี้ก็เรียบร้อย
<SOME-CLIENT-IP> - - [30/Sep/2021:13:46:02 +0000] "GET /cable HTTP/1.1" 101 22120 "-" "Mozilla/5.0 (Linux; Android 9; SM-A105M ) AppleWebKit/537.36 (KHTML เช่น Gecko) Chrome/94.0.4606.61 Mobile Safari/537.36"

# เมื่อคำขอผ่าน NGINX PROXY PASS
#มันผิด
<IP-NGINX-PROXY-PASS> - - [30/Sep/2021:13:46:09 +0000] "GET /cable HTTP/1.0" 301 14 "-" "Mozilla/5.0 (Linux; Android 11; SM -A505G) AppleWebKit/537.36 (KHTML เช่น Gecko) Chrome/89.0.4389.105 Mobile Safari/537.36"

สิ่งนี้เกิดขึ้นกับจุดสิ้นสุดการเชื่อมต่อ Websockets /cable เท่านั้น

NGINX Proxy ผ่านการกำหนดค่า

เซิร์ฟเวอร์ {
  server_name โดเมน.คอม;

  ที่ตั้ง / {
    proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
    proxy_set_header โฮสต์ $host;
    proxy_set_header เปิด X-Forwarded-Ssl; # ไม่จำเป็น
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Host $host;
    ปิด proxy_redirect;
    proxy_pass https://<IP-FINAL-NGINX>;
  }

  ตำแหน่ง / สายเคเบิล {
    proxy_pass http://<IP-FINAL-NGINX>;
    proxy_http_version 1.1;
    proxy_set_header อัพเกรด $http_upgrade;
    proxy_set_header การเชื่อมต่อ "อัพเกรด";
    proxy_set_header โฮสต์ $host;
    
    proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
    proxy_set_header โฮสต์ $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-ส่งต่อโปรโต https;
    ปิด proxy_redirect;
   }

  ฟัง [::]:443 ssl http2 ipv6only=on;
  ฟัง 443 ssl http2; # จัดการโดย Certbot
  ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # จัดการโดย Certbot
  ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # จัดการโดย Certbot
  
  ถ้า ($host != "domain.com") {
    กลับ 404;
  }
}

เซิร์ฟเวอร์ {
  server_name www.domain.com;
  
  ฟัง 443 ssl http2; # จัดการโดย Certbot
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # จัดการโดย Certbot
  
  ส่งคืน 301 example.com$request_uri;
}

เซิร์ฟเวอร์ {
  server_name โดเมน.คอม;
  ฟัง 80;

  ส่งคืน 301 https://<IP-FINAL-NGINX>$request_uri;
}

เซิร์ฟเวอร์ {
  server_name โดเมน.คอม;

  ที่ตั้ง / {
    proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
    proxy_set_header โฮสต์ $host;
    proxy_set_header เปิด X-Forwarded-Ssl; # ไม่จำเป็น
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Host $host;
    ปิด proxy_redirect;
    proxy_pass https://<IP-FINAL-NGINX>;
  }

  ตำแหน่ง / สายเคเบิล {
    proxy_pass http://<IP-FINAL-NGINX>;
    proxy_http_version 1.1;
    proxy_set_header อัพเกรด $http_upgrade;
    proxy_set_header การเชื่อมต่อ "อัปเกรด";
    proxy_set_header โฮสต์ $host;
    
    proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
    proxy_set_header โฮสต์ $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-ส่งต่อโปรโต https;
    ปิด proxy_redirect;
   }

  ฟัง [::]:31117 ssl http2 ipv6only=on;
  ฟัง 31117 ssl http2; # จัดการโดย Certbot
  ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # จัดการโดย Certbot
  ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # จัดการโดย Certbot
  
  ถ้า ($host != "domain.com") {
    กลับ 404;
  }
}

เซิร์ฟเวอร์ {
  server_name www.domain.com;
  
  ฟัง 31117 ssl http2; # จัดการโดย Certbot
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # จัดการโดย Certbot
  
  ส่งคืน 301 example.com$request_uri;
}


เซิร์ฟเวอร์ {
  server_name โดเมน.คอม;
  ฟัง 30723;

  ส่งคืน 301 https://<IP-FINAL-NGINX>$request_uri;
}

Final NGINX - สิ่งนี้เชื่อมต่อกับแอพสุดท้าย

ต้นน้ำ myapp {
  เซิร์ฟเวอร์ยูนิกซ์:/var/www/myapp/current/tmp/sockets/puma.sock fail_timeout=30s;
}

เซิร์ฟเวอร์ {
  server_name โดเมน.คอม;

  ที่ตั้ง / {
    proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
    proxy_set_header โฮสต์ $http_host;
    proxy_set_header เปิด X-Forwarded-Ssl; # ไม่จำเป็น
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Host $host;
    ปิด proxy_redirect;
    proxy_pass http://myapp;
  }

   ตำแหน่ง / สายเคเบิล {
    # ปลายทางนี้ '/cable' จัดการการเชื่อมต่อของ websocket
    proxy_pass http://myapp;
    proxy_http_version 1.1;
    proxy_set_header อัพเกรด $http_upgrade;
    proxy_set_header การเชื่อมต่อ "อัพเกรด";
    proxy_set_header โฮสต์ $http_host;
    
    proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
    proxy_set_header โฮสต์ $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-ส่งต่อโปรโต https;
    ปิด proxy_redirect;
   }
 
  ตำแหน่ง ~ ^/(เนื้อหา|img|คงที่|favicon)/ {
    รูท /var/www/nulinga/current/public;

    เปิด gzip_static;
    หมดอายุสูงสุด
    add_header แคชควบคุมสาธารณะ;
  }
  
  ฟัง [::]:443 ssl http2 ipv6only=on;
  ฟัง 443 ssl http2; # จัดการโดย Certbot
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # จัดการโดย Certbot
  รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot

  ถ้า ($host != "domain.com") {
    กลับ 404;
  }
  
  error_page 502 503 504 =503 /503.html;
  error_page 404 =404 /404.html;
  
  ตำแหน่ง = /503.html {
    รูท /var/www/myapp/current/public;
    อนุญาตทั้งหมด
    ภายใน;
  }

  สถานที่ = /404.html {
    รูท /var/www/myapp/current/public;
    อนุญาตทั้งหมด
    ภายใน;
  }


}

เซิร์ฟเวอร์ {
  server_name www.domain.com;
  
  ฟัง 443 ssl http2; # จัดการโดย Certbot
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # จัดการโดย Certbot
  รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot

  ส่งคืน 301 example.com$request_uri;


}

เซิร์ฟเวอร์ {
  server_name โดเมน คอม www.domain.com;
  ฟัง 80;

  ส่งคืน 301 example.com$request_uri;
}

ro flag
คุณพบสาเหตุที่แท้จริงแล้วหรือยัง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา