ডিরেক্টরি উপস্থিত থাকলেও ফলব্যাক রিসোর্স ব্যবহার করুন


11

আমি খুব বেসিক কনফিগারেশন সহ আমার ভার্চুয়াল হোস্টটি অ্যাপাচি ২.৪..7 এ সেট করেছি:

<VirtualHost *:80>
  ServerName foo.example.com
  DocumentRoot /var/www/html

  DirectoryIndex index.php
  FallbackResource /index.php
</VirtualHost>

নথির মূলের নীচে আমার নীচের কাঠামো রয়েছে:

/index.php
/help/readme.txt

আমি অনুরোধ করলে আমি নিম্নলিখিত ফলাফলগুলি পাই:

/bla     -> 200 OK
/help/   -> 404 Not Found
/help/a  -> 200 OK

দেখে মনে হচ্ছে যে /help/ডিরেক্টরিটির অস্তিত্ব অ্যাপাচিকে ফিরিয়ে আনছে 404কারণ সেখানে কোনও index.phpনেই, তবে আমি সমস্ত অনুরোধের অনুরোধ করব /index.phpএবং এইভাবে একটি 200 OKপ্রতিক্রিয়া প্রত্যাশা করব ।

আমি ব্যবহার করার সময় এটি একটি সমস্যা হওয়ার কথা মনে নেই mod_rewriteতবে আমি FallbackResourceযদি সম্ভব হয় তবে তা পছন্দ করি । এই সমাধানের জন্য একটি উপায় আছে কি?

হালনাগাদ

আমি DirectoryIndexনির্দেশটি সরিয়ে দিলে এটি কাজ করে তবে এটি পাঁচ সেকেন্ড বিলম্ব ইস্যুতে ভুগছে ।

আপডেট 3

আমি নিম্নলিখিত পরীক্ষার পরিবেশ চালাচ্ছি; ডিরেক্টরি কাঠামো নিম্নরূপ:

./htdocs
   index.html
   test/
      bla.txt
./conf
   httpd.conf
./logs

বিষয়বস্তু httpd.confহ'ল:

ServerName apache-bug.local
Listen 8085

DirectoryIndex disabled
DirectorySlash Off

<VirtualHost *:8085>
DocumentRoot /home/user/apache-bug/htdocs

FallbackResource /index.html
</VirtualHost>

আমার config.niceরয়েছে:

"./configure" \
"--enable-debugger-mode" \
"--with-apr=/usr/local/apr/bin/apr-1-config" \
"--enable-dir=static" \
"--with-mpm=prefork" \
"--enable-unixd=static" \
"--enable-authn-core=static" \
"--enable-authz-core=static" \
"$@"

সার্ভারটি চালানোর জন্য:

httpd -X -d /home/user/work/apache-bug/

এবং প্রতিক্রিয়া শরীরের জন্য /blaকি?
zerkms

আমি নিশ্চিত না তখন আমি সমস্যাটি বুঝতে পারি: -এস
zerkms

কেবল তা নিশ্চিত করার জন্য - আপনি অ্যাপাচি কোন সংস্করণে আছেন?
জেনি ডি

@ জেনিডি আমি ২.৪..7 এ চলছে।
জ্যাক

উত্তর:


8

আমি নিজেও এর উত্তর দিচ্ছি, কারণ আমি নিশ্চিত যে সমস্যাটি অভ্যন্তরীণভাবে কীভাবে mod_dir.cকাজ করে তার সাথে সম্পর্কিত এবং আমি মনে করি এটি একটি বাগ

যদি স্থানীয় ফাইল সিস্টেমে কোনও উত্স ম্যাপ করা যায় না, তবে পরিবর্তে কোন ডকুমেন্ট লোড করা উচিত তা নির্ধারণের জন্য ফাংশনটি fixup_dflt()চলবে FallbackResource

যাইহোক, যখন একটি সম্পদ পারেন স্থানীয় ফাইল সিস্টেমে ম্যাপ করা এবং এটি একটি ডিরেক্টরির, এটি চলমান করে দস্তাবেজ সমাধান করার প্রচেষ্টা করা হবে fixup_dir(); DirectoryIndexএটি প্রথম উপযুক্ত নথী না পাওয়া পর্যন্ত এই ফাংশনটি মানগুলির তালিকার উপরে পুনরাবৃত্তি করে ।

আমার ক্ষেত্রে, কনফিগারেশনে DirectoryIndexমানগুলির একটি খালি তালিকা রয়েছে , সুতরাং fixup_dir()ব্যর্থ হবে এবং একটি 404 ফিরে আসবে।

নিম্নলিখিত প্যাচটি আমার ( পিআর ) এর জন্য কাজ করে :

static int dir_fixups(request_rec *r)
{
    if (r->finfo.filetype == APR_DIR) {
-        return fixup_dir(r);
+        if (fixup_dir(r) != OK) {
+           /* use fallback */
+           return fixup_dflt(r);
+        }
+
+        return OK;
    }
    else if ((r->finfo.filetype == APR_NOFILE) && (r->handler == NULL)) {
        /* No handler and nothing in the filesystem - use fallback */
        return fixup_dflt(r);
    }
    return DECLINED;
}

