এনজিঙ্ক্স সেরা অভ্যাস


46

এনজিঞ্জ ব্যবহার করার সময় আপনি কোন সেরা অনুশীলনগুলি ব্যবহার করেন?


কেবল একটি নোট যে এটি কোনও ম্যাজেন্টো সেটআপের জন্য কাজ করে না। তবুও কারণগুলি তদন্ত করছে তবে আমার কাছে মনে হয় ক্যোরি স্ট্রিংয়ের সাথে এর কিছু আছে।
জাউদার হো

"ওয়ার্ডপ্রেস" নামের সাব-ডিরেক্টরিতে ওয়ার্ডপ্রেস থাকাতে অবস্থান / ওয়ার্ডপ্রেস অবশ্যই কার্যকর হবে। ওয়েব রুট "/" এ যখন আমাদের ওয়ার্ডপ্রেস থাকে তখন কী হবে?
rahul286

উত্তর:


21

কীভাবে এইচটিটিপি এবং এইচটিটিপিএস ব্লক একত্রিত করবেন।

server {
    listen 80;
    listen 443 default ssl;

    # other directives
}

এটি অন্য প্রশ্নের উত্তর হিসাবে পোস্ট করা হয়েছিল। এখানে দেখুন


21

এখন অবধি, আমি এর আগে দেখা সেরা টিপস হ'ল এটির ক্ষতিগ্রস্থ পৃষ্ঠাটির লেখক হ'ল: https://www.nginx.com/res स्त्रोत / উইকি / স্টার্ট / টপিক্স / টিউটোরিয়ালস / কনফিগ_পিটফলস /


15

সাধারণত, "যদি" ব্যবহার করা একটি খারাপ অভ্যাস (এনজিনেক্সের লেখকের মতে)। যদি সম্ভব হয় তবে এর পরিবর্তে "যদি (-f ...)" ত্রুটি_পৃষ্ঠা নির্দেশাবলীর চেষ্টা_ ফাইল ব্যবহার করা ভাল better

Maintenence.html ফাইলের সাথে টিপের সংমিশ্রণ এবং ট্রাই_ফায়ালগুলি সহ আমরা পাই:

অবস্থান /
    try_files /mainmain.html tenance uri $ uri / @wordpress;
}

রক্ষণাবেক্ষণ শেষ হলে, মূল থেকে from মূল থেকে রক্ষণাবেক্ষণ html ml


16
এটি /maintain.html হিসাবে 200 টি প্রতিক্রিয়া হিসাবে পরিবেশন করা আদর্শ নয়। আপনি সম্ভবত অনুসন্ধান ইঞ্জিনগুলি সনাক্ত করতে চান যে রক্ষণাবেক্ষণ পৃষ্ঠাটি আপনার আসল ওয়েবসাইট নয়। আপনি সম্ভবত একটি 503 (অস্থায়ীভাবে পরিষেবা অনুপলব্ধ পরিষেবা) ফিরিয়ে দিতে চান। আমি কীভাবে এটি করতে পারি তার একমাত্র উপায় হ'ল একটি if (-f ...) { return 503; }এবং এর সাথে error_page 503 /maintenance.html। আপনি কি মনে করেন?
অ্যারন জিব্রাল্টার

11

শক্তিশালী এসএসএল সিফারগুলি ব্যবহার করতে এনজিনেক্স কনফিগার করুন। ডিফল্টরূপে, SSLv2 সক্ষম হয় (যা সম্ভব হলে আপনার অক্ষম করা উচিত)।

ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5;

http://tumblelog.jauderho.com/post/121851623/nginx-and-stronger-ssl


8

mapসাবডোমেনগুলির সাথে মিলে যাওয়ার জন্য রুটটি স্যুইচ করার সময় নিয়মিত এক্সপ্রেশনগুলির জায়গায় নির্দেশিকাটি ব্যবহার করতে এটি প্রায়শই দক্ষ efficient

