ম্যাজেন্টো 2: সাব-ফোল্ডার সহ একাধিক ওয়েবসাইট ব্যবহার করার জন্য এনগিনেক্স কীভাবে কনফিগার করবেন


9

আমরা ম্যাজেন্টো ২ তে একাধিক ওয়েবসাইট তৈরি করতে চাই the অফিসিয়াল ম্যাজেন্টো 2 ডকুমেন্টেশনে এই বিষয়টি সম্পর্কে একটি নিবন্ধ আছে , তবে তারা যেভাবে বর্ণনা করে তা আমাদের ক্ষেত্রে উপযুক্ত নয়।

তারা বিভিন্ন ওয়েবসাইট যেমন নির্ধারণের জন্য সাব-ডোমেন ব্যবহার করার পরামর্শ দিচ্ছে

  • ওয়েবসাইট 1
  • WEBSITE2 .magento-site.com

আমরা সাব-ডোমেনের পরিবর্তে সাব-ফোল্ডার ব্যবহার করতে চাই । একটি উদাহরণ দিতে,

  • magento-site.com/ ওয়েবসাইট1
  • magento-site.com/ WEBSITE2

আমরা কীভাবে এনগিনেক্স ওয়েব সার্ভারে এই সমস্যাটি কাটিয়ে উঠতে পারি?

আমার কনফিগারেশন

আমি উবুন্টু 16.04 ব্যবহার করছি। আমি এনগিনেক্স ইনস্টল করেছি এবং কোনও এনগিনেক্স কোর কনফিগারেশন পরিবর্তন করি নি। আমি magento-site.com.confভিতরে একটি ফাইল তৈরি করেছি /etc/nginx/sites-enabled/magento-site.com.conf

/etc/nginx/sites-enabled/magento-site.com.conf

server {
    listen 8080;
    server_name magento-site.com;

    set $MAGE_RUN_CODE website1;
    set $MAGE_ROOT /var/www/magento-site.com;
    include /var/www/magento-site.com/nginx.conf;
}

সম্পাদনা 1: (2017-10-23)

প্রতিটি ওয়েবসাইটের জন্য আমার একাধিক স্টোর রয়েছে।


আপনার কেবলমাত্র আপনার নতুন পথের জন্য পুনর্লিখনগুলি যুক্ত করতে হবে
MagenX

ইতোমধ্যে nginx.conf- এ আবার অনেকগুলি পুনর্লিখন এবং ট্রাই_ফাইল ব্লক রয়েছে । আপনি যদি টাটকা Magento 2 ইনস্টলেশনটির দিকে তাকান তবে আপনি অনেকগুলি কনফিগারেশন সহ একটি nginx.conf দেখতে পাবেন।
বুনিয়ামিন ইনান

@ ম্যাজেনএক্স আপনি আরও ব্যাখ্যা করতে পারেন দয়া করে? নতুন করে লিখতে হবে কোথায়?
বুনইয়ামান ইন

উত্তর:


13

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

এই দৃশ্যটি এখানে। আমাদের দুটি পৃথক ওয়েবসাইট রয়েছে এবং প্রতিটি ওয়েবসাইটে দুটি আলাদা স্টোর ভিউ রয়েছে:

ওয়েবসাইট ঘ

  • ওয়েবসাইট 1 (ই-বাণিজ্য)
  • ওয়েবসাইট 1 (ভেন্ডা অ্যাসিস্টিদা)

ওয়েবসাইট 2

  • ওয়েবসাইট 2 (ই-বাণিজ্য)
  • ওয়েবসাইট 2 (ভেন্ডা অ্যাসিস্টিদা)

আমার সমাধানে, আমরা Magento অ্যাডমিনে কিছু কনফিগারেশন পরিবর্তন করতে যাচ্ছি । তারপরে আমরা কয়েকটি সাব-ফোল্ডার তৈরি করতে যাচ্ছি এবং শেষ পর্যন্ত আমরা সংশোধনnginx.conf করতে যাচ্ছি ।

প্রথমত, আমাদের ম্যাজেন্টো অ্যাডমিনে কিছু কনফিগারেশন পরিবর্তন করতে হবে । যান Stores> - Configuration-> General-> Web। প্রতিটি স্টোর দেখার জন্য আমাদের বেস ইউআরএলগুলি পরিবর্তন করতে হবে ।

ডিফল্ট কনফিগারেশনের জন্য

ডিফল্ট কনফিগারেশনের জন্য দয়া করে নিম্নলিখিত কনফিগারেশন সরবরাহ করুন। এখানে চিত্র বর্ণনা লিখুন

