ক্লাউডফ্রন্টে স্থিতিভাবে হোস্ট করা ওয়েবসাইটের জন্য আপনি উপ-ডিরেক্টরিগুলির জন্য ডিফল্ট রুট অবজেক্টটি কীভাবে সেট করবেন?


103

ক্লাউডফ্রন্টের স্থিতিভাবে হোস্ট করা ওয়েবসাইটে সাব-ডিরেক্টরিগুলির জন্য আপনি কীভাবে একটি ডিফল্ট রুট অবজেক্ট সেট করবেন? বিশেষত, www.example.com/subdir/index.htmlযখনই ব্যবহারকারী জিজ্ঞাসা করবেন আমি পরিবেশন করতে চাই www.example.com/subdir। দ্রষ্টব্য, এটি একটি এস 3 বালতিতে রাখা একটি স্থির ওয়েবসাইট সরবরাহ করার জন্য ing এছাড়াও, আমি কেবল ক্লাউডফ্রন্টে এস 3 বাল্টিতে অ্যাক্সেস সীমাবদ্ধ করতে একটি অরিজিন অ্যাক্সেস পরিচয় ব্যবহার করতে চাই।

এখন, আমি জানি যে ক্লাউডফ্রন্ট এস 3 এর চেয়ে আলাদাভাবে কাজ করে এবং বিশেষত অ্যামাজন বলে :

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

যেমন, যদিও ক্লাউডফ্রন্ট আমাদের একটি ডিফল্ট রুট অবজেক্ট নির্দিষ্ট করার অনুমতি দেয়, এটি কেবল তার জন্য কাজ করে www.example.comএবং এর জন্য নয় www.example.com/subdir। এই সমস্যাটি থেকে মুক্তি পেতে, আমরা এস 3 এর দ্বারা প্রদত্ত ওয়েবসাইটের শেষ বিন্দুতে নির্দেশ করতে মূল ডোমেন নামটি পরিবর্তন করতে পারি। এটি দুর্দান্ত কাজ করে এবং মূল বিষয়গুলি সমানভাবে নির্দিষ্ট করার অনুমতি দেয়। দুর্ভাগ্যক্রমে, এটি অরিজিন অ্যাক্সেস পরিচয়ের সাথে তুলনীয় হতে পারে বলে মনে হয় না । বিশেষত, উপরের লিঙ্কগুলিতে বলা হয়েছে:

সম্পাদনা মোডে পরিবর্তন করুন:

ওয়েব বিতরণ - মূল ট্যাবটি ক্লিক করুন, আপনি যে উত্সটি সম্পাদনা করতে চান তাতে ক্লিক করুন এবং সম্পাদনা ক্লিক করুন। আপনি কেবলমাত্র উত্সগুলির জন্য একটি অরিজিন অ্যাক্সেস পরিচয় তৈরি করতে পারেন যার জন্য অরিজিন টাইপ এস 3 উত্স।

মূলত, সঠিক ডিফল্ট রুট অবজেক্টটি সেট করার জন্য, আমরা এস 3 ওয়েবসাইটের শেষ পয়েন্টটি ব্যবহার করি, ওয়েবসাইট নিজেই নয় uc এটি মূল অ্যাক্সেস পরিচয় ব্যবহারের সাথে সামঞ্জস্যপূর্ণ নয়। এমনিতেই, আমার প্রশ্নগুলি উভয়ই ফোটে

  1. ক্লাউডফ্রন্টে কোনও স্ট্যাটিক্যালি হোস্ট করা ওয়েবসাইটের জন্য সমস্ত উপ-ডিরেক্টরিগুলির জন্য কোনও ডিফল্ট রুট অবজেক্ট নির্দিষ্ট করা সম্ভব?

  2. ক্লাউডফ্রন্ট থেকে পরিবেশিত সামগ্রীর জন্য কোনও উত্স অ্যাক্সেস পরিচয় সেটআপ করা সম্ভব যেখানে মূলটি একটি এস 3 ওয়েবসাইটের শেষ পয়েন্ট এবং কোনও এস 3 বালতি নয়?


