Prerequisiti e preparazione ambiente
Prima di configurare WordPress Multisite con subdomain su Nginx, è essenziale verificare che l’ambiente soddisfi i requisiti tecnici necessari. La configurazione con subdomain richiede un controllo completo sul DNS e l’accesso root al server.
Requisiti fondamentali:
- Server con Nginx 1.24 o superiore (al 2026 la versione stabile è 1.26)
- PHP 8.2 o 8.3 con PHP-FPM configurato
- MySQL 8.0+ o MariaDB 10.11+
- Accesso DNS per configurare wildcard record
- Certificato SSL wildcard (consigliato Let’s Encrypt con wildcard via DNS challenge)
- WordPress 6.5 o superiore già installato
A differenza della configurazione con subdirectory, il Multisite subdomain crea siti come cliente1.tuodominio.it invece di tuodominio.it/cliente1. Questo approccio è ideale per agenzie che gestiscono siti client con identità separate ma infrastruttura condivisa.
Configurazione DNS wildcard
Il primo step critico è configurare un record DNS wildcard che punti tutti i subdomain al server. Senza questa configurazione, ogni nuovo sito richiederebbe un record DNS manuale.
Nel pannello DNS del tuo provider (Cloudflare, AWS Route53, etc.), aggiungi:
Tipo: A Nome: * Valore: IP_DEL_TUO_SERVER TTL: 300 (o Auto)
Se utilizzi Cloudflare, considera questi aspetti:
- Disabilita temporaneamente il proxy (cloud arancione) durante la configurazione iniziale
- Attiva il proxy solo dopo aver verificato che SSL funzioni correttamente
- Configura una Page Rule per il caching appropriato dei subdomain
- Il certificato SSL Universal di Cloudflare copre automaticamente i wildcard di primo livello
Verifica la propagazione DNS con:
dig test.tuodominio.it +short nslookup test.tuodominio.it
Entrambi i comandi dovrebbero restituire l’IP del tuo server anche per subdomain inesistenti.
Abilitazione WordPress Multisite
Prima di toccare Nginx, abilita la funzionalità Multisite in WordPress. Modifica il file wp-config.php aggiungendo, prima della riga /* That's all, stop editing! */:
define('WP_ALLOW_MULTISITE', true);
Accedi alla dashboard WordPress e vai su Strumenti → Configurazione rete. Seleziona Sottodomini come tipo di rete.
WordPress genererà codice da aggiungere a wp-config.php e .htaccess. Ignora le istruzioni per .htaccess (sono per Apache). Copia invece il codice per wp-config.php:
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'tuodominio.it');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
Sostituisci tuodominio.it con il tuo dominio effettivo.
Configurazione Nginx virtual host
Questa è la parte più critica. La configurazione Nginx per Multisite subdomain deve gestire correttamente il routing delle richieste e i file statici.
Crea o modifica il file /etc/nginx/sites-available/multisite.conf:
server {
listen 80;
listen [::]:80;
server_name tuodominio.it *.tuodominio.it;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name tuodominio.it *.tuodominio.it;
root /var/www/tuodominio.it/public_html;
index index.php index.html;
# SSL Configuration
ssl_certificate /etc/letsencrypt/live/tuodominio.it/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tuodominio.it/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# WordPress Multisite subdomain rewrite
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^(/[^/]+)?(/wp-.*) $2 last;
rewrite ^(/[^/]+)?(/.*\.php) $2 last;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Gestione file upload
location ~* ^/files/(.*)$ {
try_files /wp-content/blogs.dir/$blogid/$uri /wp-includes/ms-files.php?file=$1;
access_log off;
log_not_found off;
expires max;
}
# Cache file statici
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 365d;
add_header Cache-Control "public, immutable";
access_log off;
}
# Blocca accesso a file sensibili
location ~ /\. {
deny all;
}
location ~ ^/wp-content/uploads/.*\.php$ {
deny all;
}
}
Punti chiave della configurazione:
server_nameinclude il wildcard*.tuodominio.itper catturare tutti i subdomain- Le regole rewrite gestiscono il routing specifico di WordPress Multisite
- La sezione
/files/gestisce gli upload nei network con molti siti (pre-3.5) - SSL/TLS configurato con protocolli moderni (solo TLS 1.2+)
- Headers di sicurezza per protezione base
Certificato SSL wildcard con Let’s Encrypt
Per coprire tutti i subdomain con un unico certificato, usa certbot con DNS challenge:
certbot certonly --manual \ --preferred-challenges dns \ --server https://acme-v02.api.letsencrypt.org/directory \ -d tuodominio.it -d *.tuodominio.it
Certbot ti chiederà di creare un record TXT nel DNS. Aggiungi il record come indicato, attendi qualche minuto per la propagazione, poi premi Invio.
Per agenzie che gestiscono molti domini, considera:
- Automazione con plugin DNS di certbot (certbot-dns-cloudflare, certbot-dns-route53, etc.)
- Script di rinnovo automatico ogni 60 giorni
- Monitoring delle scadenze certificati con servizi come monitoring SSL per WordPress
Dopo aver ottenuto il certificato, verifica che i path in Nginx corrispondano a quelli generati da certbot.
Ottimizzazione performance e cache
Con Multisite subdomain che serve potenzialmente centinaia di siti, la cache è critica. Configura FastCGI cache in Nginx:
# Aggiungi nel blocco http di nginx.conf fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WORDPRESS:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri";
Poi nel server block:
set $skip_cache 0;
# POST requests e URL con query string
if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}
# Non cachare wp-admin, carrelli, utenti loggati
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|sitemap(_index)?.xml") {
set $skip_cache 1;
}
if ($http_cookie ~* "wordpress_logged_in|comment_author") {
set $skip_cache 1;
}
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;
Per agenzie con AgencyPilot, la gestione centralizzata della cache è integrata nel pannello di controllo, permettendo di:
- Flush cache per singolo subdomain/sito
- Monitoring hit rate cache per ogni sito del network
- Configurazione automatica delle esclusioni cache
- Alert su performance degradate
Testing e troubleshooting
Dopo aver attivato la configurazione (nginx -t poi systemctl reload nginx), testa sistematicamente:
Checklist di verifica:
- Accedi alla Network Admin di WordPress (https://tuodominio.it/wp-admin/network/)
- Crea un sito di test: https://test.tuodominio.it
- Verifica che il sito sia raggiungibile via HTTPS
- Carica un’immagine e verifica che il percorso sia corretto
- Controlla i log Nginx per errori:
tail -f /var/log/nginx/error.log - Testa permalink diversi dalla struttura plain
Problemi comuni e soluzioni:
- 404 su tutte le pagine del subsito: verifica le regole rewrite Nginx, spesso manca il blocco
if (!-e $request_filename) - CSS/JS non caricano: controlla che la sezione location per file statici non abbia restrizioni eccessive
- Errori SSL: verifica che il certificato wildcard sia installato correttamente e copra *.tuodominio.it
- Immagini rotte: per network pre-WordPress 3.5, verifica la sezione
location ~* ^/files/ - Performance scarse: abilita FastCGI cache e monitora con
add_header X-Cache-Status $upstream_cache_status
Per debug avanzato, abilita temporaneamente log dettagliati:
error_log /var/log/nginx/multisite_debug.log debug;
Gestione a lungo termine
Un network Multisite subdomain richiede manutenzione continua. Best practice per agenzie:
- Backup separati per database network: il database condiviso è un single point of failure
- Monitoring per-site: traccia uptime, performance e errori per ogni subdomain
- Limiti risorse per sito: usa plugin come WP Multi Network Resource Manager per evitare che un sito comprometta l’intero network
- Update strategy: testa plugin/theme update su sito staging prima di applicare al network
- Log rotation: con molti siti, i log Nginx crescono rapidamente
Per agenzie che gestiscono 20+ siti client, soluzioni SaaS come AgencyPilot automatizzano queste attività con dashboard centralizzata per monitoring, backup schedulati per-site, e deploy sicuri degli update.
FAQ
Posso convertire un Multisite subdirectory esistente in subdomain?
Tecnicamente sì, ma è complesso e rischioso. Richiede modifica del database (tabelle wp_blogs, wp_site, serialized data nelle options), redirect 301 di tutti gli URL, e nuova configurazione DNS/Nginx. Per network con molti contenuti, è più sicuro migrare manualmente i siti uno per uno. Se necessario, usa plugin come Multisite Migration o considera assistenza professionale.
Quanti siti può gestire un Multisite subdomain su Nginx?
Il limite non è nel Multisite stesso ma nelle risorse server. Con configurazione ottimizzata (FastCGI cache, object cache con Redis, CDN), un server dedicato con 8GB RAM e 4 core può gestire 50-100 siti a traffico medio (10k visite/mese ciascuno). Oltre quella scala, considera cluster con load balancing o separazione in più network. Monitoring costante è essenziale per identificare bottleneck.
Come gestisco SSL per custom domain mappati a subsiti?
Per permettere ai client di usare domini custom (es. clientedominio.com che punta a cliente.tuodominio.it), usa plugin come Mercator o WordPress MU Domain Mapping. Lato Nginx, aggiungi i domini custom al server_name e ottieni certificati separati per ciascuno. Automatizza con certbot hooks che aggiornano Nginx e ricaricano la configurazione. AgencyPilot include automazione SSL per custom domain con provisioning automatico.
Nginx restituisce errore 413 su upload grandi, come risolvo?
L’errore 413 (Request Entity Too Large) indica limiti su dimensione upload. Modifica tre configurazioni: 1) In Nginx, aggiungi client_max_body_size 64M; nel server block; 2) In php.ini o php-fpm pool, aumenta upload_max_filesize = 64M e post_max_size = 64M; 3) In WordPress wp-config.php, definisci define('WP_MEMORY_LIMIT', '256M');. Riavvia PHP-FPM e ricarica Nginx.
È meglio Multisite subdomain o installazioni WordPress separate?
Dipende dal caso d’uso. Multisite subdomain è ideale per: siti client con requisiti simili, gestione centralizzata di plugin/theme, un solo team di sviluppo. Installazioni separate sono preferibili per: siti con requisiti molto diversi, clienti che richiedono accesso root, necessità di isolare completamente i dati per compliance. Per agenzie, Multisite riduce overhead operativo ma richiede più competenza tecnica iniziale.