ওয়েবসাইট 1 (ই-বাণিজ্য) এবং ওয়েবসাইট 1 (ভেন্ডা অ্যাসিস্টিদা) এর জন্য

সমস্ত ওয়েবসাইট 1 স্টোর দর্শনের জন্য দয়া করে নীচের কনফিগারেশন সরবরাহ করুন। এখানে চিত্র বর্ণনা লিখুন

ওয়েবসাইট 2 (ই-বাণিজ্য) এবং ওয়েবসাইট 2 (ভেন্ডা অ্যাসিস্টিদা) এর জন্য

সমস্ত ওয়েবসাইট 2 স্টোর দর্শনের জন্য দয়া করে নীচের কনফিগারেশন সরবরাহ করুন। এখানে চিত্র বর্ণনা লিখুন

দ্বিতীয়ত, আমরা তৈরি করতে হবে website1এবং website2ফোল্ডার /pubডিরেক্টরি। ফাইনালে, আপনার নিম্নলিখিত ফোল্ডারগুলি থাকা উচিত:

  • MAGENTO_ROOT/pub/website1
  • MAGENTO_ROOT/pub/website2

pub/index.phpএই ডিরেক্টরিগুলিতে ফাইলটি অনুলিপি করুন । তারপরে আমরা MAGENTO_ROOT/pub/website1/index.phpএবং এর মধ্যে কিছু পরিবর্তন করব MAGENTO_ROOT/pub/website2/index.php

কন্টেন্ট MAGENTO_ROOT/pub/website1/index.php

আমি কেবল 3 টি লাইন পরিবর্তন করেছি:

প্রথম লাইন: require __DIR__ . '/../../app/bootstrap.php';

২ য় লাইন: $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website1';

তৃতীয় লাইন: $params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';

<?php
/**
 * Public alias for the application entry point
 *
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

use Magento\Framework\App\Bootstrap;
use Magento\Framework\App\Filesystem\DirectoryList;

try {
    require __DIR__ . '/../../app/bootstrap.php';
} catch (\Exception $e) {
    echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
    <div style="margin:0 0 25px 0; border-bottom:1px solid #ccc;">
        <h3 style="margin:0;font-size:1.7em;font-weight:normal;text-transform:none;text-align:left;color:#2f2f2f;">
        Autoload error</h3>
    </div>
    <p>{$e->getMessage()}</p>
</div>
HTML;
    exit(1);
}

$params = $_SERVER;
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website1';
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
$params[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [
    DirectoryList::PUB => [DirectoryList::URL_PATH => ''],
    DirectoryList::MEDIA => [DirectoryList::URL_PATH => 'media'],
    DirectoryList::STATIC_VIEW => [DirectoryList::URL_PATH => 'static'],
    DirectoryList::UPLOAD => [DirectoryList::URL_PATH => 'media/upload'],
];

$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication(\Magento\Framework\App\Http::class);
$bootstrap->run($app);

চূড়ান্ত স্পর্শের জন্য আমাদের nginx.confআপনার MAGENTO_ROOT ডিরেক্টরিতে পরিবর্তন করতে হবে to নিম্নলিখিত কনফিগারেশন আপনার মধ্যে রাখুন nginx.conf

location /website1 {
    root /website1;
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /website1/index.php last;
        break;
    }
}

location /website2 {
    root /website2;
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /website2/index.php last;
        break;
    }
}

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


1
এই কনফিগারেশনের সাথে আমি কেবল যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল স্থির বিষয়বস্তু কাজ করছে না
আমান আলম

@ আমানালাম বর্ণনা অনুসারে স্থির সামগ্রীর জন্য বেস url পরিবর্তন করেছেন? আমরা এই কনফিগারেশনটি ম্যাজেন্টো ২.১ এ 2 টি পৃথক ক্লায়েন্টের সাথে পরীক্ষা করেছি।
বুনিয়ামিন ইনান

হ্যাঁ বর্ণিত বেস ইউআরএল পরিবর্তিত হয়েছে এবং এটির কাজ এখন আপনাকে ধন্যবাদ
আমান আলম

1
@ বুনয়ামিন আমি একই পদ্ধতি অনুসরণ করেছি। হোম পৃষ্ঠা কাজ করছে তবে বিভাগ এবং পণ্য পৃষ্ঠা 404 ত্রুটি দিচ্ছে। যেকোনো পরামর্শ? আপনি কি আমাকে সাহায্য করতে পারেন?
জয়মিন

1
@ জাইমিন, nginx.conf.sample এর উপরের কোডটি ব্যবহার করুন। এটি আপনার সমস্যার সমাধান করবে।
umair ayub

2

Nginx কনফিগারেশন দ্বারা আপনি এই উদাহরণ কনফিগারেশন ব্যবহার করতে পারেন:

server {
    listen 80;
    ## SSL directives might go here
    server_name local.magento2.com;
    root /PATH/TO/YOUR/MAGENTO/pub;

    location / {
        index index.html index.php; ## Allow a static html file to be shown first
        try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
        expires 30d; ## Assume all files are cachable
    }

    location /your/subfolder {
        root /your/subfolder;
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /your/subfolder/index.php last;
            break;
        }
        #limit_conn iplimit 50;
    }

    location @handler { ## Magento uses a common front handler
        rewrite / /index.php;
    }

    location /static/ {
        # Uncomment the following line in production mode
        # expires max;

        # Remove signature of the static files that is used to overcome the browser cache
        location ~ ^/static/version {
            rewrite ^/static/(version\d*/)?(.*)$ /static/$2 last;
        }

        location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
            add_header Cache-Control "public";
            add_header X-Frame-Options "SAMEORIGIN";
            expires +1y;

            if (!-f $request_filename) {
                rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
            }
        }
        location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
            add_header Cache-Control "no-store";
            add_header X-Frame-Options "SAMEORIGIN";
            expires    off;

            if (!-f $request_filename) {
               rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
            }
        }
        if (!-f $request_filename) {
            rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
        }
        add_header X-Frame-Options "SAMEORIGIN";
    }

    location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
        rewrite ^(.*.php)/ $1 last;
    }

    location ~ .php$ { ## Execute PHP scripts
        if (!-e $request_filename) {
            rewrite / /index.php last;
        }
        expires        off;
        #fastcgi_pass   unix:/run/php/php5.6-fpm.sock;
        fastcgi_pass   unix:/run/php/php7.0-fpm.sock;
        fastcgi_read_timeout 10m;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        #fastcgi_param  MAGE_RUN_CODE $mage_run_code;
        #fastcgi_param  MAGE_RUN_TYPE store;
        #fastcgi_param  MAGE_MODE developer; # default or production or developer
        include        /etc/nginx/fastcgi_params;
    }
}

