NGinx का उपयोग करते समय आप किन सर्वोत्तम प्रथाओं का उपयोग करते हैं?
NGinx का उपयोग करते समय आप किन सर्वोत्तम प्रथाओं का उपयोग करते हैं?
जवाबों:
HTTP और HTTPS ब्लॉक को कैसे संयोजित करें।
server {
listen 80;
listen 443 default ssl;
# other directives
}
यह एक अलग प्रश्न के उत्तर के रूप में पोस्ट किया गया था। यहाँ देखें ।
अब तक, मैंने अभी तक देखे गए सबसे अच्छे टिप्स लेखक के इस पेज पेज पर दिए हैं: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfall/
आम तौर पर, "अगर" का उपयोग करना एक बुरा अभ्यास है (नगीनेक्स के लेखक के अनुसार)। यदि संभव हो तो, "if (-f ...)" के बजाय error_page निर्देशों के try_file का उपयोग करना बेहतर होगा
Maintenence.html फ़ाइल के साथ टिप टिप और हमें मिलने वाली try_files के साथ टिप:
स्थान / { try_files /mainurance.html $ uri $ uri / @wordpress; }
जब रखरखाव समाप्त होता है, तो केवल $ $ जड़ से रखरखाव html।
if (-f ...) { return 503; }
और error_page 503 /maintenance.html
। तुम क्या सोचते हो?
SSL को मजबूत करने के लिए nginx कॉन्फ़िगर करें। डिफ़ॉल्ट रूप से, 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
map
मिलान को उप-डोमेन के लिए रूट स्विच करते समय नियमित अभिव्यक्तियों के स्थान पर निर्देश का उपयोग करने के लिए इसका अक्सर अधिक कुशल :
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;
}
empty_gif
मॉड्यूल भी है बहुत उपयोगी है, खासकर यदि आप (Nagios / monit / आदि का प्रयोग करके) वेबसर्वर से नजर रखने के लिए प्रतिक्रियाओं की जरूरत है:
location /token {
empty_gif;
}
location /favicon.ico {
empty_gif;
}
location /img/1px.gif {
empty_gif;
}
access_log off;
उन स्थानों के लिए भी आम बात है
हमने इस कुकबुक का उपयोग करते हुए शेफ के साथ नग्नेक्स की स्थापना की, जिसमें डेबियन अपाचे 2 के समान नग्नेक्स कॉन्फ़िगरेशन को संभालने के लिए स्क्रिप्ट शामिल है, और कुछ चूक के साथ नमूना नमूने भी हैं।
यहाँ एक रखरखाव पृष्ठ वापस करने के लिए एक अच्छी विधि है। सभी अनुरोधों को फिर से लिखा गया है और सही 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;
}
if
यदि आप इसे सही तरीके से उपयोग करते हैं तो एक बयान में कुछ भी गलत नहीं है - डॉक्स का कहना है कि if
यदि आप सुरक्षित हैं 'बस कर रहे हैं return xxx;
।
location = /maintenance.html { break; }
आवश्यक है?
Nginx 0.7.12 और बाद में, "होस्ट" हेडर के बिना अनुरोधों को पकड़ने के लिए सर्वर_नाम में एक "" प्रयोग करने योग्य है।
आप अपरिभाषित आभासी मेजबानों के लिए एक catchall के रूप में निम्नलिखित का उपयोग कर सकते हैं।
server {
server_name _ "";
}
मैंने कुछ समय पहले यह भी पोस्ट किया था कि कैसे nginx के साथ gzip कम्प्रेशन को ठीक से हैंडल किया जाए क्योंकि पुराने ब्राउज़र में सिर्फ एक कंबल gzip स्टेटमेंट के साथ समस्याएँ हो सकती हैं। HTH।
http://tumblelog.jauderho.com/post/27655495/gzip-compression-with-nginx
मुझे नहीं पता कि यह सबसे अच्छा अभ्यास है, लेकिन निश्चित रूप से नेग्नेक्स में नेस्टेड स्थिति प्राप्त करने के लिए एक साफ हैक। यहाँ nginx विकी से एक नमूना है ।
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.
}
}
यदि आपको उसी सर्वर ब्लॉक द्वारा नियंत्रित उप डोमेन के लिए 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;
}
}
मैं हमेशा root
सर्वर ब्लॉक के शीर्ष में निर्देश का उपयोग करने की कोशिश करता हूं ताकि मैं $document_root
चर का लाभ उठा सकूं और कभी नहीं, लेकिन कभी भी, root
निर्देश को किसी स्थान ब्लॉक के अंदर शामिल न करें ।
नुकसान पृष्ठ Nginx विकी है सर्वोत्तम प्रथाओं के बारे में कुछ बेहतरीन युक्तियां है।
यदि आप nginx को एक प्रॉक्सी के रूप में उपयोग कर रहे हैं, तो टाइमआउट सेटिंग्स समायोजित करने के लिए यह सुनिश्चित करना महत्वपूर्ण हो सकता है कि आपके आवेदन से पहले उनके द्वारा किए जाने वाले nginx ड्रॉप कनेक्शन नहीं हैं, खासकर यदि आप एक उच्च ट्रैफ़िक एप्लिकेशन के साथ काम कर रहे हैं:
proxy_connect_timeout
proxy_send_timeout
क्या आपने यहाँ पर एक नज़र डाला?