server {

    server_name mysite.tld ~^.+\.mysite\.tld$;

    map $host $files {
        default            common;
        mysite.tld         common;
        www.mysite.tld     common;
        admin.mysite.tld   admin;
        system.mysite.tld  system;
        *.mysite.tld       users;
    }

    root /var/www/mysite/$files;

}

5
আপনি কি জানেন যে আপনি সার্ভার_নাম mysite.tld * .mysite.tld করতে পারেন
অজানা

8

empty_gifমডিউল হয় খুব দরকারী, বিশেষ করে যদি আপনি (nagios / monit / ইত্যাদি ব্যবহার করে) ওয়েবসার্ভার থেকে মনিটর প্রতিক্রিয়া প্রয়োজন:

location /token {
    empty_gif;
}

location /favicon.ico {
    empty_gif;
}

location /img/1px.gif {
    empty_gif;
} 

1
আপনি কি এর জন্য একটি বাস্তব বিশ্বের উদাহরণ সরবরাহ করতে পারেন? এটি এখনও কীভাবে কার্যকর তা আমি এখনও পুরোপুরি বুঝতে পারি না।
পিক্সেল বিকাশকারী

1
@ পিক্সেল বিকাশকারী, এটি কেবল গতির জন্য কার্যকর useful Nginx মেমরিতে খালি জিআইএফের জন্য ডেটা রাখে যাতে এটি কখনই ডিস্ক থেকে লোড করতে হয় না।
অজানা

5
এছাড়াও access_log off;সেইসব অবস্থানের জন্য সাধারণ অভ্যাস
SaveTheRbtz

6

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


5

রক্ষণাবেক্ষণ পৃষ্ঠাটি ফেরত দেওয়ার জন্য এখানে একটি ভাল পদ্ধতি। সমস্ত অনুরোধগুলি পুনরায় লেখা হয় এবং সঠিক http কোডটি ফিরে আসে। (503 - পরিষেবা অনুপলব্ধ)

error_page 503 /maintenance.html;

location /
{
    if (-f $document_root/maintenance.html)
    {
        return 503;
    }

    try_files $uri /index.php?$args;
}

location = /maintenance.html
{
    rewrite ^ /maintenance.html break;
}

1
প্রকৃতপক্ষে, আমি একমত নই - আমি সার্ভারফল্ট / প্রশ্ন / 18994/nginx-best-practices/… এ একটি মন্তব্য যুক্ত করেছি । মূলত, আপনি একটি 503 ত্রুটি ফিরিয়ে দিতে চান অন্যথায় বট এবং সূচকরা আপনার রক্ষণাবেক্ষণ পৃষ্ঠাটি আপনার প্রকৃত সাইটের অংশ বলে মনে করবেন ... ifআপনি যদি সঠিকভাবে এটি ব্যবহার করেন তবে কোনও বিবৃতিতে কোনও দোষ নেই - ডক্স বলে যে ifআপনি নিরাপদ থাকলে শুধু করছি return xxx;
অ্যারন জিব্রাল্টার

এছাড়াও, location = /maintenance.html { break; }প্রয়োজনীয়?
অ্যারন জিব্রাল্টার

4

Nginx 0.7.12 এবং তার পরে, "হোস্ট" শিরোনাম ছাড়াই অনুরোধগুলি ধরার জন্য সার্ভার_নামে একটি "" ব্যবহারযোগ্য।

অপরিজ্ঞাত ভার্চুয়াল হোস্টগুলির জন্য আপনি নিম্নলিখিতটি ক্যাচল হিসাবে ব্যবহার করতে পারেন।

server {
  server_name _ "";
}

আপনার উদাহরণটি কেবল একটি অপরিজ্ঞাত ভোস্টের সাথে অনুরোধের জন্যই কাজ করে বা এটি কোনও অজানা (ভুল) ভোস্টের অনুরোধগুলির সাথেও কাজ করবে?
বেনোইট

@ বেনোইট এটি এমন কোনও কিছুর জন্য কাজ করে যা সংজ্ঞায়িত হয় না।
অজানা

