এনগিনেক্স: একাধিক পাথের জন্য অবস্থানের রেজেক্স


30

আমার nginx কনফিগারেশনে দুটি কাজ রয়েছে যা কাজ করে:

location ^~ /media/ {
  proxy_pass http://backend.example.com;
}

location ^~ /static/ {
  proxy_pass http://backend.example.com;
}

আমি কীভাবে এই দুটিকে এক জায়গায় একত্রিত করতে পারি?

আমি ইতিমধ্যে যা করেছি:

আমি এই পরামর্শ চেষ্টা করেছিলাম

location ~ ^/(static|media)/ {
  proxy_pass http://backend.example.com;
}

তবে এটি আমার পক্ষে কাজ করে না।

এছাড়াও, যখন আমি ব্যাকেন্ডগুলি ব্যবহার করি না, তখন নিম্নলিখিত কনফিগারটি সঠিকভাবে কাজ করে:

location ~ ^/(static|media)/ {
  root /home/project_root;
}

আপডেট (লগ থেকে কিছু স্ট্রিং)

xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /content/11160/ HTTP/1.1" 200 5310 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68"
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/font-awesome/css/font-awesome.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/css/custom.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/53$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/colorbox.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Sa$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/jquery.colorbox-min.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/js/scripts.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537$

সমাধান

আসলে আমার সমাধানটি ভাল কাজ করে:

location ~ ^/(static|media)/ {
  root /home/project_root;
}

এবং ইস্যুটির ব্যাকএন্ডের সাথে কোনও সম্পর্ক নেই। গুয়েডো ভ্যাক্যাকেরেলা সঠিকভাবে লক্ষ্য করেছেন location ~ ...যে এটি ঠিক মিলেছে অন্যটির পরে , যাতে আমার location ~ ...চালানোর কোনও সুযোগ না হয়।


আমি দেখতে পাচ্ছি না কেন আপনার রেজেক্স প্রক্সি পাস কাজ করে না। আপনি চেষ্টা করলে কি হয়?
গ্রম্পি

আমি যখন এটি চেষ্টা করি তখন সীমান্ত nginx 404 ত্রুটি ছুড়ে দেয়।
ভ্লাদ টি।

অবস্থানের বিবরণীর শেষে) আপনার প্রশ্নের মধ্যে কেবল একটি ত্রুটি বা এটি আপনার কনফিগারেশন ফাইলের মধ্যেও রয়েছে?
গুইডো ভ্যাকেরেলা

ত্রুটিগুলির জন্য আপনার কনফিগারেশনের বাকী দ্বিগুণ চেক করা উচিত। অতিরিক্তভাবে, এটি কোথায় দেখছে, কী অনুপস্থিত ছিল তা দেখে কেন এটি 404 ছুঁড়েছে তা তদন্ত করতে চাইবে। এটিও সম্ভব যে এটির ত্রুটি নথিটি পাওয়া না গিয়ে 404 নিক্ষেপ করায় এটি নিক্ষেপ করা পূর্ববর্তী ত্রুটিটি দেখার দরকার।
অসম্পূর্ণ

দয়া করে ত্রুটি লগ থেকে ত্রুটি সরবরাহ করুন
মোহাম্মদ আবুশাদি

উত্তর:


30

Nginx ডকুমেন্টেশন অনুযায়ী :

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

আপনার কনফিগারেশনে প্রক্সি_পাসের সাথে নীচের অবস্থানটি সংজ্ঞায়িত করা হয়েছে এবং এটি স্থির অধীনে জেএস এবং সিএসএস ফাইলগুলির অনুরোধের সাথে মেলে :

  location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found off;
  }

দুর্ভাগ্যক্রমে "লগ_নোট_ফাউন্ড অফ" ধারাটি এই অবস্থান সম্পর্কিত কোনও ফাইল-পাওয়া যায়নি ত্রুটির জন্য লগিং অক্ষম করে, এজন্যই আপনার ত্রুটি_ব্লগটি খালি!

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


13
location ~ ^/(static|media)/ {
  proxy_pass http://backend.example.com;
)     <-----------

হতে হবে...

location ~ ^/(static|media)/ {
  proxy_pass http://backend.example.com;
}     <-----------

বন্ধটি বন্ধনী বন্ধনী () নয়, একটি ব্রেস {be হওয়া দরকার।

এটি দেখতে কতক্ষণ লেগেছিল তা বিশ্বাস করতে পারছি না। গিডো মন্তব্য থেকে সঠিক ছিল।


ওহ, ভুল বোঝাবুঝির জন্য দুঃখিত, আমি ভেবেছিলাম এটি "মিডিয়া" পরে |media)"অবস্থান" দিয়ে স্ট্রিংয়ের "মিডিয়া" এর পরে বন্ধনী বোঝানো হয়েছিল । তবে এখানে ভুল বন্ধনীটি কেবল একটি টাইপো (প্রশ্নে সংশোধন)। অন্যথায় এই nginx কনফিগারেশন লোড করা হবে না এবং unexpected ")"...আবার দুঃখিত হিসাবে কিছু ত্রুটি নিক্ষেপ করা হবে ।
ভ্লাদ টি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.