4
আমি মনে করি এটি এখন ল্যাম্বদা @ প্রান্তের সাথে করণীয়, এমন একটি ফাংশন ব্যবহার করে যা / to /index.html এ শেষ হওয়া সমস্ত ইউআরএল পুনঃনির্দেশ করে আমি এটি আমার ওয়েবসাইটে চেষ্টা করে দেখব এবং ফলাফলগুলি আবার রিপোর্ট করব এবং উত্তর হিসাবে বিশদ কনফিগারেশন পোস্ট করব।
ক্রিশ্চিয়ান মাগেরুয়ান-স্টানসিউ

উত্তর:


2

আপডেট: দেখে মনে হচ্ছে আমি ভুল ছিলাম! জেবাকজুকের উত্তরটি দেখুন, যা এই থ্রেডে স্বীকৃত উত্তর হওয়া উচিত।

দুর্ভাগ্যক্রমে, আপনার উভয় প্রশ্নের উত্তর নেই।

১. ক্লাউডফ্রন্টে কোনও স্ট্যাটিক্যালি হোস্ট করা ওয়েবসাইটের জন্য সমস্ত উপ-ডিরেক্টরিতে কোনও ডিফল্ট রুট অবজেক্ট নির্দিষ্ট করা সম্ভব?

না। যেমন এডাব্লুএস ক্লাউডফ্রন্ট ডক্সে বলা হয়েছে ...

... আপনি যদি কোনও ডিফল্ট রুট অবজেক্টটি সংজ্ঞায়িত করেন তবে আপনার বিতরণের একটি উপ-ডিরেক্টরির জন্য একটি শেষ-ব্যবহারকারীর অনুরোধ ডিফল্ট রুট অবজেক্টটি ফিরিয়ে দেয় না। উদাহরণস্বরূপ, ধরুন index.htmlআপনার ডিফল্ট রুট অবজেক্ট এবং ক্লাউডফ্রন্টটি আপনার ক্লাউডফ্রন্ট বিতরণের অধীনে ইনস্টল ডিরেক্টরিটির জন্য একটি শেষ-ব্যবহারকারীর অনুরোধ পেয়েছে:

http://d111111abcdef8.cloudfront.net/install/

index.htmlইনস্টল ডিরেক্টরিটিতে একটি অনুলিপি উপস্থিত থাকলেও ক্লাউডফ্রন্ট ডিফল্ট রুট অবজেক্টটি ফিরিয়ে দেবে না ।

...

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

২. ক্লাউডফ্রন্ট থেকে পরিবেশিত সামগ্রীর জন্য অরিজিন অ্যাক্সেস পরিচয় সেটআপ করা সম্ভব যেখানে মূলটি একটি এস 3 ওয়েবসাইটের শেষ পয়েন্ট এবং কোনও এস 3 বালতি নয়?

সরাসরি নয় ক্লাউডফ্রন্টের সাথে উত্সের জন্য আপনার বিকল্পগুলি হ'ল এস 3 বালতি বা আপনার নিজের সার্ভার।

যদিও এটি দ্বিতীয় বিকল্প যা কিছু আকর্ষণীয় সম্ভাবনাগুলি খুলতে পারে। এটি সম্ভবত আপনি যা করার চেষ্টা করছেন তার উদ্দেশ্য হারাবে তবে আপনি নিজের সার্ভার সেটআপ করতে পারেন যার একমাত্র কাজ ক্লাউডফ্রন্টের উত্সের সার্ভার হওয়া be

