IIS में "सर्वर रखरखाव" पृष्ठ पर सभी * HTTP / HTTPS अनुरोधों को अस्थायी रूप से पुनर्निर्देशित करें


10

हमें एक IIS सर्वर मिला है जो सैकड़ों अलग-अलग वेब एप्लिकेशन होस्ट करता है, और इन ऐप्स को होस्ट करने वाला भौतिक डेटाबेस सर्वर संक्षिप्त अवधि के लिए रखरखाव के लिए ऑफ़लाइन लिया जा रहा है (हम इसे 15 मिनट से कम समय लेने की उम्मीद करते हैं)।

उस अवधि के दौरान, हम किसी भी वेबसाइट के लिए "अभी हम रखरखाव कर रहे हैं" पृष्ठ पर आने वाले सभी ट्रैफ़िक को पुनर्निर्देशित करना चाहते हैं।

मुझे लगता है कि मैं ऐसा हर वेब ऐप पर जाकर कर सकता हूं, और एक IIS रीराइट नियम स्थापित कर सकता हूं जो उपयोगकर्ता को उस ऐप के सभी अनुरोधों के लिए दूसरे पेज पर भेजता है। लेकिन, हमें डेटाबेस रखरखाव करने के लिए इसे करने में अधिक समय लगेगा!

मैंने तीन चीजों की कोशिश की है, जिनमें से कोई भी काम नहीं किया है:

वैश्विक IIS सुधार नियम

मैं सभी साइटों के लिए एक नियम लागू करने के लिए एक सरल तरीका खोज रहा हूं , एक झपट्टा में गिर गया - और फिर समान रूप से दर्द रहित चरण में उस नियम को "पूर्ववत" करने में सक्षम हो। अब तक, मेरे किसी भी प्रयास ने काम नहीं किया है। मैंने अपने वैश्विक web.config में W: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ web.config पर इस पुनर्लेखन नियम को डालने का प्रयास किया:

<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="redirect all requests" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
                    </conditions>
                    <action type="Redirect" url="http://www.somedomain.com/maintenance" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

यह काम नहीं किया। हम IIS में .NET 4.0 64 बिट चला रहे हैं, लेकिन "बस के मामले में" मैंने 32 बिट और 2.0 वैश्विक web.config फ़ाइलों को एक ही चीज़ में रखा है, और अभी भी कोई बदलाव नहीं हुआ है।

App_Offline.htm "विशेष फ़ाइल"

एक अन्य सुझाव जो मैंने देखा है वह app_offline.htm "विशेष" फ़ाइल है , लेकिन हम इसे उसी मुद्दे को वापस ले रहे हैं जिससे इस फ़ाइल को हमारे सभी ऐप्स के ऐप रूट पर तैनात करने में अधिक समय लगे, क्योंकि यह वास्तव में रखरखाव करेगा।

IIS में "हम ऑफ़लाइन हैं" साइट

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

रखरखाव के दौर से गुजरने पर उस साइट को शुरू करें और समाप्त होने पर उसे रोक दें।

लेकिन, यह काम करने में मैं सक्षम नहीं था, क्योंकि IIS कम विशिष्ट से पहले अधिक विशिष्ट साइट पर एक HTTP अनुरोध से मेल खाता लगता है। इसलिए, इस "यह बताएं कि हम ऑफ़लाइन हैं" साइट के लिए होस्ट-हेडर मान को छोड़ कर, यह तब तक मेल नहीं खाता, जब तक कि अनुरोध में होस्ट-हेडर मान नहीं होता जो किसी अन्य साइट से मेल खाता हो। जो हमें प्रत्येक वेब ऐप पर मैन्युअल रूप से जाने और उसे ऑफ़लाइन लेने के लिए एक क्रिया करने की एक ही समस्या पर वापस रखता है और जब हम रखरखाव के साथ करते हैं तो इसे ऑनलाइन वापस करते हैं।

क्या इसे पूरा करने का एक सरल तरीका है? ऐसा लगता है कि निश्चित रूप से हम इस मुद्दे का सामना करने वाले पहले नहीं हैं।

