2015-10-05 13 views
6

Sto tentando di ospitare più siti Web in un'unica Web App di Azure anziché avere più app Web che ospitano un sito. Ognuno di questi siti è piuttosto piccolo, ma per soddisfare i requisiti dello SLA con Azure, è necessario che il server sia ridimensionato con più di un'istanza per il nostro ambiente di produzione, quindi il ragionamento per la combinazione dei siti.Sottodominio mappa nella directory virtuale Azure WebApps

Dopo aver esaminato questo argomento, ho ottenuto la seguente configurazione con il nostro account di Azure.

  1. Creati i record DNS CNAME corretti nel nostro gestore zone (completo e funzionante).
  2. Impostare la Web App di Azure per rispondere ai sottodomini (completa e funzionante).
  3. Setup una directory virtuale per la seconda applicazione web (completa e opere)

A questo punto, entrambe le applicazioni web funziona correttamente ed entrambi i sottodomini puntano a nostra istanza Azure. Ora abbiamo la seguente configurazione:

  • entrambi www.mydomain.com e app.mydomain.com richiamano l'applicazione di root che ho distribuito.
  • andare a www.mydomain.com/app2 e app.mydomain.com/app2 far apparire la seconda applicazione che ho schierato alla directory virtuale

Quello che vorrei realizzare:

  • L'accesso a app.mydomain.com fa apparire l'applicazione nella directory virtuale.
  • L'accesso a www.mydomain.com fa apparire l'applicazione nella radice dell'istanza di Azure.

Tuttavia, quello che non riesco a capire è come mappare un sottodominio in una directory virtuale specifica. Ho tentato di aggiornare l'URL del sito in modo che fosse il sottodominio a cui si desidera che l'applicazione risponda, tuttavia, il sottodominio visualizza ancora ciò che ho nella root della distribuzione WebApp.

Devo avere HttpHandler che si trova nella radice del sito e indirizza il traffico alla directory virtuale corretta? C'è un'impostazione nel portale che mi manca? In precedenza, lo abbiamo fatto con i ruoli Web e il bridging con il file ServiceDefinition, ma i set di strumenti per le app Web di Azure per quanto riguarda la pubblicazione, l'integrazione con il controllo del codice sorgente ecc. Sembrano essere un po 'più avanti.

risposta

12

La risposta inviata da RuslanY funzionerà (con alcune modifiche alle regole leggermente), tuttavia, dopo aver compreso più del portale di Azure e delle configurazioni di app Web, non è necessario ospitare più siti all'interno di una singola app Web (tecnicamente più app Web che condividono il piano delle risorse definito, ad esempio 2 istanze di Standard Level 0 (S0)) *.

A oggi, le offerte di servizi Azure sono le seguenti.Quando si crea una nuova app Web, si specifica il "piano del servizio app" in cui si trova l'app. Se disponi di un piano di servizio app, diciamo Standard con 2 istanze, qualsiasi app Web distribuita a tale piano del servizio app condivide tali risorse con altre app Web nello stesso piano di servizio, il che significa che non stai pagando costi aggiuntivi per ospitare il Web aggiuntivo app se si trova nello stesso piano del servizio app. Avevo assunto che ogni app web fosse il proprio insieme di risorse (può essere, ma non deve essere). Detto questo, per realizzare ciò di cui ho bisogno, creo semplicemente un'app Web per ogni dominio secondario e li inserisco tutti nello stesso piano del servizio app. Ora sto ospitando più siti, non pagando per 2 server per sito (cosa volevo evitare) e non devo usare riscritture di URL o gestori HTTP.

Spero che questo articolo aiuti gli altri a capire meglio la struttura delle app Web di Azure. L'attuale documentazione online, da quello che posso dire, non lo rende esattamente chiaro.

+1

Tommy, hai ragione. Puoi avere molti siti nello stesso piano di servizio app e ti vengono addebitati per il piano di servizio app e le istanze in esso, non per il numero di siti. – RuslanY

4

Questo può essere possibile a che fare con regola di riscrittura URL che prende il nome host della richiesta e riscrive l'URL della richiesta di iniziare con il sottodominio estratto dal nome host:

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="Rewrite Subdomain To Directory"> 
       <match url=".*" /> 
       <conditions> 
        <add input="{HTTP_HOST}" pattern="^www\.mydomain\.com$" negate="true" /> 
        <add input="{HTTP_HOST}" pattern="^(.+)\.mydomain.\com$" /> 
       </conditions> 
       <action type="Rewrite" url="{C:1}/{R:0}" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 

Per comprendere la sintassi della riscrittura regole puoi fare riferimento allo IIS.net documentation about URL rewrite module.

+0

Questo è quello che stavo pensando che potrebbe essere necessario fare anche io, ma speravo che esistesse un modo più "nativo" con la piattaforma Azure, come il modo in cui uno avrebbe affrontato questo problema quando interagiva con IIS direttamente. – Tommy

+1

In IIS, probabilmente finirai per creare un pool di app separato per ogni app. Ma all'interno di una app Web di Azure, non è possibile avere più di un pool di app, quindi è necessario lavorare al suo interno. Quindi direi che quello che stai cercando di risolvere è identico a risolverlo in IIS all'interno di un App Pool, e l'approccio di @ RuslanY è la soluzione migliore. –

+0

Ruslan - Sono stato in grado di scoprire di più sulla configurazione e l'impostazione delle app Web di Azure che consentono ciò che volevo ottenere senza una sovrabbondanza di server. Ho cercato di spiegare nella mia risposta. – Tommy

Problemi correlati