আমি nginx এর পিছনে সার্ভার থেকে প্রাপ্ত প্রতিক্রিয়ার জন্য একটি কাস্টম শিরোনাম যুক্ত করতে চাই।
add_header
এনজিনেক্স-প্রক্রিয়াজাত প্রতিক্রিয়াগুলির জন্য কাজ করার সময় , এটি proxy_pass
ব্যবহৃত হয়ে গেলে কিছুই করে না ।
আমি nginx এর পিছনে সার্ভার থেকে প্রাপ্ত প্রতিক্রিয়ার জন্য একটি কাস্টম শিরোনাম যুক্ত করতে চাই।
add_header
এনজিনেক্স-প্রক্রিয়াজাত প্রতিক্রিয়াগুলির জন্য কাজ করার সময় , এটি proxy_pass
ব্যবহৃত হয়ে গেলে কিছুই করে না ।
উত্তর:
এইচটিটিপিএইডারসমোরমডিউল নামে একটি মডিউল রয়েছে যা আপনাকে শিরোলেখগুলিতে আরও নিয়ন্ত্রণ দেয়। এটি এনগিনেক্সের সাথে আসে না এবং অতিরিক্ত ইনস্টলেশন প্রয়োজন। এটির সাহায্যে আপনি এরকম কিছু করতে পারেন:
location ... {
more_set_headers "Server: my_server";
}
এটি "কোনও স্থিতি কোড এবং যে কোনও সামগ্রী ধরণের জন্য কাস্টম মানটিতে সার্ভার আউটপুট শিরোনাম সেট করবে"। এটি ইতিমধ্যে সেট করা শিরোনামগুলি প্রতিস্থাপন করবে বা আনসেট না থাকলে এগুলি যুক্ত করবে।
Secure
এবং HttpOnly
একটি উপর পতাকা প্রতিক্রিয়া কুকি ? লক্ষ্য প্রতিক্রিয়া কুকি শুধুমাত্র কুকি name
এবং expire
বৈশিষ্ট্য আছে।
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
।
add_header X-Upstream $upstream_addr always;
X-Upstream: 10.10.10.10
বনাম X-Upstream: 53c2d28edefdf501ab7c92e02a0c1687
(এমডি 5 সম্ভবত অবকাঠামোটি মাস্ক করার ক্ষেত্রে সহায়ক নয়, তবে এটি ধারণাটি পৌঁছে দেয়)।
add_header
নির্দেশিকা ব্যবহারের উদাহরণ is আপনাকে এগুলি কিছুতেই পাঠাতে হবে না।
অলিভার যেমন লিখেছেন:
add_header
পাশাপাশি হিসাবে পাশাপাশি কাজ করেproxy_pass
।
যাইহোক, শেন যেমন লিখেছেন, এনগিনেক্স ১.7.৫ অনুসারে, ত্রুটির প্রতিক্রিয়ার জন্য কাজ always
করতে আপনাকে অবশ্যই পাস করতে হবে add_header
:
add_header X-Upstream $upstream_addr always;
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
অনুরোধটি আরও প্রেরণের আগে অনুরোধ শিরোনাম নির্ধারণের জন্য, প্রতিক্রিয়া শিরোনামগুলি সেট করার জন্য নয় (শিরোনামগুলির জন্য এই কনফিগারেশন বৈশিষ্ট্যগুলি কিছুটা বিভ্রান্ত হতে পারে)।
আপনি এই সমাধান চেষ্টা করতে পারেন:
আপনার 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;
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"; } }