-जोश


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

जिस तरह से हम आम तौर पर इस btw करते हैं वह सर्वर के सामने एक उपकरण पर एक क्षमा पृष्ठ होना चाहिए, जैसे एक लोड बैलेंसर।
फोएबस

जवाबों:


6

मैं आपके तीसरे दृष्टिकोण के साथ जाऊंगा "We're offline" Site in IIS, आप इसे नाम दें Offline, अगर इसका कोई होस्ट हैडर निर्दिष्ट नहीं है, तो यह उन सभी अनुरोधों को पूरा करेगा जो किसी भी अन्य साइटों द्वारा नहीं उठाए गए हैं जिनके पास एक मिलान होस्ट हैडर है। इसे रोकने के लिए आप अन्य सभी साइटों को बंद कर दें।

मान लें कि आपके पास IIS स्क्रिप्टिंग स्थापित है, एक उन्नत PowerShell खोलें:

import-module webadministration

अब आप ऑफ़लाइन एक को छोड़कर सभी साइटों को रोक सकते हैं:

Get-ChildItem IIS:\Sites | Where {$_.Name -ne "Offline"} | Stop-WebSite

जब SQL- सर्वर का बैकअप होता है, तो उन्हें फिर से शुरू करें:

Get-ChildItem IIS:\Sites | Where {$_.Name -ne "Offline"} | Start-WebSite

यदि आपके पास एफ़टीपी साइटें भी हैं, तो कमांड एक त्रुटि दिखाएगी क्योंकि आप एफ़टीपी साइट को स्टॉप-वैबसाइट cmdlet में पाइप नहीं कर सकते हैं, लेकिन यह अभी भी सभी वेब साइटों के लिए काम करता है।

यदि आपके पास ऐसी साइटें हैं जो सामान्य रूप से नहीं चलती हैं, तो आपको उन्हें दूसरी कमांड में बाहर करना होगा, जैसे:

Where {$_.Name -ne "Offline" -and $_.Name -ne "foobar.com"}

यदि आपके पास IIS स्थापित के लिए PowerShell cmdlets नहीं है, तो आप ऐसा करने के लिए appcmd.exe का उपयोग कर सकते हैं, हालांकि मैंने वर्षों में इसका उपयोग नहीं किया है।


2

हमारी सभी साइटें एक ही आईपी के साथ IIS में सेटअप हैं।

1) एक पुराना डेस्कटॉप लें, लाइव लिनक्स डिस्ट्रो चलाएं, इसे आईआईएस बॉक्स की तरह ही आईपी दें, इसे नेटवर्क से कनेक्ट करें

2) लाइव लिनेक्स बॉक्स पर नगीनेक्स को आग लगा दें, और आप जैसा चाहें डाउनटाइम पेज बनाएं, उर लैपटॉप से ​​जुड़े ऑफ़लाइन स्विच / हब का उपयोग करके इसका परीक्षण करें

3) IIS बॉक्स ईथरनेट केबल को अनप्लग करें, और इसे लाइव लिनक्स बॉक्स में प्लग करें।

4) स्विच (या रोल पावर) पर स्पष्ट मैक एड्रे कैश। आपकी डाउनटाइम साइट अब लाइव है।


0

Apache स्थापित करें और निम्नलिखित की तरह वर्चुअल होस्ट बनाएं path\to\apache\conf\extra\httpd-vhosts.conf:

<VirtualHost *:80>
    DocumentRoot C:/Apache/htdocs
    ServerName anyname.net

    # Other directives here
</VirtualHost>

फिर उपरोक्त सेटिंग में निर्दिष्ट दस्तावेज़ रूट में, एक ऑफ़लाइन संदेश के साथ एक index.html फ़ाइल बनाएँ।

निम्नलिखित कदम बहुत महत्वपूर्ण है, आपको अपाचे चलाने से पहले पोर्ट 80 का उपयोग करने वाली सभी सेवाओं को रोकना होगा। आप इस लिंक पर उनमें से अधिकांश की एक सूची पा सकते हैं


