এনগিনেক্স - সমস্ত অনুরোধ একক স্ক্রিপ্টে রুট করুন


11

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

সুতরাং স্ক্রিপ্টটি যেভাবে কাজ করে তা হ'ল এটি কোনও .htaccessফাইল ব্যবহার করে ডিরেক্টরি (অ্যাপাচে) সমস্ত HTTP ট্র্যাফিককে বাধা দেয় । যা দেখতে দেখতে তা এখানে:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.+$ index.php [L]
</IfModule>

অনেকটাই অকপট. সমস্ত অনুরোধগুলি index.phpসরল এবং সহজ মাধ্যমে পরিচালিত হয় ।

আমি এনজিঙ্ক্সে সেই আচরণটি নকল করতে চাইছি, তবে আমি এখনও কোনও উপায় পাইনি। কারও কোন পরামর্শ আছে?

nginx.confএই মুহুর্তে আমার ফাইলের একটি অনুলিপি এখানে । দ্রষ্টব্য যে এটি আমার কাজ করার চেষ্টা করার জন্য তৈরি করা হয়েছিল; বেশিরভাগই একটি অনুলিপি / পেস্ট কাজ।

user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    # multi_accept on;
}

http {
        include         /etc/nginx/mime.types;
        default_type    text/plain;
        include         /etc/nginx/conf.d/*.conf;
        server {
                listen          80;
                server_name     swingset.serverboy.net;

                access_log      /var/log/nginx/net.serverboy.swingset.access_log;
                error_log       /var/log/nginx/net.serverboy.swingset.error_log warn;

                root            /var/www/swingset;

                index           index.php index.html;
                fastcgi_index   index.php;

                location ~ \.php {
                        include /etc/nginx/fastcgi_params;
                        keepalive_timeout 0;
                        fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                        fastcgi_pass    127.0.0.1:9000;
                }
        }
}

উত্তর:


13

এটি যোগ করুন,

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

এটি যা করে তা হ'ল প্রথমে $ uri এবং $ uri / এর সত্যিকারের ফাইল / ফোল্ডার হিসাবে অস্তিত্ব পরীক্ষা করে দেখুন এবং সেগুলি উপস্থিত না থাকলে কেবল /index.php মাধ্যমে যেতে হবে (এটি আমার জেন্ডার কাঠামোর জন্য সেটআপ যেখানে সূচকের মাধ্যমে রাউটিং করা হয়) .php) - অবশ্যই যদি আপনাকে কিছু প্যারামিটারগুলি পাস করতে হয় তবে কেবল /index.php a? q = এ শেষে যুক্ত করুন এবং এটি পরামিতিগুলি পাস করবে।

ট্রাই_ফাইলে নির্দেশিকা সংস্করণ 0.7.27 এবং এর থেকে পাওয়া যায় কিনা তা নিশ্চিত করুন।


সতর্কতা: এটি শেষ হওয়া ইউআরএলগুলিতে কাজ করবে না .php , উদাহরণস্বরূপ এটি কাজ করবে: /doesNotExist.ph তবে এটি কাজ করবে না (পরিবর্তে ৪০৪ পাবে):/doesNotExist.php
হানশেনেরিক

7

আমি এটি নিজেই বের করেছিলাম! হ্যাঁ!

locationব্লকের জন্য আমার যা দরকার ছিল তা হ'ল:

location /  {
    include /etc/nginx/fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME  $document_root/index.php;
    fastcgi_pass    127.0.0.1:9000;
}

বাকি সমস্ত কিছুই মূলত একই ছিল।


আমি কি নীচে লিখেছি তা চেষ্টা করেছ? এছাড়াও এর অর্থ এই নয় যে আপনার সমস্ত স্থিতিশীল ফাইলগুলি index.php- এর মধ্য দিয়ে যাবে - আপনি এটি চান তা নিশ্চিত নয়।
অ্যাডাম বেনয়ুন

@ অ্যাডাম: হ্যাঁ, আমি আপনার কোড চেষ্টা করেছিলাম। আমি ইন্ডেক্স.এফপি এর মাধ্যমে সমস্ত কিছু চালিয়ে যেতে চেয়েছিলাম। ধন্যবাদ যদিও!
ম্যাটবস্টা

2

জিইটি আর্গুমেন্ট সংরক্ষণের জন্য নিম্নলিখিত ব্যবহার করুন:

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

$ ইস_আরগস হয়ে যায় '?' যদি $ টি খালি না থাকে

বা আরও সহজ:

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

সতর্কতা: এটি শেষ হওয়া ইউআরএলগুলিতে কাজ করবে না .php , উদাহরণস্বরূপ এটি কাজ করবে: /doesNotExist.ph তবে এটি কাজ করবে না (পরিবর্তে ৪০৪ পাবে):/doesNotExist.php
হানশেনেরিক

1

রুট দির সেট করার পরে এটি যুক্ত করুন

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

আপনার প্রয়োজন অনুসারে আপনি রাইজিক্স পরিবর্তন করতে পারেন কারণ আপনাকে রুল কোয়েরি_স্ট্রিংকে সূচি.পি.পি.


4
ifতিনি যা চাইছেন তা সম্পাদন করার চেয়ে আরও ভাল উপায় আছে । wiki.nginx.org/IfIsEvil
আইসিয়াস

0

আপনার টার্গেটটি যখন পিএইচপি ফাইল হয় তখন সাবধান হওয়ার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ সমস্যা হ'ল আপনি যে কোনও নিয়ম return/ rewriteবিধিটি ব্যবহার করেন না কেন সেই location ~ \.phpনির্দেশটি অতিক্রম করে না তা নিশ্চিত করা । যদি এটি ঘটে থাকে, তবে পিএইচপি উত্স কোডটি প্রকাশ করে এনজিনেক্স আপনার পিএইচপি ফাইলটিকে রেন্ডারিং ছাড়াই পরিবেশন করবে। এটি বিপর্যয়কর হতে পারে।

নিরাপদতম উপায় ইতিমধ্যে সরবরাহ করা হয়েছে, location / { try_files $uri $uri/ /index.php; }

নিশ্চিত হয়ে নিন যে আপনি নিজের ব্লকেও সেট করেছেন index index.phpএবং ডিফল্ট কনফিগার ফাইলে অন্তর্ভুক্ত ব্লকটিকে location /কোনও অসুবিধে করেছেন location ~ \.php

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