যখন কোনও অনুরোধ http://d111111abcdef8.cloudfront.net/install/ এর জন্য আসে , ক্লাউডফ্রন্ট অনুরোধটি আপনার মূল সার্ভারে প্রেরণ করবে, জিজ্ঞাসা করে /install। আপনি চাইলে আপনার মূল সার্ভারটি কনফিগার করতে পারেন, index.htmlএই ক্ষেত্রে পরিবেশন করা সহ ।

অথবা আপনি একটি ছোট ওয়েব অ্যাপ্লিকেশন লিখতে পারেন যা কেবল এই কলটি গ্রহণ করে এবং যেভাবেই এস 3 থেকে সরাসরি পেয়ে যায়।

তবে আমি বুঝতে পারি যে আপনার নিজের সার্ভারটি সেট আপ করা এবং এটি স্কেলিংয়ের বিষয়ে চিন্তা করা আপনি প্রথমে যা করার চেষ্টা করছেন তার উদ্দেশ্যকে পরাজিত করতে পারে।


আমার এক সমস্যাটি হ'ল এটি কাজ করার অর্থ আপনার কাছে দুটি (২) ইউআরএল এস 3 এ আপনার ওয়েব সাইটে অ্যাক্সেস করতে সক্ষম হবে। আপনার মেঘ সামনের URL এবং আপনার s3 url (bucket_name.s3-website-us-east-1.amazonaws.com)
হেডেন

226

সেখানে IS এই কাজ করতে একটি উপায়। আপনার বালতিটি ড্রপডাউন (www.example.com.s3.amazonaws.com) এ নির্বাচন করে এটির পরিবর্তে এটি আপনার বালতির স্থির ডোমেইনে নির্দেশ করুন (যেমন www.example.com.s3- ওয়েবসাইট-আমাদের -পশ্চিম -২.২০১৮ মজমোনওস.কম):

এখানে চিত্র বর্ণনা লিখুন

এই এডাব্লুএস ফোরামের থ্রেডকে ধন্যবাদ


6
যে কেউ জানেন যে কোনও ওয়েব অরিজিন বনাম এস 3 উত্স থাকা অবস্থায় এটি আলাদাভাবে চার্জ করে?
ফিদেলোপার

4
আমি HTTPSকেবল আমার সম্পূর্ণ ওয়েবসাইট এবং ফাইল পরিবেশন করতে চাইলে কি এই কাজটি ভাল হয় ?
মনজিৎ কুমার

4
এর অর্থ কি এই যে এস 3 কে একটি ওয়েব সার্ভার হিসাবে সক্ষম করতে হবে?
অ্যান্টনি কং

6
ওপি স্পষ্টতই বলেছে যে এই পদ্ধতির পক্ষে তার পক্ষে কাজ করা সম্ভব নয়: "এই সমস্যাটি সমাধানের জন্য, আমরা এস 3 দ্বারা প্রদত্ত ওয়েবসাইটের শেষ বিন্দুটির দিকে নির্দেশ করতে আমরা মূল ডোমেনের নামটি পরিবর্তন করতে পারি This এটি দুর্দান্ত কাজ করে এবং মূল বিষয়গুলি অভিন্নভাবে নির্দিষ্ট করার অনুমতি দেয় Unfortunately দুর্ভাগ্যক্রমে Unfortunately , এটি অরিজিন অ্যাক্সেস সনাক্তকরণের সাথে তুলনীয় হতে পারে বলে মনে হয় না "। এডব্লিউএস নিজেরাই এ জন্য ল্যামদা
আইসিসটসোল্ড

4
এটি মেঘের সামনের সামঞ্জস্য নয় - মূল অ্যাক্সেস আইডেন্টিটি। আপনি এইভাবে আপনার এস 3 বাল্টিতে অ্যাক্সেস সীমাবদ্ধ করতে পারবেন না।
রকেটস্পেসার

15