এবং এই সূচক.এফপি উদাহরণ হিসাবে ব্যবহার করুন:

/PATH/TO/YOUR/MAGENTO/pub/your/subfolder/index.php
<?php
use Magento\Framework\App\Bootstrap;
use Magento\Framework\App\Filesystem\DirectoryList;
try {
    require __DIR__ . '/../../../app/bootstrap.php';
} catch (\Exception $e) {
    echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
    <div style="margin:0 0 25px 0; border-bottom:1px solid #ccc;">
        <h3 style="margin:0;font-size:1.7em;font-weight:normal;text-transform:none;text-align:left;color:#2f2f2f;">
        Autoload error</h3>
    </div>
    <p>{$e->getMessage()}</p>
</div>
HTML;
    exit(1);
}

$params = $_SERVER;
$params[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [
    DirectoryList::PUB => [DirectoryList::URL_PATH => ''],
    DirectoryList::MEDIA => [DirectoryList::URL_PATH => 'media'],
    DirectoryList::STATIC_VIEW => [DirectoryList::URL_PATH => 'static'],
    DirectoryList::UPLOAD => [DirectoryList::URL_PATH => 'media/upload'],
];
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website_code';
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
$app = $bootstrap->createApplication('Magento\Framework\App\Http');
$bootstrap->run($app);

স্পষ্ট করার জন্য:

আমার vhost nginx কনফিগারেশনে আপনি এটি পাবেন:

    location /your/subfolder {
        root /your/subfolder;
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /your/subfolder/index.php last;
            break;
        }
        #limit_conn iplimit 50;
    }

যেখানে ওয়েবসাইট ইউআরএল হিসাবে আপনি যা চান তার জন্য প্রথম "/ আপনার / সাবফোল্ডার" পরিবর্তন করা যেতে পারে। প্রাক্তন www.mywebsite.com/stack/magento -> / স্ট্যাক / ম্যাজেন্টো

তারপরে যে ওয়েবসাইট কোডটি এই url এ লোড করা হবে তা সংজ্ঞায়িত করতে আপনাকে এখানে ওয়েবসাইট কোড লেখার সূচক তৈরি করতে হবে। php:

$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website_code';

