Ho un server nginx che serve quasi mezza dozzina di siti Web diversi. Funziona su un Linode che ha appena ottenuto il supporto nativo IPv6 (Dallas Data Center) e sto cercando di configurare la maggior parte dei miei siti per operazioni dual-stack. Ho installato e funzionante il primo utilizzando un sottodominio solo IPv6 in questo modo:
server {
listen [::]:80 ipv6only=on;
listen 80;
server_name example.com ipv6.example.com;
root /var/www/example.com/htdocs;
#More stuff, including PHP, WordPress
}
Funziona benissimo: example.com è solo IPv4 (per ora) e ipv6.example.com è solo IPv6 (principalmente lì a scopo di test). Posso ping6 ipv6.example.com
, e anche wget ipv6.example.com
senza sudare, questo è stato piacevolmente indolore (dopo aver trovato il "gotcha" con il modo in cui nginx lega gli host virtuali, richiedendo l' ipv6only=on
argomento e le doppie listen
direttive).
Tuttavia, ora sto cercando di espandere questo per supportare i miei altri domini, a partire da static.example.com; quando adotto lo stesso approccio di cui sopra, però (le doppie listen
direttive, incluso l' ipv6only=on
argomento), quando riavvio nginx ricevo il seguente errore:
* Starting Nginx Server...
nginx: [emerg] a duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/example.com.conf:3
Sembra che forse il metodo di nginx di associazione per IPv6 non consenta host virtuali basati sul nome? Dovrò ottenere ulteriori indirizzi IPv6 dal mio host (non un problema) e utilizzare l'hosting virtuale basato su IP su IPv6 con l'hosting virtuale basato su nomi su IPv4? O mi manca una soluzione che consenta alle mie configurazioni di rimanere coerenti su entrambi gli stack?
Speravo di avere il mio sito completamente sullo stack IPv6 in tempo per la Giornata mondiale IPv6 , ma a meno che non riesca a chiarire rapidamente ciò, potrei non essere pronto. Non è un grosso problema dal punto di vista pratico - nessuno dei miei siti si qualifica come una "grande organizzazione" da qualsiasi tratto dell'immaginazione - ma mi aiuta a salvare il mio credito geek!
Modificato per aggiungere:
Grazie alla risposta di @kolbyjack, ora ho un web server dual-stack perfettamente funzionante. Per motivi di chiarezza, sto modificando la soluzione che mi ha dato in modo che tutti possano vedere chiaramente quale sia la risposta.
Il mio vhost catchall predefinito ha le seguenti listen
direttive:
listen 80 default_server;
listen 8080 default_server;
listen [::]:80 default_server ipv6only=on;
listen [::]:8080 default_server ipv6only=on;
Non so se l'ordine conta, ma è così. Quindi, ogni vhost aggiuntivo ha le seguenti listen
direttive:
listen 80;
listen [::]:80;
(O 8080 per quello che invece ascolta su quella porta.) La parte importante qui sembra essere la totale mancanza di argomenti aggiuntivi su tutti tranne le listen
direttive del vhost predefinito - cioè nessuna ripetizione di ipv6only=on
.
Ancora una volta, grazie a @kolbyjack per la soluzione qui!
ipv6only=on
. Tutto il resto è rimasto lo stesso, grazie per questo!