0

मुझे पता है कि यह पुराना है, लेकिन मुझे यह सिर्फ एक पुराने विंडोज 2008 आर 2 बॉक्स पर करना था। यह प्रश्न शीर्षक के लिए एक उत्तर अधिक है; प्रश्न विस्तार के बारे में, यह "आईआईएस में ऑफ़लाइन साइट " स्थापित करने के लिए बस एक दृष्टिकोण है ।

यह IIS और स्थिर HTML से अधिक कुछ पर निर्भर नहीं करता है। IIS की "HTTP रीडायरेक्ट" कार्यक्षमता वह नहीं है जो आप चाहते हैं, लेकिन इसका अनुकरण करने का एक और तरीका है। रखरखाव पृष्ठ को इंगित करने के लिए साइट के लिए बस "त्रुटि पृष्ठ" सभी को बदल दें। हां, यह तभी काम करता है जब आप IIS में संपूर्ण "साइट" का उपयोग कर सकते हैं।

मेरे मामले में, साइट के रूट फ़ोल्डर में एक एकल "default.htm" फ़ाइल है (उदाहरण के लिए c: \ InetPub \ wwwroot)। तो सब "त्रुटि पृष्ठ" के लिए कॉन्फ़िगर कर रहे हैं "इस साइट पर एक यूआरएल निष्पादित" और पथ "/default.htm" का उपयोग करें। चूंकि मैं फ़ाइल में निरपेक्ष URL (अर्थात "/" से शुरू करता हूं) का उपयोग करता हूं, इसकी सामग्री ब्राउज़र में सही ढंग से निष्पादित होती है, कोई फर्क नहीं पड़ता कि सार्वजनिक URL क्या प्रतीत होता है।

इस कॉन्फ़िगरेशन का शुद्ध परिणाम साइट के सभी अनुरोध हैं / मेरे रखरखाव पृष्ठ की सामग्री की सेवा करते हैं। इससे कोई फर्क नहीं पड़ता कि अनुरोध क्या है।

यह भी जान लें कि IIS रूट फ़ोल्डर में web.config फ़ाइल जनरेट करके इस बदलाव को प्रभावित करेगा। यह वही है जो मेरे लिए बनाया गया है:

 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <system.webServer>
         <httpErrors>
             <remove statusCode="502" subStatusCode="-1" />
             <remove statusCode="501" subStatusCode="-1" />
             <remove statusCode="500" subStatusCode="-1" />
             <remove statusCode="412" subStatusCode="-1" />
             <remove statusCode="406" subStatusCode="-1" />
             <remove statusCode="405" subStatusCode="-1" />
             <remove statusCode="404" subStatusCode="-1" />
             <remove statusCode="403" subStatusCode="-1" />
             <remove statusCode="401" subStatusCode="-1" />
             <error statusCode="401" prefixLanguageFilePath="" path="/default.htm" responseMode="ExecuteURL" />
             <error statusCode="403" prefixLanguageFilePath="" path="/default.htm" responseMode="ExecuteURL" />
             <error statusCode="404" prefixLanguageFilePath="" path="/default.htm" responseMode="ExecuteURL" />
             <error statusCode="405" prefixLanguageFilePath="" path="/default.htm" responseMode="ExecuteURL" />
             <error statusCode="406" prefixLanguageFilePath="" path="/default.htm" responseMode="ExecuteURL" />
             <error statusCode="412" prefixLanguageFilePath="" path="/default.htm" responseMode="ExecuteURL" />
             <error statusCode="500" prefixLanguageFilePath="" path="/default.htm" responseMode="ExecuteURL" />
             <error statusCode="501" prefixLanguageFilePath="" path="/default.htm" responseMode="ExecuteURL" />
             <error statusCode="502" prefixLanguageFilePath="" path="/default.htm" responseMode="ExecuteURL" />
         </httpErrors>
     </system.webServer>
 </configuration>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.