আমি আশা করি এটি এখন যথেষ্ট পরিষ্কার, আমি এটি করতে কাজ করতে একটি প্রকল্পে সময় ব্যয় করেছি যাতে আমি জানি যে এটি কাজ করে এবং এটি এম 1 তে আমরা কীভাবে ব্যবহার করতাম তার কাছাকাছি।


এটি কীভাবে আমার সমস্যার সমাধান করবে তা আমি বুঝতে পারি না। আমি বিশেষভাবে জিজ্ঞাসা করেছি কীভাবে একাধিক ওয়েবসাইট ব্যবহার করবেন। আপনি কি পরামর্শ দিচ্ছেন যে এই কোডটি ওয়েবসাইটগুলির জন্যও ব্যবহার করা যেতে পারে?
বুনিয়ামিন ইনান

আপনি বলেছিলেন "আমরা সাব-ডোমেনের পরিবর্তে সাব-ফোল্ডার ব্যবহার করতে চাই।" প্রতিটি সাবফোল্ডার কনফিগারেশন কোথায় তা পরিষ্কার করে আমি এখন আমার উত্তর আপডেট করব
মাতিয়াস হিডালগো

হ্যাঁ, আমি বলেছিলাম আমি আরও বলেছিলাম যে আমি সাব-ফোল্ডার সহ একাধিক ওয়েবসাইট ব্যবহার করতে চাই । আমি কেবল বুঝতে পারি না যে সেখানে স্টোর-কোড কী করছে?
বুনইমিন ইনান

এটি ছিল মাত্র একটি পরামর্শ, যদি আপনার স্টোরের কোডগুলি যথেষ্ট ভাল হয় তবে আপনাকে এনজিএনএক্স কনফিগারেশনটি মোকাবেলা করার দরকার নেই ... আমার ব্যাখ্যাটি এখনই দেখুন
মাটিয়াস হিডালগো

সুতরাং আপনি বলছেন যে যদি আমার স্টোর কোড এবং ওয়েবসাইট কোড মেলে তবে এটি কাজ করবে। প্রতিটি ওয়েবসাইটের জন্য আমার একাধিক স্টোরও রয়েছে।
বুনিয়ামিন ইনান

0

"etc / nginx" এ আপনার ডোমেন.কম এ আপনাকে একটি মানচিত্র তৈরি করতে হবে।

উদাহরণ স্বরূপ:

map $http_host$uri $MAGE_RUN_CODE { 
   ~*^(www\.)?magento-site\.com/website1/.*  website1;
   ~*^(www\.)?magento-site\.com/website2/.*  website2;
}

অথবা

map $request_uri $MAGE_RUN_CODE {
    default default;
    ~^/website1/.*  website1;
    ~^/website2/.*  website2;
}

আপনি সাব-ডোমেন উপায়ে বর্ণনা করছেন । আমি যা চাই তা সাব-ফোল্ডার উপায়। আমি চাই না website1.magento-site.com, কিন্তু আমি চাই magento-site.com/website1
বুনইয়ামান ইন

আপনি আপনার উপ-ফোল্ডারটিকে একইভাবে মানচিত্র করতে পারেন এবং উপ-পাথের জন্য map $http_host$uri $MAGE_RUN_CODE
রেজেেক্স

আমি এই পদ্ধতি চেষ্টা, শুধু একটি 404. দেয়
themanwhoknowstheman

@ ম্যাজেনএক্স আমি আপনাকে অন্য পোস্টে এই পদ্ধতিটি প্রস্তাব করতে দেখেছি, তবে এটি সঠিকভাবে কাজ করার জন্য সঠিক দিকনির্দেশগুলির বিষয়ে আপনি কখনই বিশদে যান না। ভাগ?
themanWoknowstheman

0

এই দ্বৈত মানচিত্রের সাথে খাঁটি এনগিনেক্স সমাধান সম্পর্কে কী?

প্রথমত, ওয়েব সাইটের জন্য (ধন্যবাদ @ ম্যাজেনএক্স)

map $request_uri $MAGE_RUN_CODE {
    default website1;
    ~^/website1/.*  website1;
    ~^/website2/.*  website2;
}

নতুন অনুরোধ uri জন্য একটি সেকেন্ড

map $request_uri $REQUEST_URI {
    default  $request_uri;
    "~*^/(website[0-9])(?<p>.*)" $p;
}

এবং পরিশেষে, নতুন গণনা করা REQUEST_URI সেট করতে ভুলবেন না

location ~ \.php$ {
(...)
   include fastcgi_params;
   fastcgi_param MAGE_RUN_CODE $MAGE_RUN_CODE;
   fastcgi_param REQUEST_URI $REQUEST_URI;
(...)
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.