এনগিনেক্স পিএম 2 নোডজেএস বিএসএসের সাথে রিভার্স-প্রক্সি HTTP 504 দেয়


0

একবার একটি ভাল সময় পরে, আমি তিনটি একটি ভাল কনফিগ ছিল NodeJs , socket.io এপিআই একই চলমান উবুন্টু 16.4 LTS ভিপিএস সার্ভারের সাথে PM2 প্রক্রিয়া পরিচালনার এবং জন্য nginx তিনটি ভিন্ন সাবডোমেন থেকে রিভার্স প্রক্সি জন্য।

আমার সফলভাবে ইনস্টল করা যাক এনক্রিপ্টের একটি এসএসএল শংসাপত্র এবং সমস্ত সাবডোমেনগুলি একই ডোমেনের (আসুন উদাহরণস্বরূপ বলা যাক) এবং এটি https এ পুনঃনির্দেশিত হওয়া উচিত ।

আমি একবার ননডিজ অ্যাপ্লিকেশন (পিএইচপি / লারাভেল) এর জন্য চতুর্থ সাবডোমেন যুক্ত করার চেষ্টা করার পরে, বিপরীত প্রক্সিটি আর পাস হয় না এবং দুর্ভাগ্যক্রমে আমার পুরনো এনগিনেক্স কনফিগারেশনের ব্যাকআপ নেই।

এখন, আমি তিনটি পুরাতন NodeJs অ্যাপ্লিকেশনগুলির সাথে আমার VPS's সাদৃশ্য ফিরে পেতে চেষ্টা করছি, কিন্তু এটা আমার দেয় 504 গেটওয়ে টাইম-আউট থেকে nginx

এখানে আমার কনফিগারেশনটি আমি মনে করি যা একই পুরানো:

এই কনফিগারটি ক্রোমে দুর্দান্ত কাজ করে তবে আমি মোবাইল এবং ডেস্কটপ অ্যাপ্লিকেশনগুলি থেকে আমার এপিআইগুলিতে পৌঁছানোর চেষ্টা করছি।

  # HTTP — redirect all traffic to HTTPS
  server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;
    return 301 https://$host$request_uri;
  }

  # App1 from port 3000 to sub1.exemple.com
  server {
    # Enable HTTP/2
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name sub1.exemple.com;

    # Use the Let’s Encrypt certificates
    ssl_certificate
    /etc/letsencrypt/live/sub1.exemple.com/fullchain.pem;
    ssl_certificate_key
    /etc/letsencrypt/live/sub1.exemple.com/privkey.pem;

    # Include the SSL configuration from cipherli.st
    include snippets/ssl-params.conf;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-NginX-Proxy true;
      proxy_ssl_session_reuse off;
      proxy_set_header Host $http_host;
      proxy_cache_bypass $http_upgrade;

      proxy_pass http://localhost:3000/;
      proxy_redirect off;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
  }
  }

  # App2 from port 4000 to sub2.exemple.com
  server {
    # Enable HTTP/2
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name sub2.exemple.com;

    # Use the Let’s Encrypt certificates
    ssl_certificate
    /etc/letsencrypt/live/sub2.exemple.com/fullchain.pem;
    ssl_certificate_key
    /etc/letsencrypt/live/sub2.exemple.com/privkey.pem;

    # Include the SSL configuration from cipherli.st
    include snippets/ssl-params.conf;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-NginX-Proxy true;
      proxy_ssl_session_reuse off;
      proxy_set_header Host $http_host;
      proxy_cache_bypass $http_upgrade;

      proxy_pass http://localhost:4000/;
      proxy_redirect off;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }
  }

  # App2 from port 5000 to sub3.exemple.com
  server {
    # Enable HTTP/2
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name sub3.exemple.com;

    # Use the Let’s Encrypt certificates
    ssl_certificate
    /etc/letsencrypt/live/sub3.exemple.com/fullchain.pem;
    ssl_certificate_key
    /etc/letsencrypt/live/sub3.exemple.com/privkey.pem;

    # Include the SSL configuration from cipherli.st
    include snippets/ssl-params.conf;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-NginX-Proxy true;
      proxy_ssl_session_reuse off;
      proxy_set_header Host $http_host;
      proxy_cache_bypass $http_upgrade;

      proxy_pass http://localhost:5000/;
      proxy_redirect off;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }
  }

