Nello script precedente (https://www.aspitalia.com/script/1289/Usare-NGINX-Reverse-Proxy-ASP.NET-Core.aspx) abbiamo visto come sfruttare Docker Compose per creare automaticamente un'istanza di NGINX e configurarla come reverse proxy sulla nostra applicazione. Uno dei vantaggi di questo approccio è quello riassunto dalla figura in basso, vale a dire la possibilità di avere più applicazioni associate a diversi path dello stesso indirizzo.
Cerchiamo di capire come procedere.
L'idea generale è quella di modificare la configurazione di NGINX per associare a ogni applicazione una particolare location:
... location /first { proxy_pass http://myFirstApp; ... } location /second { proxy_pass http://mySecondApp; ... } }
Se ci limitassimo solo a questo, però, la nostra applicazione ASP.NET Core non funzionerebbe correttamente: questo perché NGINX per default effettua il forward dell'intera path, e quindi riceveremmo un URL del tipo "/first/home/index" mentre il routing di myFirstApp si aspetta qualcosa come "/home/index". Fortunatamente ASP.NET Core può facilmente gestire questo caso d'uso agendo sulla classe Startup:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { string basePath = Configuration.GetValue<string>("basePath"); if (!string.IsNullOrEmpty(basePath)) { app.UsePathBase(basePath); } // ... altro codice qui ... app.UseMvc(); }
Il codice in alto recupera una stringa basePath dalla configurazione, che poi imposteremo a "/first" o "/second" a seconda dell'applicazione, e successivamente invoca il metodo UsePathBase. Quest'ultimo installa un middleware che si occupa di:
- trasformare il path della richiesta da /first/home/index in /home/index, come ci aspettiamo;
- modificare i redirect e i link generati dalle nostre view da /home/index in /first/home/index.
Come ultimo passo, non resta che configurare i basePath delle due applicazioni e, dato che stiamo usando Docker, il modo più immediato è tramite environment variable, come abbiamo visto in uno script precedente (https://www.aspitalia.com/script/1275/Configurazione-Tramite-Environment-Variable-ASP.NET-Core.aspx). La versione finale del file docker-compose.yml sarà simile alla seguente:
version: '3' services: myFirstApp: image: myFirstApp build: context: . dockerfile: myFirstApp/Dockerfile environment: - basePath=/first mySecondApp: image: mySecondApp build: context: . dockerfile: mySecondApp/Dockerfile environment: - basePath=/second myserver: image: myserver build: context: . dockerfile: nginx/Dockerfile depends_on: - myFirstApp - mySecondApp ports: - 8080:80
Se abbiamo svolto i passaggi correttamente vedremo le due applicazioni rispondere agli indirizzi /first e /second, come ci aspettiamo:
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Semplificare il deployment di siti statici con Azure Static Web App
Usare le variabili per personalizzare gli stili CSS
Disabilitare automaticamente un workflow di GitHub
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Creare moduli CSS in React
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Short-circuiting della Pipeline in ASP.NET Core
Determinare lo stato di un pod in Kubernetes
Implementare il throttling in ASP.NET Core
Utilizzare i primary constructor in C#
Usare il versioning con i controller di ASP.NET Core Web API
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
I più letti di oggi
- Nuova versione per jQuery e prima alpha per jQuery Mobile
- Paginare i risultati con QuickGrid in Blazor
- Utilizzare il trigger SQL con le Azure Function
- Eliminare una determinata proprietà da un oggetto JavaScript
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Modern web apps with Blazor