এনগিনেক্স লোকেশন রেজেক্স প্রক্সি পাস নিয়ে কাজ করে না


43

আমি এই 2 অবস্থান নির্দেশিকা এনগিনেক্সে কাজ করার চেষ্টা করছি তবে এনগিনেক্স বুট করার সময় আমি কিছু ত্রুটি ফিরে পাচ্ছি।

   location ~ ^/smx/(test|production) {
        proxy_pass   http://localhost:8181/cxf;
    }

    location ~ ^/es/(test|production) {
        proxy_pass   http://localhost:9200/;
    }

এই ত্রুটিটি আমি গ্রহণ করছি:

nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block

এটি কারও সাথে পরিচিত বলে মনে হচ্ছে? আমি এখানে কী মিস করছি?

উত্তর:


48

জাভিয়ারের দুর্দান্ত উত্তরের জন্য একটি ছোট সংযোজন :

আপনি যদি এনজিনেক্সের সাথে এতটা ভালভাবে পরিচিত না হন, তবে proxy_passনির্দেশকের শেষে স্ল্যাশ যুক্ত করার মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে ।

নিম্নলিখিতগুলি কাজ করে না :

location ~* ^/dir/ {
  rewrite ^/dir/(.*) /$1 break;
  proxy_pass http://backend/;

তবে এটি একটি করে:

location ~* ^/dir/ {
  rewrite ^/dir/(.*) /$1 break;
  proxy_pass http://backend;

নির্দেশনার /শেষে পার্থক্য proxy_pass


1
এই পিছনে /আমার কনফিগারেশন সমস্যা স্থির করে, এটি ধরা কঠিন, ধন্যবাদ!
ইয়র্ক

আমাকে বাদাম চালাচ্ছিল, এটি নির্দেশ করার জন্য ধন্যবাদ!
সাইরিল

20

এটি আপনাকে বলে যে প্রক্সি পাসের নির্দেশাবলীর ইউআরআই কোনও রেগেক্স স্থানে ব্যবহার করা যাবে না। এর কারণ হ'ল এনজিনেক্স ইউআরআই-র অংশটিকে locationব্লকের রিজেক্সের সাথে মিলে যায় না যা proxy_passনির্দেশকে জেনেরিকভাবে পাস করেছে with

কেবলমাত্র কল্পনা আপনার অবস্থান Regex হয় /foo/(.*)/bar, এবং আপনি উল্লেখ proxy_pass http://server/test, nginx একটি ঊর্ধ্ব স্তরের উপর আরেকটা আপনার অবস্থান Regex ম্যাপ করতে হবে কারণ আপনার সঙ্গে শেষ করতে চাই না /foo/test/bar/somethingকিন্তু /test/something। সুতরাং এটি স্থানীয়ভাবে সম্ভব নয়।

সুতরাং এই অংশের জন্য নিম্নলিখিত ব্যবহার করে কাজ করা উচিত:

server {

   [ ... ]

    location ~ ^/smx/(test|production) {
        rewrite ^/smx/(?:test|production)/(.*)$ /cxf/$1 break;
        proxy_pass http://localhost:8181;
    }

    location ~ ^/es/(test|production) {
        rewrite ^/es/(?:test|production)/(.*)$ /$1 break;
        proxy_pass http://localhost:9200;
    }

}

তবে লোকেশন ব্লক ইউআরআই প্যাটার্নের সাথে মেলে পুনঃনির্দেশগুলি পুনরায় লেখা সম্ভব হবে না কারণ এটি বর্তমান ইউআরআই প্রক্রিয়াজাতকরণের পুনর্লিখন করে, পুনর্লিখনের আগে প্রাথমিক অনুরোধেরLocation ভিত্তিতে শিরোনাম পরিবর্তন করা অসম্ভব করে তোলে ।


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