Nginx, एक आईपी पर कई वेबसाइट


14

तो मैं डिजिटल महासागर और nginx का उपयोग कर रहा हूं। मैं कई वेबसाइटों (मेरी परियोजनाओं) की मेजबानी करना चाहता हूं, लेकिन हर एक के लिए एक डोमेन खरीदना नहीं चाहता।

वहाँ एक तरह से कई वेबसाइटों की मेजबानी करने के लिए nginx और डिजिटल महासागर पर होस्ट करते हुए उन्हें एक आईपी का उपयोग करके एक्सेस करने का एक तरीका है?


उन्हें अलग-अलग फ़ोल्डरों ( X.Y.Z.W/foo, X.Y.Z.W/bar) पर होस्ट करें ? आप उनके लिए डोमेन क्यों नहीं प्राप्त कर सकते हैं? (आप एक ही आईपी को कई डोमेन पर असाइन कर सकते हैं)?
मुरु

ऐसा करने के लिए आपको कई डोमेन की आवश्यकता होगी। एक मुफ्त डोमेन सेवा है, हालांकि: freenom.com आपको मुफ्त .tk, .ml, .ga, .cf और .gq डोमेन देता है।
द वंडरर

@ मुझे लगता है कि वे कई डोमेन पर पैसा खर्च नहीं करना चाहते हैं। वे चाहते हैं कि एक URL पर कई वेबसाइटें हों।
द वंडरर

@ Zacharee1 वे केवल एक डोमेन की जरूरत है, और उप डोमेन कर सकते हैं। यदि वे ऐसा करने से इनकार करते हैं, तो उन्हें बुराई आईपी-आधारित विधि करनी होगी, जो कि उनके द्वारा उपयोग किए जा रहे एप्लिकेशन / प्रोजेक्ट के प्रकार के आधार पर 'सबफ़ोल्डर' स्थान विधियों का समर्थन करने में सक्षम नहीं हो सकता है।
थॉमस वार्ड

@ThomasW। मैं सोच रहा था कि उप डोमेन एक विकल्प नहीं होगा
TheWanderer

जवाबों:


17

इसे प्राप्त करने के दो तरीके हैं। या तो आप सब कुछ आईपी पते से करते हैं, सबफ़ोल्डर स्थानों के साथ, या आपको एक डोमेन खरीदने की आवश्यकता होगी और फिर उस डोमेन पर कई उप-डोमेन होंगे (यदि डोमेन खरीदते हैं तो उप डोमेन में कुछ भी खर्च नहीं होना चाहिए, लेकिन अपने रजिस्ट्रार से जांच लें)।

मैं आईपी-एड्रेस पद्धति की सलाह नहीं देता, यदि केवल इसलिए कि आईपी पते को याद रखना बहुत बुरा है, और यदि आप दूसरों को जानकारी साझा करने का प्रयास करते हैं, तो आपको दूसरों की भी यही समस्या है कि आईपी पते को याद रखें।


एक डोमेन नाम के बिना एक-आईपी, कई सबफ़ोल्डर्स दृष्टिकोण

नोटिस! आपके पास अपनी परियोजनाओं के बारे में कोई जानकारी नहीं है। हमें यह निर्धारित करने के लिए और अधिक जानने की आवश्यकता है कि क्या आप इस दृष्टिकोण को कर सकते हैं, क्योंकि कई वेब फ्रेमवर्क एक सच्चे डोमेन नाम के बिना काम नहीं करेंगे।


चेतावनी : इन उदाहरणों के चल रहे परीक्षण में, यह पता चला कि "एक डोमेन, कई उपनिर्देशिकाएं" दृष्टिकोण कृपया बैकएंड पर डेटा को रिवर्स-प्रॉक्सिंग करने के लिए नहीं लेते हैं, क्योंकि अनुरोध किए गए यूआरआई में उपनिर्देशिका शामिल होंगे; इससे बैकएंड सर्वर को ठीक से व्यवहार करने में समस्या हो सकती है।

पर nginxएक IP पता, कई docroots और सबफ़ोल्डर स्थानों - पक्ष, हम इस के लिए एक 'बुराई' दृष्टिकोण की ज़रूरत है। यह एक बहुत ही दुष्ट दृष्टिकोण है और कुछ वेब फ्रेमवर्क के साथ बहुत सारी समस्याएं पैदा कर सकता है।

