এনগিনেক্স ক্যাচিং সিমলিংক


12

আমার ওয়েব সার্ভারে আমার একটি ডিপ্লোয়মেন্ট সিস্টেম রয়েছে, যতবারই কোনও অ্যাপ্লিকেশন স্থাপন করা হয় ততবার এটি একটি নতুন টাইমস্ট্যাম্পড ডিরেক্টরি তৈরি করে এবং নতুন ডিরেক্টরিতে "কারেন্ট" যুক্ত করে। এটি সমস্ত অ্যাপাচে ভাল এবং দুর্দান্ত কাজ করেছে, তবে আমি যে নতুন এনগিনেক্স সার্ভারটি সেট আপ করেছি, দেখে মনে হচ্ছে এটি নতুন সিমলিংকযুক্ত পরিবর্তে "পুরানো" মোতায়েনের একটি স্ক্রিপ্ট চলছে।

কীভাবে এটি সমাধান করা যায় সে সম্পর্কে আমি কয়েকটি টিউটোরিয়াল এবং পোস্ট পড়েছি তবে খুব বেশি তথ্য নেই এবং কিছুই মনে হয় কাজ করছে না। আমার vhost ফাইলটি এখানে:

server {
    listen 80;

    server_name ~^(www\.)?(?<sname>.+?).testing.domain.com$;
    root /var/www/$sname/current/public;
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) {
        add_header        Cache-Control public;
        add_header        Cache-Control must-revalidate;
        expires           7d;
    }

    location ~ \.php$ {
        #fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
    }

    location ~ /\.ht {
        deny all;
    }
}

এবং এখানে আমার ফাস্টসিজি_প্যারামস:

fastcgi_param   SCRIPT_FILENAME         $document_root$fastcgi_script_name;
fastcgi_param   QUERY_STRING        $query_string;
fastcgi_param   REQUEST_METHOD      $request_method;
fastcgi_param   CONTENT_TYPE        $content_type;
fastcgi_param   CONTENT_LENGTH      $content_length;

fastcgi_param   SCRIPT_NAME     $fastcgi_script_name;
fastcgi_param   REQUEST_URI     $request_uri;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT           $realpath_root;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;

fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR     $remote_addr;
fastcgi_param   REMOTE_PORT     $remote_port;
fastcgi_param   SERVER_ADDR     $server_addr;
fastcgi_param   SERVER_PORT     $server_port;
fastcgi_param   SERVER_NAME     $server_name;

fastcgi_param   HTTPS           $https if_not_empty;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS     200;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;

আমি যদি সত্যিই প্রশংসা করব যে কেউ যদি আমাকে এই মুহুর্তে পূর্বের স্থাপনা মোছার সাথে জড়িত থাকে তবে এটির জন্য সহায়তা করতে পারে। সিস্টেমটি উবুন্টু 14.04.5 এলটিএস; পিএইচপি 7.1; এনগিনেক্স এনজিনেক্স / ১.৪..6 (উবুন্টু)

উত্তর:


22

এমবেডেড ভেরিয়েবল , $realpath_root: একটি পরম পথনাম সংশ্লিষ্ট রুট বা ওরফে বর্তমান অনুরোধের জন্য নির্দেশ মান, সমস্ত সিম্বলিক লিঙ্ক সহ বাস্তব পাথ করার সংকল্প

$realpath_rootপরিবর্তে ব্যবহারের সমাধানটি $document_rootকিউ / এ সাইট এবং ফোরামে চারপাশে অনুলিপি করা হয়; এটা আসলে it.Yet খোঁজার এড়াতে কঠিন, আমি শুধুমাত্র দেখা করেছি এটা ভাল ব্যাখ্যা একবার Rasmus Lerdorf । এটি কেন কাজ করে এবং কখন এটি ব্যবহার করা উচিত তা বর্ণনা করার সাথে সাথে এটি ভাগ করে নেওয়া উচিত।

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

