এনগিনেক্স: আমি কীভাবে অন্য একটি বন্দরে একটি HTTP অনুরোধ ফরোয়ার্ড করব?


65

আমি যা করতে চাই তা হ'ল

যখন কেউ http://localhost/route/abcসার্ভারের প্রতিক্রিয়াটি দেখতে আসে ঠিক তেমনইhttp://localhost:9000/abc

এখন আমি আমার এনগিনেক্সকে এটির মতো কনফিগার করব:

location /route {
    proxy_pass  http://127.0.0.1:9000;
}

HTTP অনুরোধটি 9000সঠিকভাবে পোর্ট প্রেরণ করা হয়েছে, তবে এটি প্রাপ্ত পথটি http://localhost:9000/route/abcনয় http://localhost:9000/abc

যেকোনো পরামর্শ ?

উত্তর:


65

আমি এখানে সূক্ষ্মতা ঘৃণা করি, তবে নীচের মত 9000 এর শেষে / যুক্ত করার চেষ্টা করুন। এটি এখন ফরওয়ার্ড করা অনুরোধে আর "রুট" যুক্ত করবে না।

location /route {
    proxy_pass  http://127.0.0.1:9000/;
}

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। সহজভাবে যুক্ত /করা ভাল অবস্থানে তালিকাভুক্ত উপসর্গ সরানোর উপায় হিসাবে নথিভুক্ত করা হয়।
বার্নার্ড

40

আমি বিশ্বাস করি আপনি ইউআরএলটির অতিরিক্ত অংশটি সরিয়ে দিতে পুনর্লিখন ব্যবহার করতে পারেন। আপনার ক্ষেত্রে আমি মনে করি আপনি ব্যবহার করতে পারেন:

location /route/ {
    rewrite ^/route/?(.*)$ /$1 break;    
    proxy_pass  http://127.0.0.1:9000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

তবে আপনার অ্যাপ্লিকেশনটিতে যদি অভ্যন্তরীণ লিঙ্কগুলি থাকে তবে তারা এখনও / abc / foo এ নির্দেশ করতে পারে এবং আপনি যদি এটি করেন তবে তাদের পরিবর্তে / রুট / অ্যাবিসি / ফুকে নির্দেশ করতে হবে যাতে কাঁচা অনুরোধটি সঠিকভাবে আসে। আপনি এনগিনেক্স কনফিগারেশনটি যেমন রেখেছেন ততই ভাল হতে পারেন এবং সচেতন হওয়ার জন্য আপনার অ্যাপ্লিকেশনটি কনফিগার করার পরিবর্তে এটি একটি সাব-ডিরেক্টরিতে থাকতে পারে, যদি আপনি পারেন তবে।

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে যখন আমি একই সমস্যাটি সমাধান করার চেষ্টা করছিলাম তখন এটি আমার জন্য শীর্ষ গুগল হিট ছিল!


ধন্যবাদ! এই লিঙ্কে আমরা ভেরিয়েবলগুলির তালিকাটি পর্যালোচনা করতে পারি: wiki.nginx.org/HttpProxyModule#
এডগার্ড

17

নিম্নলিখিত চেষ্টা করুন

location /route/ {
        proxy_pass  http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

এই সমাধানটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে, কারণ এটি হোস্টের নাম সংরক্ষণ করে।
শফিক জামাল

পরিষ্কার এবং সহজ।
রাবশান সামন্দরভ

7

vim nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

  server {
    listen 8080;

    location / {
      proxy_pass http://compute-1-36:8787;
      proxy_redirect http://compute-1-36:8787/ $scheme://$host:8080/;
    }
  }

এই কোডটি 8080 এ শুনুন এবং গণনা-1-36-তে 8787 পোর্টে পুনর্নির্দেশ করুন। আপনি অবস্থানের অন্য পথ নির্বাচন করতে পারেন /

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