एक डिफ़ॉल्ट nginxइंस्टॉल को रिपॉजिटरी से आधार के रूप में मानते हुए , फिर हमें प्रत्येक प्रोजेक्ट उपनिर्देशिका अनुरोध को संभालने के लिए साइट कॉन्फ़िगरेशन बनाना होगा। फिर हमें इसे सही स्थान पर सिमिल करना होगा।

/etc/nginx/sites-available/my-projectsनिम्नलिखित के साथ बनाएं (इसे टेम्पलेट / मार्गदर्शिका के रूप में उपयोग करें - यह स्थैतिक HTML के साथ तीन परियोजनाओं को मानता है और पीएचपी या अजगर या समान में कोई गतिशील वेब अनुप्रयोग नहीं है, और आप अलग-अलग स्थान ब्लॉक की प्रतिलिपि बना सकते हैं और तदनुसार नए स्थान बना सकते हैं; यह आपके भी मानता है सर्वर आईपी 1.2.3.4) है।

server {
    listen 80 default_server;

    server_name 1.2.3.4;

    location / {
        return 410;  # Default root of site won't exist.
    }

    location /proj1/ {
        alias /var/www/proj1;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }

    location /proj2/ {
        alias /var/www/proj2;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }

    location /proj3/ {
        alias /var/www/proj3;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }
}

अब हम डिफॉल्ट कॉन्फिगर को हटाते हैं (इसे हटाते हैं) और अपना जोड़ते हैं:

sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled

और फिर nginxसेवा को फिर से शुरू करें :

# If on 14.04, use this:
sudo service nginx restart

# If on 15.10 or newer, use this:
sudo systemctl restart nginx

एक-डोमेन, कई उप-डोमेन पहुंचते हैं।

यह उत्तर अनुभाग मानता है कि आपके पास एक डोमेन और कई उप डोमेन हैं। यदि आपके पास यह नहीं है, तो कृपया अपने प्रश्न में इसे स्पष्ट करें

nginx server {}कॉन्फ़िगरेशन में प्रत्येक ब्लॉक के साथ , आपको सर्वर नाम को परिभाषित करने की आवश्यकता होगी, और चौथे सर्वर ब्लॉक को अन्य अनुरोधों के लिए 'कैच ऑल' के रूप में सेट करने की आवश्यकता होगी।

उदाहरण: मैं तीन परियोजनाओं है, proj1, proj2, proj3। मेरे पास एक डोमेन है evil-projects.net(नोट: वास्तव में मौजूद नहीं है)। मुझे तीन अलग-अलग उप-डोमेन चाहिए, प्रत्येक nginxकॉन्फ़िगरेशन के लिए एक जो प्रत्येक प्रोजेक्ट को इंगित करेगा। मेरा सर्वर 1.2.3.4 पर रहता है, और यह सभी साइटों की सेवा करेगा।

उपरोक्त परिदृश्य के साथ, हमारे पास दो भाग हैं: डोमेन और उप डोमेन, और सर्वर कॉन्फ़िगरेशन।

(1): DNS कॉन्फ़िगरेशन

अपने DNS को अपने होस्ट पर सेट करें जैसे कि DNS रिकॉर्ड्स के साथ निम्नलिखित सही है:

evil-projects.net  IN A  1.2.3.4
proj1.evil-projects.net  IN A  1.2.3.4
proj2.evil-projects.net  IN A  1.2.3.4
proj3.evil-projects.net  IN A  1.2.3.4

(2): सर्वर पर NGINX कॉन्फ़िगरेशन (1.2.3.4)

अब आपके nginxविन्यास के लिए। मैं मान रहा हूं कि आपके पास डिफ़ॉल्ट नगनेक्स सेटअप और रिपोजिटरीज़ से पैकेज हैं (मैं एक आधार उदाहरण के रूप में 14.04 का उपयोग करने जा रहा हूं)। हम चार कॉन्फ़िगरेशन फ़ाइल /etc/nginx/sites-availableपहले डालेंगे। इन फ़ाइलों को बनाते समय आपको उपयोग करने की आवश्यकता हो सकती है sudo, क्योंकि प्रश्न में फ़ोल्डर स्वामित्व में है root