এটি মূলত ব্যর্থ fixup_dflt()হওয়ার পরে চেষ্টা করে fixup_dir()

আপডেট 2015-04-21

প্রকল্পের জন্য একটি ফিক্স জমা দেওয়া হয়েছে, 2.5 এর জন্য নির্ধারিত; এটি 2.4 এও পোর্ট করা যেতে পারে।

আপডেট 2015-05-18

ফিক্সটি উল্টানো হয়েছে কারণ:

[...] এটি [কমপক্ষে] লাথি মারার FallBackResourceআগেই mod_autoindexলাথি মারায় causes

আমি এখনও এই ধরণের পরিস্থিতি এড়াতে কীভাবে তা বোঝার চেষ্টা করছি।


আমি বলব ত্রুটিটি fixup_dir()ফলব্যাক রিসোর্সটিকে উপেক্ষা করার ক্ষেত্রে রয়েছে।
রিকি বিম

@ রিকিবিয়াম হ্যাঁ, তবে প্রযুক্তিগতভাবে fixup_dir()সম্পর্কে জানা উচিত নয় fixup_dflt(), সুতরাং এটিকে "উচ্চতর আপ" ঠিক করা ভাল :) :)
জ্যাক ২

7

আপনার কনফিগারেশনটি সঠিক হওয়া উচিত।

সমস্যাটি, আশ্চর্যজনকভাবে যথেষ্ট, মোড_পরিচালিত বলে মনে হচ্ছে ।

আপনার কনফিগারেশনটি এখানে সফলভাবে পুনরুত্পাদন করার পরে ( 404 পাচ্ছে না ), আমি 5 দ্বিতীয় বিলম্বও পেয়েছি। তবে, আমি লক্ষ করেছি যে সংযুক্ত আরব আমিরাত যখন gzipতার স্বীকৃতি- শিরোনামগুলি থেকে বাদ দেয় তখন পৃষ্ঠাটি তাত্ক্ষণিকভাবে প্রদর্শিত / প্রাপ্ত হয়। আপনি নিজের সাথে এটি পরীক্ষা করতে পারেন wget

মজার বিষয় হল, আরও ডিবাগিংয়ের সাথে straceদেখা যাচ্ছে যে অ্যাপাচি উভয় ক্ষেত্রে FallbackResourceদেরীতে লক্ষণীয় পার্থক্য ছাড়াই আপনার ক্লায়েন্টের সকেটে আপনার সামগ্রীগুলি প্রেরণ করে । এই তারের, যেখানে একটি উত্তর paket কোনো উল্লেখযোগ্য দেরী না করে HTTP- র অনুরোধ পর ক্লায়েন্ট সার্ভার থেকে পাঠানো হয় এছাড়াও স্পষ্ট 1

দেখে মনে হচ্ছে যে এই ক্ষেত্রে mod_deflate ব্যবহার করার সময়, সংযুক্ত আরব আমিরা জানে না কখন সার্ভারের মাধ্যমে প্রেরিত ডেটা শেষ হয় এবং এভাবে টিসিপি সংযোগের সময় 2 বের হওয়ার আগে কোনও কিছুই রেন্ডার করে না এবং সার্ভার দ্বারা জোর করে বন্ধ করে দেওয়া হয়। এটি HTTP / 1.0 এর সাথে সঙ্গতিপূর্ণ, যেখানে একটি বদ্ধ সংযোগটি সামগ্রীর শেষ অংশকে বোঝায়।

জন্য HTTP- র / 1.1 , সার্ভার অন্যান্য রয়েছে শেষ-অফ-বিষয়বস্তু সংকেত উপলব্ধ উপায় - যা এখানে ঘটতে বলে মনে হচ্ছে কিন্তু কোনোটাই

Mod_dir বা Mod_deflate এ বাগটি লুকিয়ে থাকলেও এখনই আমার উপলব্ধ সময়ের বাইরে। জিজিপ সংক্ষেপণ অক্ষম করে আমি নির্দোষ কাজ করতে পেরেছি; সমস্যাটি ভাল হওয়ার জন্য স্থির না হওয়া পর্যন্ত কার্যনির্বাহী হিসাবে আপনি বেছে বেছে জিজিপ অক্ষম করতে পারেন।

1 ) এটি আমাদের বলে যে সমস্যাটি সার্ভারে আনফ্লেশড বাফার থেকে শুরু করে না।
2 ) ডিফল্টরূপে, টাইমআউটটি অ্যাপাচি সহ 5 সেকেন্ড হয় - এটি আপনার 5 সেকেন্ডের।


ধন্যবাদ। 5s এর বিলম্ব ইস্যুটি আমার মূল সমস্যার গৌণ, আমি কীভাবে স্থানীয়ভাবে এই সমস্যাটি পুনরায় উত্পাদন করব তা নিয়ে আমার প্রশ্ন আপডেট করেছি।
জ্যাক 6
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.