Gestire il cambio di indirizzo IP di un sito web ospitato con Apache

From RVM Wiki
Jump to navigation Jump to search
  • Se si vuole spostare un sito ospitato sulla macchina server-a con ip 1.2.3.4 sulla macchina server-b con il 2.3.4.5, procedere come segue:
  • Impostare il sito sulla macchina A in modalità manutenzione
  • Dalla macchina B, testare una copia dei files:
cd /var/www
sudo env SSH_AUTH_SOCK=$SSH_AUTH_SOCK rsync -e ssh -av root@server-a.example.com:/var/www/example.com . --delete --dry-run
  • Se tutto ok, procedere:
cd /var/www
sudo env SSH_AUTH_SOCK=$SSH_AUTH_SOCK rsync -e ssh -av root@server-a.example.com:/var/www/example.com . --delete
  • Impostare i diritti:
cd example.com
sudo chown root: .
sudo chown root: www/
cd www/
sudo chown -R root: log/
sudo chown -R vsftpd:www-data html/
  • Predisporre l'utenza DB ed il DB nuovo vuoto su server-a, poi procedere alla copia del DB dall amacchina originale:
ssh root@server-a.example.com mysqldump --compact --quick --extended-insert explame_co | mysql -u example_co -p example_co
  • Copiare la definizione del virtualhost:
sudo mkdir -p /etc/apache2/sites-available/example.com && sudo env SSH_AUTH_SOCK=$SSH_AUTH_SOCK scp server-a.example.com:/etc/apache2/sites-available/example.com/* /etc/apache2/sites-available/example.com
  • Abilitarlo:
sudo a2ensite example.com
sudo /etc/init.d/apache2 restart
  • Impostare il file host in locale
sudoedit /etc/hosts
2.3.4.5 www.example.com
  • Verificare di accedere alla nuova macchina:
sudo tail -f /var/www/example.com/www/log/access.log
  • Rimuovere la modifica nel file hosts
  • Sulla macchina B, abilitare il modulo proxy ed headers
sudo a2enmod proxy headers
  • Ridefinire il virtualhost come:
sudoedit /etc/apache2/sites-available/example.com/www.example.com.conf 
<VirtualHost *:80>
	ServerName www.example.com
	ServerAlias example.com
	RequestHeader set Host "www.example.com"
	ProxyPreserveHost On
	ProxyPass / http://2.3.4.5/

	ErrorLog /var/www/example.com/www/log/error.log
	TransferLog /var/www/example.com/www/log/access.log
	ErrorLog /var/log/apache2/error.log
	TransferLog /var/log/apache2/access.log
	CustomLog /var/log/apache2/access_vhosts.log  commonvhosts
</VirtualHost>
  • In pratica sulla vecchia macchina, impostiamo una proxypass, che forza il virtualhost da trasmettere all'ip della nuova macchina.
  • Riavviare Apache
sudo /etc/init.d/apache2 restart
  • Verificare che dai log della vecchia macchina ci sia traffico, e che sulla nuova sia instradata la connessione
  • Rimuovere il files ed il DB dalla vecchia macchina
  • Verificare il funzionamento
  • Disabilitare la modalità manutenzione sul sito sulla nuova macchina
  • Verificare
  • Impostare un TTL di 60 secondi sul DNS e incrementare il SOA
sudoedit /etc/bind/example.com.db 
$ORIGIN .
$TTL 60 ; 1 minute
  • Cambiare l'ip di www.example.com
  • Riavviare bind
sudo /etc/init.d/bind9 restart
  • Verificare il nuovo IP:
host -t a www.example.com
www.example.com has address 2.3.4.5
  • Verificare il TTL sul server dns autoritativo:
dig www.example.com @1.2.3.4
; <<>> DiG 9.7.3 <<>> www.example.com
...
;; QUESTION SECTION:
;www.example.com.                 IN      A
;; ANSWER SECTION:
www.example.com.              60      IN      A       2.3.4.5
  • Il TTL è il secondo valore dell'ultima riga
  • Verificare il TTL sui root servers:
dig +trace diesis.eu
; <<>> DiG 9.7.3 <<>> +trace example.com
;; global options: +cmd
.                       513026  IN      NS      b.root-servers.net.
.                       513026  IN      NS      h.root-servers.net.
.                       513026  IN      NS      d.root-servers.net.
.                       513026  IN      NS      i.root-servers.net.
.                       513026  IN      NS      e.root-servers.net.
.                       513026  IN      NS      g.root-servers.net.
.                       513026  IN      NS      a.root-servers.net.
.                       513026  IN      NS      l.root-servers.net.
.                       513026  IN      NS      f.root-servers.net.
.                       513026  IN      NS      j.root-servers.net.
.                       513026  IN      NS      c.root-servers.net.
.                       513026  IN      NS      m.root-servers.net.
.                       513026  IN      NS      k.root-servers.net.
;; Received 404 bytes from 127.0.0.1#53(127.0.0.1) in 0 ms

eu.                     172800  IN      NS      x.dns.eu.
eu.                     172800  IN      NS      cz.dns.eu.
eu.                     172800  IN      NS      uk.dns.eu.
eu.                     172800  IN      NS      si.dns.eu.
eu.                     172800  IN      NS      nl.dns.eu.
eu.                     172800  IN      NS      y.dns.eu.
;; Received 311 bytes from 192.228.79.201#53(b.root-servers.net) in 165 ms

example.com.            86400   IN      NS      dns1.example.com.
example.com.            86400   IN      NS      dns2.example.com.
;; Received 76 bytes from 194.0.1.19#53(x.dns.com) in 9 ms

example.com.            60      IN      A       1.2.3.4
example.com.            60      IN      NS      dns2.example.com.
example.com.            60      IN      NS      dns1.example.com.
;; Received 92 bytes from 3.4.5.6#53(dns2.example.com) in 39 ms
  • In questo caso il TTL a 60 non si è ancora propagato: attendere quando tutti i TTL saranno 60, e poi si potrà dismettere il vecchio virtualhost con proxypass su server-a

Riferimenti