এনগিনেক্স সহ এটি বেশ সহজ। এটি আপনার কনফিগারেশনে যুক্ত করুন:

fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;

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

কনিষ্ক দুদেজার এতে সমস্যা ছিল এবং একটি দরকারী বিজ্ঞপ্তি যুক্ত করেছেন: নিশ্চিত করুন যে এই পরিবর্তনগুলি আসলে চূড়ান্ত কনফিগারেশনে থাকবে, include fastcgi_params;যার পরে অন্যথায় সেগুলি ওভাররাইড করে।


হাই, এটি একটি দুর্দান্ত উত্তর, তবে আপনি যদি আমার কনফিগারেশনে লক্ষ্য করেন তবে আমার কাছে ফাস্টসিজি_প্রেম DOCUMENT_ROOT $ রিয়েলপথ_রোট রয়েছে; fastcgi_param SCRIPT_FILENAME $ ডকুমেন্ট_রোট $ ফাস্টসিজি_স্ক্রিপ্ট_নাম; ফাস্টসিজি_প্রেমগুলির পরে অন্তর্ভুক্ত রয়েছে এবং এটি আসলে সহায়তা করে না। আমি যখন পিএইচপি-এফপিএম পুনরায় চালু করি তখন সিমলিংকগুলি সমাধান হয়ে যায়। এটি কি আমার পরিবর্তে পিএইচপি ক্যাচিংয়ের সমস্যাটি নির্দেশ করে?
আওরিস

সংশোধন। তোমার SCRIPT_FILENAMEআছে $document_root, নেই $realpath_root
এসা জোকিনেন

হুম ... তবে যেভাবে আমি এটি বুঝতে পারি DOCUMENT_ROOTসেট করে সেট করা আছে $realpath_root, এটির মানটি টানতে হবে বা আমি কি সম্পূর্ণ ভুল এবং DOCUMENT_ROOTএটি সম্পর্কিত নয়$document_root
আরিস

1
হাই, আপনার উত্তর এবং আপনার ব্যাখ্যার জন্য আপনাকে অনেক ধন্যবাদ, আমার ভুলটি অনুমানটি DOCUMENT_ROOTপ্রভাবিত করেছিল$document root
আরিস

2
আমি এই সমস্যাটির সাথে সার্ভারগুলিতে অ্যাপাচি + পিএইচপি-এফএমপি ব্যবহার করছি এবং মোতায়েনের জন্য ক্লিয়ারিং ওপচ করেছে আমার জন্য কাজ করেছে, যদিও ক্যাপিস্ট্রানো নয় মোতায়েনের জন্য আমাদের কাছে একটি বাশ স্ক্রিপ্ট রয়েছে। আমি মনে করি এটি একটি সহজ সমাধান এবং যাইহোক ডিপোয়েলে আপনার ওপচিকে সাফ করা একটি ভাল অনুশীলন। এছা রাসমাস মন্তব্যে লিঙ্কের জন্য ধন্যবাদ যে সোনার!
কার্লোস মাফলা

3

Https://unix.stackexchange.com/questions/157022/make-nginx-follow-symlinks থেকে মনে হচ্ছে আপনি পরিবর্তন করে সমস্যার সমাধান করতে পারবেন

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

প্রতি

fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;

(অর্থাত্ পথ থেকে পরিবর্তন $document_rootকরা $realpath_root)।

এটি নিশ্চিত করার জন্য আমার কাছে বর্তমানে কোনও এনগিনেক্স সার্ভারে অ্যাক্সেস নেই (আমার হোম সার্ভারটি বর্তমানে একটি পুনর্নির্মাণের কাজ চলছে), তবে সমাধানটি https://medium.com/@krishkdudeja/t সত্যি- atomic- deployments দ্বারা সহযোগিতায়িত বলে মনে হচ্ছে -নগিনেক্স-এবং-পিএইচপি-এফএম-এপি 8 এ 8 এএসি 1 সিডি 9

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