/etc/nginx/sites-available/catch-all- यह किसी भी नॉनवैलिड डोमेन के लिए 'कैच ऑल' होगा। मुझे http एरर कोड 410 (GONE) वापस करना पसंद है।

server {
    listen 80 default_server;

    server_name _;

    return 410;
}

अगला, हम आपकी साइटों / परियोजनाओं के लिए कॉन्फ़िगरेशन सेट करते हैं। मैं मान रहा हूँ कि वे सभी स्थिर फाइलें हैं, हालांकि। इनमें से प्रत्येक का अर्थ है कि आपके पास सर्वर पर प्रत्येक परियोजना के लिए अलग-अलग वेब निर्देशिकाएं हैं (अलग-अलग 'दस्तावेज़ रूट')।

/etc/nginx/sites-available/proj1.evil-projects.net:

server {
    listen 80;

    server_name proj1.evil-projects.net;

    root /var/www/proj1;
    index index.htm index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

/etc/nginx/sites-available/proj2.evil-projects.net:

server {
    listen 80;

    server_name proj2.evil-projects.net;

    root /var/www/proj2;
    index index.htm index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

/etc/nginx/sites-available/proj3.evil-projects.net:

server {
    listen 80;

    server_name proj3.evil-projects.net;

    root /var/www/proj3;
    index index.htm index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

फिर हमें 'डिफ़ॉल्ट' कॉन्फ़िगरेशन को निकालना होगा /etc/nginx/sites-enabled, और अपना स्वयं का जोड़ना होगा। फिर से, sudoयहाँ की जरूरत है।

sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/proj1.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj2.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj3.evil-projects.net /etc/nginx/sites-enabled/

और फिर हम इस nginxप्रक्रिया को फिर से शुरू करते हैं:

# If on 14.04, use this:
sudo service nginx restart

# If on 15.04 or newer, use this:
sudo systemctl restart nginx

एक बार DNS के प्रचार के बाद, साइटें वैसी ही काम करेंगी, जैसी उन्हें करनी चाहिए।


इस कॉन्फ़िगरेशन में आप प्रॉक्सी_चेचे के लिए ब्लॉक कहाँ रखेंगे? मान लीजिए कि proj1, proj2, proj3 में सभी समान समापन बिंदु हैं, विभिन्न जड़ों के साथ, और अलग-अलग फ़ोल्डरों पर प्रतिक्रिया को कैश करना चाहते हैं।
user305883

@ user305883 लगता है कि एक नया सवाल है।
थॉमस वार्ड

एक आईपी, कई उप फ़ोल्डर्स दृष्टिकोण बिल्कुल वही है जो मैं करना चाहता हूं। हालाँकि, मुझे यह काम करने के लिए नहीं मिल सकता है। मैंने अपने आईपी के लिए कोड को बिल्कुल बदल दिया और server_name बदल दिया। मेरे पास स्थानों पर 3 बुनियादी index.html फाइलें / var / www / proj1 और / var / www / proj2 और / var / www / proj3 हैं जहां अनुमतियाँ 755 पर सेट की गई हैं। लेकिन जब मैं myip / proj1 पर नेविगेट करता हूं तो मैं देखता हूं। एक ही 410 पृष्ठ के रूप में अगर मैं नहीं / proj1 गुजरती हैं। क्या गलत हो रहा है? यह 2020 है और मैं Nginx 1.10.3 का उपयोग कर रहा हूं - क्या सिंटैक्स बदल गया है?
SLater01

@ SLater01 सिंटैक्स समान रहता है, लेकिन आपको इसके लिए अपना प्रश्न पूछने की आवश्यकता है क्योंकि यह इस उत्तर के लिए एक पूरी तरह से अलग मुद्दा है, और टिप्पणियों की तुलना में बहुत अधिक समय / प्रयास / विवरण की आवश्यकता है। हालाँकि, आपको संभवतः उस अनुभाग में अच्छा बड़ा पीला बॉक्स पढ़ने की आवश्यकता है जो यह दर्शाता है कि अधिकांश वेबसाइट / सेवाएं उस तरह का व्यवहार नहीं करती हैं, इसलिए यह एक उपनिर्देशिका और रूट डोमेन से बाहर नहीं किया जाएगा।
थॉमस वार्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.