Incrementare le prestazioni di Apache con mod pagespeed: differenze tra le versioni

Nessun oggetto della modifica
 
(15 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Squeeze}}  
{{Versioni compatibili|Stretch|Buster|Bullseye}}
__TOC__  
__TOC__
== Introduzione ==
==Introduzione==
I Google Labs hanno recentemente rilasciato un modulo per il Web server Apache che permette l’ottimizzazione automatica di pagine Web e altre risorse attraverso l’azione di appositi filtri per la riscrittura e fornendo così maggiore velocità di caricamento di tutto il codice HTML, CSS, JavaScript e delle immagini senza rendere necessario alcun intervento manuale sul server. Il modulo non agisce sul codice ''lato server'', quindi non deve essere visto come una possibile soluzione per migliorare script PHP mal riusciti o per velocizzare query SQL non ottimizzate.
PageSpeed è un modulo per il web server Apache2 che permette l’ottimizzazione automatica di pagine Web e altre risorse attraverso l’uso di appositi filtri per la riscrittura delle pagine web al fine di diminuire il tempo di latenza di caricamento delle pagine. Alcuni filtri alterano semplicemente il contenuto HTML, per esempio rimuovendo l'eccesso di spazi bianchi, attributi non necessario o attributi che sarebbero ignorati dal browser. Altri filtri invece cambiano i riferimenti ai file CSS, JavaScript o le immagini al fine di fornire una versione ottimizzata in quanto di peso minore, vengono combinati più files in uno e viene esteso il tempo di vita della cache. Tutto questo viene fatto in modo automatico senza rendere necessario alcun intervento manuale sul server
<br/>
Il modulo in questione è distribuito sotto licenza [http://www.apache.org/licenses/LICENSE-2.0 Apache 2.0], ma non è incluso nei repository ufficiali Debian a causa dell'utilizzo in bundle di alcune librerie; per una spiegazione delle motivazioni che hanno portato all'esclusione del modulo dai repository Debian si veda ad esempio il seguente [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=602316 bug report].


== Installazione ==
Il modulo non agisce sul codice ''lato server'', quindi non deve essere visto come una possibile soluzione per migliorare script PHP mal riusciti o per velocizzare query SQL non ottimizzate.
I Google Labs forniscono un pacchetto DEB di ''mod_pagespeed'' per Debian Squeeze, sia a 32 bit, sia a 64 bit. Il pacchetto può essere scaricato a questo indirizzo:
 
<br/>
I filtri sono eseguiti sempre in un ordine pre-definito, ma si può scegliere quali abilitare o disabilitare nel file di configurazione.
[https://developers.google.com/speed/pagespeed/module]<br/>
 
Una volta scaricata l'ultima versione del pacchetto, lo possiamo installare nella consueta maniera:
Il modulo in questione è distribuito sotto licenza [http://www.apache.org/licenses/LICENSE-2.0 Apache 2.0], ma non è incluso nei repository ufficiali Debian a causa dell'utilizzo in bundle di alcune librerie<ref>per una spiegazione delle motivazioni che hanno portato all'esclusione del modulo dai repository Debian si veda, ad esempio, il seguente [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=602316 bug report]</ref>.
==Installazione==
I Google Labs forniscono un pacchetto DEB di ''mod_pagespeed'' per Debian, sia a 32 bit, sia a 64 bit. Il pacchetto può essere scaricato a questo indirizzo:
<br />
https://developers.google.com/speed/pagespeed/module
 
Oppure con il seguente comando
<pre>
# wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb
</pre>
Una volta scaricata l'ultima versione del pacchetto:<ref>[https://www.modpagespeed.com/doc/download pagina per il download] </ref>
 
lo possiamo installare tramite [[gdebi]], installandolo se occorre:
<pre>
# gdebi mod-pagespeed-*.deb
</pre>
{{Box | Senza gdebi |
Al posto di <code>gdebi</code> si può utilizzare anche [[dpkg]]:
<pre>
<pre>
# dpkg -i mod-pagespeed-*.deb
# dpkg -i mod-pagespeed-*.deb
# apt-get -f install
# apt-get -f install
</pre>
</pre>
Quindi abilitiamo il modulo e riavviamo Apache:
Gdebi è comunque consigliato perché scarica e prova a installare le dipendenze prima di installare il pacchetto.
}}
Il modulo sarà abilitato automaticamente su Apache, ma per attivarlo è necessario riavviare Apache con
<pre>
<pre>
# a2enmod pagespeed
# systemctl reload apache2
# /etc/init.d/apache2 restart
</pre>
</pre>
L'installazione configura anche un file all'interno della directory <code>/etc/apt/sources.list.d</code>, abilitando un [[repository]] esterno per gli aggiornamenti automatici del modulo.
L'installazione configura anche un file all'interno della directory <code>/etc/apt/sources.list.d</code>, abilitando un [[repository]] esterno per gli aggiornamenti automatici del modulo.
 
{{Suggerimento|Nel caso in cui un <code>apt-get update</code> fornisca un errore di file Release non firmato a seguito dell'aggiunta del [[repository]] di pagespeed
== Configurazione ==
<pre>W: GPG error: http://dl.google.com/linux/mod-pagespeed/deb stable Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 78BD65473CB3BD13
E: The repository 'http://dl.google.com/linux/mod-pagespeed/deb stable Release' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.</pre>
Si può risolvere velocemente il problema aggiungendo le chiavi [[GPG]] dei [[repository]] google.
<pre># cd /etc/apt/trusted.gpg.d
# wget -O google-archive.pub https://dl-ssl.google.com/linux/linux_signing_key.pub</pre>
ed infine aggiornare nuovamente l'elenco dei pacchetti sempre con un <code>apt-get update</code>}}
== Configurazione==
Dopo l'installazione, può essere utile apportare alcune modifiche alla configurazione del modulo, agendo sul suo file di configurazione principale:
Dopo l'installazione, può essere utile apportare alcune modifiche alla configurazione del modulo, agendo sul suo file di configurazione principale:
<pre>
<pre>
# nano /etc/apache2/mods-available/pagespeed.conf
# nano /etc/apache2/mods-available/pagespeed.conf
</pre>
</pre>
All'inizio del file dovremmo trovarci le righe:
All'inizio del file si dovrebbe trovare le seguenti righe:
<pre>
<pre>
<IfModule pagespeed_module>
<IfModule pagespeed_module>
SetOutputFilter
    # Turn on mod_pagespeed. To completely disable mod_pagespeed, you
MOD_PAGESPEED_OUTPUT_FILTER
    # can set this to "off".
  ModPagespeed on
    ModPagespeed on
</pre>
</pre>
che indicano che il modulo è attivo. Se al contrario ci fosse la direttiva ''ModPagespeed off'', cambiamola a ''on'' per attivarlo.
che indicano che il modulo è attivo. Se al contrario ci fosse la direttiva ''ModPagespeed off'', si può cambiarla ad ''on'' per attivarlo.
<br/>
 
Poco dopo dovremmo trovare la direttiva:
Poco dopo si dovrebbe trovare la direttiva:
<pre>
<pre>
# ModPagespeedRewriteLevel CoreFilters
    # ModPagespeedRewriteLevel PassThrough
</pre>
</pre>
Decommentiamola, per attivare i filtri predefiniti del modulo.
La si lasci commentata, infatti l'opzione predefinita per <code>ModPagespeedRewriteLevel</code> è <code>CoreFilters</code> che permette di avere attivati molti filtri di default che sono quelli ritenuti sicuri per la maggior parte delle applicazioni. Un'altra opzione più aggressiva è <code>TestingCoreFilters</code>, che permette di attivare i filtri sperimentali, ma prima di arrischiarsi è bene testare il sito prima di lasciarli in produzione, mentre <code>PassThrough</code> disabiliterà ogni filtro di default<ref>[https://www.modpagespeed.com/doc/config_filters manuale di configurazione dei filtri]</ref>.<br />I filtri di default aggiunti da <code>CoreFilters</code> sono:
<br/>
*add_head
Una ventina di righe più sotto dovremmo trovare la direttiva:
*combine_css
*combine_javascript
*convert_meta_tags
*extend_cache
*fallback_rewrite_css_urls
*flatten_css_imports
*inline_css
*inline_import_to_link
*inline_javascript
* rewrite_css
*rewrite_images: implica recompress_images, recompress_jpeg, recompress_png, recompress_webp, convert_gif_to_png, strip_image_color_profile, strip_image_meta_data, jpeg_sampling
*rewrite_javascript
*rewrite_style_attributes_with_url
Se vogliamo attivare ulteriori direttive si può fare aggiungendo dopo la riga
    # ModPagespeedEnableFilters collapse_whitespace,elide_attributes
Tra le direttive non fornite di default da <code>CoreFilters</code> è consigliabile aggiungere<pre>    ModPagespeedEnableFilters collapse_whitespace,elide_attributes
    ModPagespeedEnableFilters convert_to_webp_animated
    ModPagespeedEnableFilters remove_comments
    ModPagespeedEnableFilters remove_quotes
    ModPagespeedEnableFilters hint_preload_subresources
</pre>
Inoltre si possono aggiustare i permessi per la directory di cache con:
<pre>
<pre>
# ModPagespeedEnableFilters collapse_whitespace,elide_attributes
# chmod -R a+w /var/cache/mod_pagespeed
</pre>
</pre>
Decommentiamola, e nel frattempo aggiungiamo alcune altre direttive di ottimizzazione:
Quindi si riavvii Apache2 per fargli digerire le modifiche.
<pre> 
ModPagespeedEnableFilters combine_css
ModPagespeedEnableFilters rewrite_css,rewrite_javascript
ModPagespeedEnableFilters inline_css,inline_javascript
ModPagespeedEnableFilters rewrite_images
ModPagespeedEnableFilters insert_img_dimensions
ModPagespeedEnableFilters remove_comments
ModPagespeedEnableFilters extend_cache
ModPagespeedEnableFilters remove_quotes
</pre>
Quindi riavviamo Apache per fargli digerire le modifiche:
<pre>
<pre>
# /etc/init.d/apache2 restart
# systemctl reload apache2
</pre>
</pre>


== Virtual Host ==
=== Flush cache ===
La configurazione precedente applica le stesse impostazioni di mod_pagespeed a tutti i Virtual Host presenti sul nostro server. È però possibile applicare configurazioni personalizzate per ogni Virtual Host, agendo sul file di configurazione del Virtual Host stesso:
Se Pagespeed genera problemi di visualizzazione un tentativo che vale la pena è cancellare la cache. Dare
 
<pre># touch /var/cache/mod_pagespeed/cache.flush
# systemctl restart apache2</pre>
 
==Virtual Host==
La configurazione precedente applica le stesse impostazioni di ''mod_pagespeed'' a tutti i Virtual Host presenti sul server. È però possibile applicare configurazioni personalizzate per ogni Virtual Host, agendo sul file di configurazione del Virtual Host stesso. La modifica seguente è solo un esempio, ma si possono semplicemente rivedere alcune specifiche opzioni per personalizzare magari i filtri per specifici applicativi problematici (in questo caso può essere una buona idea impostare <code>ModPagespeedRewriteLevel</code> come <code>PassThrough</code> e poi abilitare manualmente solo i filtri desiderati.
<pre>
<pre>
   
   
Riga 81: Riga 121:
   ModPagespeedFileCachePath "/usr/local/apache2/pagespeed/cache/"
   ModPagespeedFileCachePath "/usr/local/apache2/pagespeed/cache/"
   ModPagespeedGeneratedFilePrefix "/usr/local/apache2/pagespeed/files/"
   ModPagespeedGeneratedFilePrefix "/usr/local/apache2/pagespeed/files/"
   ModPagespeedEnableFilters combine_css
   ModPagespeedRewriteLevel CoreFilters
  ModPagespeedEnableFilters rewrite_css,rewrite_javascript
   ModPagespeedEnableFilters collapse_whitespace,elide_attributes
   ModPagespeedEnableFilters inline_css,inline_javascript
   ModPagespeedEnableFilters convert_to_webp_animated
  ModPagespeedEnableFilters rewrite_images
   ModPagespeedEnableFilters insert_img_dimensions
   ModPagespeedEnableFilters remove_comments
   ModPagespeedEnableFilters remove_comments
   ModPagespeedEnableFilters extend_cache
   ModPagespeedEnableFilters remove_quotes
   ModPagespeedEnableFilters remove_quotes 
   ModPagespeedEnableFilters hint_preload_subresources 
</VirtualHost>
</VirtualHost>
</pre>
</pre>
 
==Documentazione==
== Documentazione ==
La documentazione ufficiale è reperibile al seguente indirizzo:
La documentazione ufficiale è reperibile al seguente indirizzo:  
https://developers.google.com/speed/pagespeed/module
http://code.google.com/intl/it-IT/speed/page-speed/docs/using_mod.html
 
{{Autori
{{Autori
|Autore = [[Utente:Ferdybassi|Ferdybassi]]
|Autore = [[Utente:Ferdybassi|Ferdybassi]]
}}
}}
[[Categoria:Web server]]
[[Categoria:Web server]]
<references />

Versione attuale delle 13:13, 18 ott 2021

Debian-swirl.png Versioni Compatibili

Debian 9 "stretch"
Debian 10 "buster"
Debian 11 "bullseye"

Introduzione

PageSpeed è un modulo per il web server Apache2 che permette l’ottimizzazione automatica di pagine Web e altre risorse attraverso l’uso di appositi filtri per la riscrittura delle pagine web al fine di diminuire il tempo di latenza di caricamento delle pagine. Alcuni filtri alterano semplicemente il contenuto HTML, per esempio rimuovendo l'eccesso di spazi bianchi, attributi non necessario o attributi che sarebbero ignorati dal browser. Altri filtri invece cambiano i riferimenti ai file CSS, JavaScript o le immagini al fine di fornire una versione ottimizzata in quanto di peso minore, vengono combinati più files in uno e viene esteso il tempo di vita della cache. Tutto questo viene fatto in modo automatico senza rendere necessario alcun intervento manuale sul server

Il modulo non agisce sul codice lato server, quindi non deve essere visto come una possibile soluzione per migliorare script PHP mal riusciti o per velocizzare query SQL non ottimizzate.

I filtri sono eseguiti sempre in un ordine pre-definito, ma si può scegliere quali abilitare o disabilitare nel file di configurazione.

Il modulo in questione è distribuito sotto licenza Apache 2.0, ma non è incluso nei repository ufficiali Debian a causa dell'utilizzo in bundle di alcune librerie[1].

Installazione

I Google Labs forniscono un pacchetto DEB di mod_pagespeed per Debian, sia a 32 bit, sia a 64 bit. Il pacchetto può essere scaricato a questo indirizzo:
https://developers.google.com/speed/pagespeed/module

Oppure con il seguente comando

# wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb

Una volta scaricata l'ultima versione del pacchetto:[2]

lo possiamo installare tramite gdebi, installandolo se occorre:

# gdebi mod-pagespeed-*.deb
  Senza gdebi

Al posto di gdebi si può utilizzare anche dpkg:

# dpkg -i mod-pagespeed-*.deb
# apt-get -f install

Gdebi è comunque consigliato perché scarica e prova a installare le dipendenze prima di installare il pacchetto.

Il modulo sarà abilitato automaticamente su Apache, ma per attivarlo è necessario riavviare Apache con

# systemctl reload apache2

L'installazione configura anche un file all'interno della directory /etc/apt/sources.list.d, abilitando un repository esterno per gli aggiornamenti automatici del modulo.

  Suggerimento
Nel caso in cui un apt-get update fornisca un errore di file Release non firmato a seguito dell'aggiunta del repository di pagespeed
W: GPG error: http://dl.google.com/linux/mod-pagespeed/deb stable Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 78BD65473CB3BD13
E: The repository 'http://dl.google.com/linux/mod-pagespeed/deb stable Release' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

Si può risolvere velocemente il problema aggiungendo le chiavi GPG dei repository google.

# cd /etc/apt/trusted.gpg.d
# wget -O google-archive.pub https://dl-ssl.google.com/linux/linux_signing_key.pub

ed infine aggiornare nuovamente l'elenco dei pacchetti sempre con un apt-get update


Configurazione

Dopo l'installazione, può essere utile apportare alcune modifiche alla configurazione del modulo, agendo sul suo file di configurazione principale:

# nano /etc/apache2/mods-available/pagespeed.conf

All'inizio del file si dovrebbe trovare le seguenti righe:

<IfModule pagespeed_module>
    # Turn on mod_pagespeed. To completely disable mod_pagespeed, you
    # can set this to "off".
    ModPagespeed on

che indicano che il modulo è attivo. Se al contrario ci fosse la direttiva ModPagespeed off, si può cambiarla ad on per attivarlo.

Poco dopo si dovrebbe trovare la direttiva:

    # ModPagespeedRewriteLevel PassThrough

La si lasci commentata, infatti l'opzione predefinita per ModPagespeedRewriteLevel è CoreFilters che permette di avere attivati molti filtri di default che sono quelli ritenuti sicuri per la maggior parte delle applicazioni. Un'altra opzione più aggressiva è TestingCoreFilters, che permette di attivare i filtri sperimentali, ma prima di arrischiarsi è bene testare il sito prima di lasciarli in produzione, mentre PassThrough disabiliterà ogni filtro di default[3].
I filtri di default aggiunti da CoreFilters sono:

  • add_head
  • combine_css
  • combine_javascript
  • convert_meta_tags
  • extend_cache
  • fallback_rewrite_css_urls
  • flatten_css_imports
  • inline_css
  • inline_import_to_link
  • inline_javascript
  • rewrite_css
  • rewrite_images: implica recompress_images, recompress_jpeg, recompress_png, recompress_webp, convert_gif_to_png, strip_image_color_profile, strip_image_meta_data, jpeg_sampling
  • rewrite_javascript
  • rewrite_style_attributes_with_url

Se vogliamo attivare ulteriori direttive si può fare aggiungendo dopo la riga

    # ModPagespeedEnableFilters collapse_whitespace,elide_attributes

Tra le direttive non fornite di default da CoreFilters è consigliabile aggiungere

    ModPagespeedEnableFilters collapse_whitespace,elide_attributes
    ModPagespeedEnableFilters convert_to_webp_animated
    ModPagespeedEnableFilters remove_comments
    ModPagespeedEnableFilters remove_quotes
    ModPagespeedEnableFilters hint_preload_subresources

Inoltre si possono aggiustare i permessi per la directory di cache con:

# chmod -R a+w /var/cache/mod_pagespeed

Quindi si riavvii Apache2 per fargli digerire le modifiche.

# systemctl reload apache2

Flush cache

Se Pagespeed genera problemi di visualizzazione un tentativo che vale la pena è cancellare la cache. Dare

# touch /var/cache/mod_pagespeed/cache.flush
# systemctl restart apache2

Virtual Host

La configurazione precedente applica le stesse impostazioni di mod_pagespeed a tutti i Virtual Host presenti sul server. È però possibile applicare configurazioni personalizzate per ogni Virtual Host, agendo sul file di configurazione del Virtual Host stesso. La modifica seguente è solo un esempio, ma si possono semplicemente rivedere alcune specifiche opzioni per personalizzare magari i filtri per specifici applicativi problematici (in questo caso può essere una buona idea impostare ModPagespeedRewriteLevel come PassThrough e poi abilitare manualmente solo i filtri desiderati.

 
<VirtualHost *:80>
 ServerAdmin webmaster@esempio.com
 ServerName esempio.com
 ServerAlias www.esempio.com
 DocumentRoot /var/www/esempio.com/
 <Directory "/var/www/esempio.com">
    Options -Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
 </Directory>

   ModPagespeed on
   ModPagespeedFileCachePath "/usr/local/apache2/pagespeed/cache/"
   ModPagespeedGeneratedFilePrefix "/usr/local/apache2/pagespeed/files/"
   ModPagespeedRewriteLevel CoreFilters
   ModPagespeedEnableFilters collapse_whitespace,elide_attributes
   ModPagespeedEnableFilters convert_to_webp_animated
   ModPagespeedEnableFilters remove_comments
   ModPagespeedEnableFilters remove_quotes
   ModPagespeedEnableFilters hint_preload_subresources  
</VirtualHost>

Documentazione

La documentazione ufficiale è reperibile al seguente indirizzo: https://developers.google.com/speed/pagespeed/module



Guida scritta da: Ferdybassi   Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized

  1. per una spiegazione delle motivazioni che hanno portato all'esclusione del modulo dai repository Debian si veda, ad esempio, il seguente bug report
  2. pagina per il download
  3. manuale di configurazione dei filtri