এস 3 হোস্টিং সক্রিয় করার অর্থ আপনাকে বালতিটি বিশ্বের কাছে খুলতে হবে। আমার ক্ষেত্রে, আমার বালতিটি ব্যক্তিগত রাখা এবং কেবল ক্লাউডফ্রন্টের অ্যাক্সেসকে সীমাবদ্ধ রাখতে মূল অ্যাক্সেস সনাক্তকরণ কার্যকারিতা ব্যবহার করা দরকার। @ জুইসির পরামর্শ অনুসারে, একটি ল্যাম্বদা ফাংশন পুনঃনির্দেশগুলি ঠিক করতে পারে:

'use strict';

/**
 * Redirects URLs to default document. Examples:
 *
 * /blog            -> /blog/index.html
 * /blog/july/      -> /blog/july/index.html
 * /blog/header.png -> /blog/header.png
 *
 */

let defaultDocument = 'index.html';

exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request;

    if(request.uri != "/") {
        let paths = request.uri.split('/');
        let lastPath = paths[paths.length - 1];
        let isFile = lastPath.split('.').length > 1;

        if(!isFile) {
            if(lastPath != "") {
                request.uri += "/";
            }

            request.uri += defaultDocument;
        }

        console.log(request.uri);
    }

    callback(null, request);
};

আপনি আপনার ফাংশন প্রকাশের পরে, AWS কনসোলে আপনার ক্লাউডফ্রন্ট বিতরণে যান। যান Behaviors, তারপর চয়ন Origin Requestঅধীনে Lambda Function Associations, এবং পরিশেষে আপনার নতুন ফাংশন ARN পেস্ট করুন।


4
আছে: ল্যামডা ফাংশন যা এক অনুরূপ স্থাপন করার জন্য একটি প্রস্তুত serverlessrepo.aws.amazon.com/applications/...
marcanuy

এখানে সমস্যাটি হ'ল এই ফাংশনটি আমাদের পূর্ব -১ এ মোতায়েন করা দরকার, সুতরাং আপনার যদি কঠোর জিডিপিআর নিয়ন্ত্রণের অধীনে এমন কোনও সংস্থা থাকে যা জার্মানির বাইরে কোনও কিছু ছাড়াই অনুমতি দেয় না তবে এটি আপনার পক্ষে নয়।
রেনাতো গামা

5

একটি সাব-ডিরেক্টরিতে যেমন একটি ডিফল্ট ফাইল পরিবেশন করার অন্য একটি উপায় রয়েছে example.com/subdir/। আপনি আসলে (প্রোগ্রামক্রমে) subdir/বালতিতে কী দিয়ে একটি ফাইল সঞ্চয় করতে পারেন । এই ফাইলটি S3 পরিচালনা কনসোলে প্রদর্শিত হবে না , তবে এটি আসলে বিদ্যমান এবং ক্লাউডফ্রন্ট এটি পরিবেশন করবে।


এস 3 কনভেস্ট সাবডির / টু সাবডির; আপনি যখন এইচটিএমএল আপলোড করার চেষ্টা করবেন। এছাড়াও, উদাহরণস্বরূপ আপনি যখন //.com/ubdir/ অ্যাক্সেস করার চেষ্টা করেন তখন এটি ব্যর্থ হয় এবং যদি আপনি উদাহরণসুডডির অ্যাক্সেস করার চেষ্টা করেন; এটি HTML ফাইলটি রেন্ডার করার পরিবর্তে ডাউনলোড করে file
জ্যাকবফগগ

4

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


এই পদ্ধতির সাথে সম্পর্কিত আরও বিশদ এখানে: aws.amazon.com/blogs/compute/…
হেনরিক অ্যাস্টেড সেরেনসেন

দুর্ভাগ্যক্রমে লাম্বদা @ এজ কেবলমাত্র আমাদের পূর্ব -1 অঞ্চলে কাজ করে, উত্স: github.com/awslabs/serverless-application-model/issues/635
মুরানোয়া

4