আরও তথ্যের জন্য আপডেট।

এনগিনেক্স, নোডজেস এবং পিএম 2 কোনও ত্রুটি দেয় না। লগগুলি পরিষ্কার। অনুরোধগুলি পরিদর্শন করার সময় আমি যা পাই তা এখানে।

সকেটের অনুরোধ করলে এটি সফল হয়: (উভয় wss://এবং https://)

ডাব্লুএসএস সফল

অন্যরা অনুরোধ করলে এটি ব্যর্থ হয়:

এইচটিটিপি / এস ব্যর্থ

আমি আরও উল্লেখ করতে চাই যে এসএসএল প্রতিটি উপের জন্য ভাল ইনস্টলড রয়েছে এবং অ্যাপ্লিকেশনগুলি স্থিতিশীল এবং কোনও সমস্যা ছাড়াই স্থানীয় সার্ভারে চলছে।

উত্তর:


1

proxy_set_header X-Forwarded-Proto $scheme; লোকেশন ব্লকের ভিতরে যুক্ত করার চেষ্টা করুন


প্রতিক্রিয়ার জন্য ধন্যবাদ, কিন্তু এটি সমস্যার সমাধান করেনি। এটি কী করা উচিত তা আমি ব্যাখ্যা করতে পারি এবং আমি কী এড়াতে দিই বা এটি সাহায্য না করে তা মুছে ফেলা উচিত।
মালেক বাউবাক্রি

1
আপনি চতুর্থ ডোমেনের জন্য এসএসএল সার্ট প্রসারিত করেছেন? এছাড়াও, দুর্দান্ত লাগবে, যদি আপনি লগ ফাইল থেকে কিছু ত্রুটি সরবরাহ করেন
Denys

@ ডেনিস হ্যাঁ তিনটি সাবডোমেনের জন্য শংসাপত্রটি প্রসারিত হয়েছে।
মালেক বাউবাক্রি

1
যদি এটি কোনও ওয়াইল্ডকার্ড শংসাপত্র না হয় তবে আপনাকে প্রতিটি সাবডোমেনের জন্য শংসাপত্র গ্রহণ করতে হবে বা আপনি যে সমস্ত ডোমেন ব্যবহার করতে পারবেন তার সাথে এটি পুনরায় তৈরি করতে হবে এবং পুরানোটি প্রত্যাহার করতে হবে
ড্যানিস

1
ঠিক আছে, তবে আপনি কি nginx_error.log থেকে লগ সরবরাহ করতে পারেন?
Denys

0

আমি সমস্যা মূর্ত আউট এবং এটি ছিল না না nginx , PM2 না , না Nodejs তন্ন তন্ন মধ্যে SSL এর , এটা অ্যাপস আমি মোতায়েন সমস্ত আছে। মোংডব প্রক্রিয়াটিতে একটি সমস্যা তাকে অটো-স্টার্ট না করতে বাধ্য করে । সুতরাং, অ্যাপ্লিকেশন প্রথমটির অনুরোধ গ্রহণ করে কারণ এটি ডাটাবেস হস্তক্ষেপের প্রয়োজন হয় না এবং একটি সময়সীমা শেষে লগইন অনুরোধ প্রত্যাখ্যান করে কারণ অ্যাপ্লিকেশনটি ইতিমধ্যে ক্র্যাশ হয়েছে তবে পিএম 2 এটি পুনরায় চালু করে এবং এনগিনেক্স সাব-ডোমেনটিকে অনুরোধের জন্য উন্মুক্ত রাখে।

এফএফ: সুতরাং আপনি যদি এখান দিয়ে যান তবে আপনার সম্ভবত আপনার অ্যাপ্লিকেশন এনভিউ পরীক্ষা করা দরকার। উদা: এসজিবিডি, আর / ডাব্লু অনুমতি, এপিআই ...

আশা করি এটি একই সমস্যা সহ যে কাউকে সহায়তা করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.