"সার্ভার_নাম _ *" কি nginx 0.7 এর পরে সমর্থিত নয়?
rahul286

1
দয়া করে মনে রাখবেন এটি কেবল আংশিক সত্য। "" একটি মিসিং হোস্ট শিরোলেখাকে ধরবে, তবে কোনও হোস্ট শিরোলেখের সাথে কোনও অনুরোধ পাওয়া যায় না যা কোনও কিছুর সাথে মেলে না। আপনি যদি ক্যাচ-অল সার্ভার ব্লক চান তবে শোনার নির্দেশের অধীনে ডিফল্ট_সেভার পতাকাটি দেখুন।
মার্টিন Fjordvald

3

কিছুক্ষণ আগে আমি কীভাবে এনজিএনক্সের সাথে জিপিপ কম্প্রেশন সঠিকভাবে পরিচালনা করতে পারি সেহেতু পুরানো ব্রাউজারগুলিতে কেবল একটি কম্বল জিজিপ বিবৃতিতে সমস্যা থাকতে পারে। আছে HTH।

http://tumblelog.jauderho.com/post/27655495/gzip-compression-with-nginx


3

আমি জানি না এটি একটি সেরা অনুশীলন কিনা, তবে অবশ্যই এনজিএনএক্সে নেস্টেড শর্তগুলি পেতে একটি ঝরঝরে হ্যাক। এনগিনেক্স উইকির একটি নমুনা এখানে

location /xxxx/ {
  set $test "";

  if ($request_method = POST) {
    set $test  P;
  }

  if ($http_cookie ~* "CCCC=.+(?:;|$)" ) {
    set $test  "${test}C";
  }

  if ($test = PC) {
    #rewrite rule goes here.
  } 
}

3
আমি এটিকে "কুরুচিপূর্ণ তবে মাঝে মধ্যে প্রয়োজনীয় অনুশীলন" এর ক্যাটাগরিতে রেখেছি - অবশ্যই উত্সাহিত করার মতো কিছু নয়।
womble

2

একই সার্ভার ব্লক দ্বারা পরিচালিত সাবডোমেনগুলির জন্য যদি আপনাকে HTTP এবং https এর মধ্যে প্রাসঙ্গিকভাবে ফ্লিপ করতে হয় তবে আপনি এটি করতে ভেরিয়েবল ব্যবহার করতে পারেন। জিনিসগুলি করার সবচেয়ে কার্যকর উপায় নাও হতে পারে তবে এটি কাজ করে:

server {
  server mysite.tld ~^.+\.mysite\.tld$;

  set $req_ssl = 0;

  map $host $files {
      default            common;
      mysite.tld         common;
      www.mysite.tld     common;
      admin.mysite.tld   admin;
      system.mysite.tld  system;
      *.mysite.tld       users;
  }

  root /var/www/mysite/$files;

  if ( $files = "admin" ){
    set $req_ssl 1;
  }

  if ( $files = "common" ){
    set $req_ssl 2;
  }

  if ( $scheme = http )
  {
    set $req_ssl $req_ssl.1;
  }

  if ( $scheme = https )
  {
    set $req_ssl $req_ssl.2;
  }

  if ($req_ssl = 1.1){
    rewrite ^ https://$host$uri;
  }

  if ($req_ssl = 2.2){
    rewrite ^ http://$host$uri;
  }

}

2

আমি সর্বদা rootসার্ভার ব্লকের শীর্ষে নির্দেশটি ব্যবহার করার চেষ্টা করি যাতে আমি $document_rootভেরিয়েবলটির সুবিধা নিতে পারি এবং কখনই না, তবে কোনও rootঅবস্থানের ব্লকের ভিতরে থাকা নির্দেশকে অন্তর্ভুক্ত করতে পারি না ।

Pitfalls পৃষ্ঠা nginx উইকি থেকে সর্বোত্তম অনুশীলন সম্পর্কে কিছু মহান টিপস আছে।


1

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

proxy_connect_timeout
proxy_send_timeout

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