প্রক্সি_পাস ব্যবহার করার সময় কীভাবে এনগিনেক্সে প্রতিক্রিয়া শিরোনাম যুক্ত করবেন?


92

আমি nginx এর পিছনে সার্ভার থেকে প্রাপ্ত প্রতিক্রিয়ার জন্য একটি কাস্টম শিরোনাম যুক্ত করতে চাই।

add_headerএনজিনেক্স-প্রক্রিয়াজাত প্রতিক্রিয়াগুলির জন্য কাজ করার সময় , এটি proxy_passব্যবহৃত হয়ে গেলে কিছুই করে না ।


সুতরাং আপনি প্রক্সি এবং সেই প্রক্সি সেট প্রতিক্রিয়াটির অনুরোধটি পাস করেন এবং এই প্রতিক্রিয়ায় আপনি আপনার কাস্টম শিরোনামটি এটি ব্যবহারকারীকে প্রেরণের আগে যুক্ত করতে চান, এটি সঠিক?
emka86

উত্তর:


31

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

location ... {
  more_set_headers "Server: my_server";
}

এটি "কোনও স্থিতি কোড এবং যে কোনও সামগ্রী ধরণের জন্য কাস্টম মানটিতে সার্ভার আউটপুট শিরোনাম সেট করবে"। এটি ইতিমধ্যে সেট করা শিরোনামগুলি প্রতিস্থাপন করবে বা আনসেট না থাকলে এগুলি যুক্ত করবে।


এটি যোগ করা সম্ভব Secureএবং HttpOnlyএকটি উপর পতাকা প্রতিক্রিয়া কুকি ? লক্ষ্য প্রতিক্রিয়া কুকি শুধুমাত্র কুকি nameএবং expireবৈশিষ্ট্য আছে।
জেপলপুঞ্জলান

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

162

add_headerপাশাপাশি হিসাবে পাশাপাশি কাজ করে proxy_pass। আমি ঠিক আজই একটি কনফিগারেশন সেট আপ করেছি যেখানে আমি ঠিক সেই নির্দেশ ব্যবহার করেছি। যদিও আমি স্বীকার করতেই পারি যে, কারণটি সঠিকভাবে স্মরণ না করেই আমি এই লড়াইয়ের পাশাপাশি লড়াই করেছি।

এই মুহূর্তে আমার একটি কার্যকারী কনফিগারেশন রয়েছে এবং এতে নিম্নলিখিতগুলি রয়েছে (অন্যদের মধ্যে):

server {
    server_name  .myserver.com
    location / {
        proxy_pass  http://mybackend;
        add_header  X-Upstream  $upstream_addr;
    }
}

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

এনজিএনএক্স যেহেতু আপনি ত্রুটি প্রতিক্রিয়াগুলিতে এমনকি কাস্টম শিরোনাম অন্তর্ভুক্ত 1.7.5করতে কীওয়ার্ডটি ব্যবহার করতে পারেন always। উদাহরণ স্বরূপ:

add_header X-Upstream $upstream_addr always;

সীমাবদ্ধতা: আপনি serverহেডার মানটি ব্যবহার করে ওভাররাইড করতে পারবেন না add_header


41
যেহেতু nginx 1.7.5 আপনি add_header ব্যবহার করে ত্রুটি প্রতিক্রিয়াগুলিতে কাস্টম শিরোলেখকে অন্তর্ভুক্ত করতে "সর্বদা" ব্যবহার করতে পারেন:add_header X-Upstream $upstream_addr always;
শেন

যাইহোক, প্রক্সাইড সার্ভারের আইপি / পোর্ট সংমিশ্রণটি ডাব্লু / ও এর অনুরূপ কার্যকারিতা রাখতে হবে? যেমন X-Upstream: 10.10.10.10বনাম X-Upstream: 53c2d28edefdf501ab7c92e02a0c1687(এমডি 5 সম্ভবত অবকাঠামোটি মাস্ক করার ক্ষেত্রে সহায়ক নয়, তবে এটি ধারণাটি পৌঁছে দেয়)।
জামনটস

@ জামানটস: উজানের আইপি এবং পোর্ট নম্বরগুলি পাস করা add_headerনির্দেশিকা ব্যবহারের উদাহরণ is আপনাকে এগুলি কিছুতেই পাঠাতে হবে না।
অলিভার

@ অলিভার, আমি এটি সম্পর্কে অবহিত, তবে আমি আইপি / পোর্ট নম্বরগুলি ব্যতীত বিকল্প স্বতন্ত্র / স্বতন্ত্র প্রবাহের সনাক্তকারী, বা এটির একটি বিভ্রান্তির বিষয়ে অনুসন্ধান করছিলাম। সম্ভবত আমার প্রশ্নটি সুযোগের বাইরে নয় এবং আমার একটি নতুন পোস্ট তৈরি করা উচিত :)
জ্যামনেটস

