
मैंने पहले से ही
मक्खी पर सामग्री को
बदलने के लिए नग्नेक्स का उपयोग करने के बारे में लिखा था। वर्णित विधि के आधार पर लेख के प्रकाशन के बाद से, एक वास्तविक ईकॉमर्स परियोजना शुरू की गई है और विकसित हो रही है। अनुवाद और परिवर्तन के अलावा,
Google से शुरुआती मार्गदर्शिका की वाचाओं पर एसईओ फिर से लिखना भी लागू किया जाता है।
हालांकि, विदेशी सामग्री पर रूसी प्रोग्रामर्स के उत्पादों की पूरी जीत से पहले, एक छोटी लेकिन बहुत महत्वपूर्ण चीज गायब थी -
कुकीज़ का सहारा लेना।
समस्या का सार क्या है
समस्या यह है कि कोई भी सामान्य एप्लिकेशन सर्वर हमेशा एक कुकी सेट करता है, उदाहरण के लिए, उसके सामान के साथ ग्राहक सत्र या टोकरी को बचाने के लिए। यदि यह सर्वर (या इसके व्यवस्थापक) सुरक्षा के एक निश्चित स्तर को बनाए रखने से संबंधित है, तो यह कुकी बॉडी में डोमेन और पथ सेट करता है, उदाहरण के लिए
डोमेन = backend.org; path = / path1 ।
रिवर्स प्रॉक्सी मोड में लॉन्च किया गया हमारा नग्नेक्स
बैकएंड.ऑर्ग से
frontend.org तक डॉक्यूमेंट बॉडी के सभी लिंक को उल्लेखनीय रूप से बदलता है, लेकिन कुकीज़ के लिए ऐसा नहीं करता है! इसका मतलब है कि क्लाइंट का ब्राउज़र इन कुकीज़ को अस्वीकार कर देगा।
यह सवाल लंबे समय से नगनेक्स प्रशासकों के दिमाग को चिंतित करता है; समाचारपत्रिकाओं में, यह वर्ष में 1-2 बार पॉप अप होता है। अधिकांश प्रश्नकर्ताओं ने स्पष्ट रूप से
बैकेंड के तर्क को घुमाकर अपनी समस्याओं को हल किया, लेकिन मुझे नहीं! मूल साइट के अगले अद्यतन के बाद, यह स्पष्ट हो गया कि PHP + कर्ल के साथ बैसाखी को खींचना संभव नहीं था और आपको निश्चित रूप से Nginx का उपयोग करके एक समाधान खोजना होगा!
मैंने एक साथ
ngx_http_perl_module और चर
$ upstream_http_set_cookie से विकल्पों के माध्यम से एक साथ मेलिंग सूची में विषय को वापस कर दिया, मैंने खुद को मॉड्यूल लिखने की भूतिया आशा के साथ
छंद के विकारों में भी देखा। लेकिन सब कुछ असफल रहा जब तक कि एक ठीक क्षण में मुझे
मिखाइल मजुरस्की का एक पत्र नहीं मिला, जिसने मूल्यवान सलाह दी थी। इस सलाह के लिए धन्यवाद, मैंने न केवल आसानी से कुकी प्रॉक्सिंग की समस्या को हल किया, बल्कि एक नया उपकरण भी प्राप्त किया, जिसके साथ आप मेरी परियोजना का संस्करण 2.0 बना सकते हैं।
निर्णय
इस उपकरण का नाम
लुआ-नेगनेक्स-मॉड्यूल है , जो कि
एक अन्य चीनी सोने की डली से लिखा गया है जो कि
Taobao की जड़ है। नाम से यह समझना आसान है कि हम नगनेक्स में निर्मित
लुआ स्क्रिप्टिंग
भाषा के बारे में बात कर रहे हैं - लेकिन यह सिर्फ एक दुभाषिया से अधिक है! इन लोगों ने प्रति सेकंड हजारों ऑपरेशनों के प्रदर्शन के साथ पूरी तरह से गैर-अवरुद्ध कार्यान्वयन बनाया, जिसमें नग्नेक्स के अंदर सभी घटनाओं के लिए हुक हैं। पहले जो केवल C में अपना मॉड्यूल लिखकर लागू किया जा सकता था, वह अब Lua में कुछ लाइनों के साथ किया जा सकता है। में रुचि रखते हैं?
स्थापना
आरंभ करने के लिए, Nginx का नवीनतम संस्करण डाउनलोड करें जिसे
आप स्वयं जानते हैं कि कहाँ है । अचानक, कौन भूल गया?
तब हम
प्रोजेक्ट पेज से नवीनतम संस्करण लुआ-नेग्नेक्स-मॉड्यूल डाउनलोड करते हैं।
पुस्तकालयों की आवश्यकता होगी:
apt-get install libpcre3 libpcre3-dev libperl-dev lua5.1 liblua5.1-dev
नई रिलीज की गति को देखते हुए Nginx का निर्माण पहले से ही दिल से कैसे पता होना चाहिए। मैं अपनी रसोई की किताब से एक विन्यास दूंगा:
./configure --with-cc-opt="-I /usr/include" --with-ld-opt="-L /usr/lib" --with-http_sub_module --with-http_ssl_module --prefix=/home/nginx/data --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/ --add-module=../substitutions4nginx/ --add-module=../chaoslawful-lua-nginx-module-*
विन्यास
स्थापित करने के बाद nginx को पुनरारंभ करना न भूलें। और देखो क्या हुआ? लेकिन यह इतनी बड़ी बात हो गई:
http://wiki.nginx.org/HttpLuaModule , जो, रचनाकारों के अनुसार, औसत डेस्कटॉप पीसी पर प्रति सेकंड 25 हजार अनुरोध मानता है। दस्तावेज़ीकरण का सावधानीपूर्वक अध्ययन करने के बाद, यह स्पष्ट हो जाता है कि सभी घटनाएँ और आंतरिक नगनेक्स हैंडलर लुआ रनटाइम में उपलब्ध हैं। विशेष रूप से हमारे कार्य के लिए, हम
शीर्ष लेख_filter_by_lua निर्देश का उपयोग करेंगे। कॉन्फ़िगरेशन फ़ाइल खोलें, इच्छित
स्थान का चयन करें और एक सरल कोड जोड़ें:
header_filter_by_lua ' local headers = ngx.header["Set-Cookie"] if headers then if type(headers) == "string" then headers = {headers} end for i, header in ipairs(headers) do local cookie = ngx.re.match(header, "JSESSIONID=([^;]+);", "io") if cookie then headers[i] = "JSESSIONID=" .. cookie[1] .. "; domain=.frontend.com; path=/newpath;" end end ngx.header["Set-Cookie"] = headers end ';
यहां हैंडलर का सबसे सरल संस्करण है - पहला लुआ कोड जिसे मैंने अपने जीवन में देखा था। आप एक सार्वभौमिक सेट-कुकी हेडर पार्सर लिख सकते हैं, देश पहले से ही टिप्पणियों में अपने नायक की प्रतीक्षा कर रहा है!
आगे क्या है?
जब समस्या हल हो जाती है, और यहां तक कि इतने सरल तरीके से, आप तुरंत एक नया लक्ष्य निर्धारित करना चाहते हैं। एक नए उपकरण का उपयोग करने के बारे में मेरे पास क्या विचार थे?
- काउंटर मारा वेब सर्वर के अंदर काउंटर को आवश्यक चर तक सीधी पहुंच के कारण प्रोग्राम कोड का एक बहुत बख्शा जाएगा। अगर हम एक NoSQL सिस्टम जैसे Redis को सीधे Nginx से जोड़ते हैं, तो हमें SQL कोड के एक समूह से छुटकारा मिल जाएगा। यह एक पूरी तरह से अगोचर और बहुत तेज़ काउंटर होगा!
- विरोधी DDoS। उस भाषा का उपयोग करना जिसमें अधिकांश आधुनिक खेलों का एआई लिखा गया है, वेब सर्वर के लिए अवांछित अनुरोधों का एक बुद्धिमान फिल्टर बनाना आसान है।
- स्वचालित एसईओ जनरेटर को फिर से लिखना। नियमों को मैन्युअल रूप से सेट करने और मेटा टैग जोड़ने के बजाय, हम एक स्क्रिप्ट लिखते हैं जो मक्खी पर मेटा टैग बनाता है, उदाहरण के लिए, लिवस्ट्रीट के लिए मॉड्यूल में ।
- और, ज़ाहिर है, HTML ब्लॉक को पहचानने के लिए तत्वों और सामग्री के चयनात्मक फ़िल्टरिंग के साथ अनुवाद-2.0।
और क्या आप के साथ आया था, प्रिय habrayuzer?
पुनश्च एक उबाऊ पोस्ट, कोई चित्र बिल्कुल नहीं। एक घोषणा के रूप में, मैं एक तस्वीर जोड़ूंगा कि कैसे एनजीएनएक्स की मदद से एसईओ फिर से लिखता है और Google खोज में इसकी स्थिति बदल गई। इस बारे में एक लेख की आवश्यकता है?