এডাব্লুএস ব্লগে একটি "অফিসিয়াল" গাইড প্রকাশিত আছে যা আপনার ক্লাউডফ্রন্ট বিতরণ দ্বারা চালিত একটি ল্যাম্বদা @ এজ ফাংশনটি সেট করার পরামর্শ দেয়:

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

সমাধান

এই উদাহরণে, আপনি ক্লাউডফ্রন্ট প্রান্তে গণনা শক্তিটি ক্লায়েন্টের কাছ থেকে আসার অনুরোধটি পরীক্ষা করার জন্য ব্যবহার করেন। তারপরে অনুরোধটি পুনরায় লিখুন যাতে ক্লাউডফ্রন্ট কোনও অনুরোধ ইউআরআই-এর জন্য '/' এ শেষ হওয়ার জন্য একটি ডিফল্ট সূচক বস্তুর (এই ক্ষেত্রে index.html) অনুরোধ করে।

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

'use strict';
exports.handler = (event, context, callback) => {

    // Extract the request from the CloudFront event that is sent to Lambda@Edge
    var request = event.Records[0].cf.request;

    // Extract the URI from the request
    var olduri = request.uri;

    // Match any '/' that occurs at the end of a URI. Replace it with a default index
    var newuri = olduri.replace(/\/$/, '\/index.html');

    // Log the URI as received by CloudFront and the new URI to be used to fetch from origin
    console.log("Old URI: " + olduri);
    console.log("New URI: " + newuri);

    // Replace the received URI with the URI that includes the index page
    request.uri = newuri;

    // Return to CloudFront
    return callback(null, request);

};

এস -3 বালতি, ক্লাউডফ্রন্ট বিতরণ এবং ল্যাম্বদা @ এজ ফাংশন তৈরি সহ এটি সেট আপ করার জন্য প্রয়োজনীয় সমস্ত পদক্ষেপগুলি দেখতে উপরের লিঙ্কযুক্ত গাইডটি অনুসরণ করুন ।


2

ল্যাম্বডা @ প্রান্তটি ব্যবহারের আরেকটি বিকল্প হ'ল ক্লাউডফ্রন্টের ত্রুটি পৃষ্ঠাগুলি ব্যবহার করা। 403 টি নির্দিষ্ট ফাইলটিতে পাঠাতে একটি কাস্টম ত্রুটি প্রতিক্রিয়া সেট আপ করুন। তারপরে সেই ফাইলগুলিতে জাভাস্ক্রিপ্ট যুক্ত করুন যাতে সূচক html যুক্ত করতে হবে / / এ শেষ হওয়া ইউআরএলগুলিতে। কোডের উদাহরণ:

if ((window.location.href.endsWith("/") && !window.location.href.endsWith(".com/"))) {
    window.location.href = window.location.href + "index.html";
}
else {
    document.write("<Your 403 error message here>");
}

1

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমি কেবল এটির মাধ্যমে লড়াই করেছি। শেষ পর্যন্ত আমার লক্ষ্যটি একটি ডিরেক্টরিতে একটি ডিফল্ট ফাইল সেট করা কম ছিল, এবং আরও বেশি ফাইলের শেষ ফলাফলটি ছিল যা তার .htmlশেষে ছাড়া পরিবেশিত হয়েছিল

আমি .htmlফাইলের নাম থেকে অপসারণটি শেষ করেছি এবং মাইগ টাইপটিকে প্রোগ্রামারিকভাবে / ম্যানুয়ালি সেট করেছি text/html। এটি traditionalতিহ্যবাহী উপায় নয়, তবে এটি কাজ করে বলে মনে হচ্ছে এবং ক্লাউডফর্মেশনের সুবিধাগুলি উত্সর্গ না করে চমত্কার ইউআরএলগুলির জন্য আমার প্রয়োজনীয়তাগুলি পূরণ করে। মাইম টাইপ সেট করা বিরক্তিকর, তবে আমার মতে সুবিধাগুলির জন্য মূল্য দিতে একটি ছোট দাম

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