nginx প্রক্সি পাস পুনর্নির্দেশ পোর্ট উপেক্ষা


34

সুতরাং আমি আমার ভার্চুয়াল পাথ সেট আপ করছি যখন আমার এনজিন্স কনফেয়ারে একটি নোড.জেএস অ্যাপ্লিকেশনটিতে নির্দেশ করবে ting প্রাসঙ্গিক বিভাগটি দেখতে এমন দেখাচ্ছে:

location /app {
  rewrite /app/(.*) /$1 break;
  proxy_pass http://localhost:3000;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

আমার নোড.জেএস অ্যাপ্লিকেশন (একটি এক্সপ্রেস অ্যাপ্লিকেশন) পুনঃনির্দেশের কল করলে কেবল দুর্দান্ত কাজ করে।

উদাহরণস্বরূপ, ডিভ বক্স 8080 পোর্টে এনজিনেক্স চালাচ্ছে, এবং তাই নোড অ্যাপ্লিকেশনটির মূলটিতে ইউআরএলগুলি দেখে মনে হচ্ছে:

HTTP: // স্থানীয় হোস্ট: 8080 / অ্যাপ

আমি যখন নোড থেকে '/ অ্যাপ' এ পুনঃনির্দেশ কল করি তখন আসল পুনঃনির্দেশটি এতে যায়:

HTTP: // স্থানীয় হোস্ট / অ্যাপ


এখানে কিছু উত্তর যা ব্যবহারের পরামর্শ দেয়: প্রক্সি_সেট_হেডার হোস্ট $ http_host; তবে কেউই বলেনি যে এটি দুর্বলতা হতে পারে (হোস্ট শিরোনাম আক্রমণ)। এখানে উদাহরণ আক্রমণ এবং আরো তথ্য এখানে

উত্তর:


14

সমস্যাটি হ'ল নোড.জেএস অ্যাপ্লিকেশন সঠিকভাবে পুনঃনির্দেশ জারি করছে না। আপনি proxy_redirectএটিকে nginx এ সংশোধন করতে ব্যবহার করতে সক্ষম হতে পারেন :

proxy_redirect http://localhost/ http://localhost:8080/;

47

জিনকিন্স এনজিএনএক্সের পিছনে দৌড়ানো নিয়ে আমার কেবল একই সমস্যাটি সমাধান করতে হয়েছিল। সার্ভার পোর্টটি Hostজেনকিন্সকে যে শিরোনামে পাঠানো হচ্ছে তার মধ্যে অন্তর্ভুক্ত করা আমার পক্ষে কী ছিল :

proxy_set_header Host $host:$server_port;

আশা করি এইটি কাজ করবে.


3
বিঙ্গো। যেমনটি @ এমগোর্ভেন বলেছেন, নোড খারাপভাবে পুনর্নির্দেশটি সেট করছে, কারণ
এরিক

5

আমি উপরের সমাধানগুলি চেষ্টা করেছিলাম, তবে নোড অ্যাপ্লিকেশন লোকেশন শিরোনামে যেমন একটি সম্পূর্ণরূপে ইউআরএল জারি করে তখনই তারা ব্যর্থ হয়, যেমন " http://nodeapp.com:8080/new/location "

তাই আমি হোস্ট এবং পোর্ট পাস করতে $ http_host ব্যবহার করে ক্ষতবিক্ষত করেছি। এবং সম্পূর্ণরূপে url পুনর্লিখনের জন্য একটি ম্যাচ ~। ব্যবহার করে using

  proxy_pass http://10.0.0.3:8080;

  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $http_host;

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  proxy_redirect default;
  proxy_redirect ~^(https?://[^:]+):\d+(?<relpath>/.+)$ http://10.0.0.3:8000$relpath;

আমাদের ক্ষেত্রে, নোড সার্ভারটি ৮০৮০ চলছে এবং আমাদের এনগিনেক্স প্রক্সিটি ৮০০০-এ চলছে This এর অর্থ হ'ল কোনও অবস্থানের শিরোনামে প্রতিটি সম্পূর্ণ যোগ্য URL টি পুনরায় লেখা দরকার। আশা করি এটি কাউকে সাহায্য করবে !!


4

এই প্রশ্নের কথোপকথন অনুসারে , যথাযথ রেজোলিউশন হ'ল প্রক্সিটির Hostশিরোনামের নির্দেশকে সামঞ্জস্য করা ।

এই পরিবর্তন:

proxy_set_header Host $host;

এটি:

proxy_set_header Host $http_host;

$http_hostHTTP HOST শিরোনামে উল্লিখিত মানটি ধারণ করে, এতে পোর্ট অন্তর্ভুক্ত রয়েছে। পুনঃনির্দেশগুলি ওপি'র সেটআপে আরও কাস্টমাইজেশন ছাড়াই কাস্টম পোর্টটি বেছে নিতে হবে।

এই উত্তরগুলি (একই টিকিট) আরও বিস্তৃত:

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