@ জামনটস: আমি একটি নতুন প্রশ্ন জিজ্ঞাসা করার পরামর্শ দিচ্ছি :-)
অলিভার

25

অলিভার যেমন লিখেছেন:

add_headerপাশাপাশি হিসাবে পাশাপাশি কাজ করে proxy_pass

যাইহোক, শেন যেমন লিখেছেন, এনগিনেক্স ১.7.৫ অনুসারে, ত্রুটির প্রতিক্রিয়ার জন্য কাজ alwaysকরতে আপনাকে অবশ্যই পাস করতে হবে add_header:

add_header  X-Upstream  $upstream_addr always;

4
আমার শিরোনামগুলি কেন সার্ভার ব্লক, অবস্থান ব্লক, এগুলিকে সরানোর চেষ্টা করছে না ... এবং এই কারণটির কারণ এখানে ছিল: এই ভেবে ভেবে আমি দীর্ঘ সময় কাটিয়েছি,
এনজিনেক্সগুলি

আমিও :) এবং এই উত্তর সত্ত্বেও আমার সাথে অন্য দিনটি আবার ঘটেছিল। আমার নিজের উত্তরটি পর্যালোচনা করতে হবে।
দিমিত্রি মিনকভস্কি


16

প্রতিক্রিয়া শিরোনামটি লুকান এবং তারপরে একটি নতুন কাস্টম শিরোনাম মান যুক্ত করুন

add_headerপ্রক্সি পাস দিয়ে সূক্ষ্ম কাজ করে এমন একটি শিরোনাম যুক্ত করা , তবে প্রতিক্রিয়াটিতে যদি একটি বিদ্যমান শিরোনাম মান থাকে তবে এটি মানগুলিকে স্ট্যাক করবে।

যদি আপনি একটি শিরোনাম মান সেট বা প্রতিস্থাপন করতে চান (উদাহরণস্বরূপ Access-Control-Allow-Originক্রস উত্স সংস্থান ভাগ করার অনুমতি দেওয়ার জন্য আপনার ক্লায়েন্টের সাথে মেলে শিরোনামটি প্রতিস্থাপন করুন ) তবে আপনি নিম্নলিখিত হিসাবে এটি করতে পারেন:

# 1. hide the Access-Control-Allow-Origin from the server response
proxy_hide_header Access-Control-Allow-Origin;
# 2. add a new custom header that allows all * origins instead
add_header Access-Control-Allow-Origin *;

সুতরাং এর সাথে proxy_hide_headerসম্মিলিত add_headerআপনাকে প্রতিক্রিয়া শিরোনামের মানগুলি সেট / প্রতিস্থাপনের শক্তি দেয়।

অনুরূপ উত্তর সার্ভারফল্টে এখানে পাওয়া যাবে

হালনাগাদ:

দ্রষ্টব্য: proxy_set_header অনুরোধটি আরও প্রেরণের আগে অনুরোধ শিরোনাম নির্ধারণের জন্য, প্রতিক্রিয়া শিরোনামগুলি সেট করার জন্য নয় (শিরোনামগুলির জন্য এই কনফিগারেশন বৈশিষ্ট্যগুলি কিছুটা বিভ্রান্ত হতে পারে)।


ধন্যবাদ, দুর্দান্ত সহায়তা
ল্যান্সার.আয়ান

14

আপনি এই সমাধান চেষ্টা করতে পারেন:

আপনার locationব্লকে যখন আপনি ব্যবহার করেন proxy_passএমন কিছু করুন:

location ... {

  add_header yourHeaderName yourValue;
  proxy_pass xxxx://xxx_my_proxy_addr_xxx;

  # Now use this solution:
  proxy_ignore_headers yourHeaderName // but set by proxy

  # Or if above didn't work maybe this:
  proxy_hide_header yourHeaderName // but set by proxy

}

আমি নিশ্চিত না যে এটি আপনার প্রয়োজনের মতো হবে তবে এই পদ্ধতির কিছু হেরফের চেষ্টা করুন এবং ফলস্বরূপ আপনার সমস্যার উপযুক্ত হবে।

এছাড়াও আপনি এই সংমিশ্রণটি ব্যবহার করতে পারেন:

proxy_hide_header headerSetByProxy;
set $sent_http_header_set_by_proxy yourValue;

6
আমাকে এই পদ্ধতিটি ব্যবহার করতে হয়েছিল কারণ এনজিনেক্স প্রস্থানকারীটির ওভাররাইটের চেয়ে একটি সদৃশ শিরোনাম যুক্ত করছিল। location / { proxy_pass http://127.0.0.1:8080/; proxy_hide_header "Access-Control-Allow-Origin"; if ($http_origin ~* "^https://(example.com|www.example.com)$") { add_header Access-Control-Allow-Origin "$http_origin"; } }
ইথার 6
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.