Ubuntu 16.04 / Apache / Come Risolvere l'Accesso alla Cartella javascript
Se appare un 403 Forbidden quando si accede a /javascript/ su Apache in Ubuntu, controllare se l'alias di Apache creato dal pacchetto javascript-common entra in conflitto con il percorso del sito. Tuttavia, gli errori 403 possono anche verificarsi a causa di permessi o impostazioni di elenco delle directory, quindi bisognerebbe controllare insieme la risposta effettiva dei file e le impostazioni del server prima di intervenire.
Cose da Controllare Prima
Questo articolo si basa su un ambiente che utilizza Apache 2.4 su Ubuntu. L'articolo originale riguardava Ubuntu 16.04 LTS, che è una versione vecchia il cui supporto standard e il supporto generale di Ubuntu Pro sono terminati. Verifica le condizioni per il supporto legacy aggiuntivo e pianifica la migrazione a una versione supportata. Il calendario del supporto può essere verificato su Ubuntu Security Maintenance Schedule.
Il problema di vedere un 403 quando si apre solo l'indirizzo della cartella /javascript/ in un browser e di non riuscire a caricare i file JavaScript al suo interno sono problemi diversi. Se non c'è un file index predefinito nella directory e l'elenco delle directory è disattivato, l'indirizzo della cartella può restituire 403, ma i singoli file possono comunque essere serviti normalmente.
Controlla l'URL e il codice di stato del file che è effettivamente fallito nella scheda Network degli strumenti per sviluppatori del browser. Ad esempio, verifica se /javascript/app.js referenziato dal sito restituisce 200, 403 o 404, e controlla anche il contenuto della risposta. Anche se mostra 200, potrebbe essere restituito un contenuto diverso dal file JavaScript previsto.
Cos'è un conflitto di alias?
In alcuni ambienti Ubuntu e Debian, la configurazione attiva di javascript-common può includere alias come i seguenti. Quando questa configurazione viene applicata, il percorso URL /javascript può puntare a una directory diversa da quella sotto la root dei documenti del sito.
Alias /javascript /usr/share/javascript/
Ad esempio, se Apache cerca il /javascript/app.js richiesto sotto /usr/share/javascript/, i file nella cartella originale del sito potrebbero non essere serviti. Se il file di destinazione non esiste, potrebbe apparire un errore 404, e se l'accesso alla destinazione è negato o l'elenco delle directory non è consentito, potrebbe apparire un errore 403. Non concludere un conflitto di alias basandoti solo sul codice di stato.
Questo alias riguarda le richieste in cui il primo segmento del percorso URL è /javascript. Le cartelle javascript sotto altri segmenti, come /assets/javascript/app.js, non corrispondono automaticamente all'alias. La mappatura e la priorità possono variare in base agli host virtuali, ad altri alias, ai reindirizzamenti e alle regole di riscrittura. Per i dettagli consulta la documentazione Apache sugli alias.
Controlla le impostazioni attive e i log degli errori
Connettiti al server per verificare la versione di Apache e gli host virtuali. Le seguenti ricerche trovano stringhe rilevanti nelle directory di configurazione e nelle impostazioni non utilizzate che possono apparire nei risultati.
apache2 -v
sudo apache2ctl -S
sudo grep -R -n -i javascript /etc/apache2
Se /etc/apache2/conf-available/javascript-common.conf appare nei risultati, controlla il suo contenuto e verifica se è effettivamente attivato e collegato a /etc/apache2/conf-enabled/. Inoltre, esamina le impostazioni specifiche degli host virtuali e altre regole URL. Se il file è mancante o l'alias è disabilitato, non assumere che questa impostazione sia la causa.
ls -l /etc/apache2/conf-enabled/javascript-common.conf
sudo cat /etc/apache2/conf-available/javascript-common.conf
Se ricevi un messaggio che il file o il collegamento simbolico non esiste, allora l'installazione o lo stato attivo è diverso. Controlla i log degli errori di Apache al momento della richiesta per vedere il percorso effettivo e gli errori riscontrati. Nella configurazione predefinita di Ubuntu, /var/log/apache2/error.log potrebbe essere disponibile, ma i percorsi dei log possono differire per ogni host virtuale.
sudo tail -n 50 /var/log/apache2/error.log
Scegli un metodo di risoluzione
Se è possibile cambiare il percorso del file sul sito, usa un percorso come /assets/js/ che non si sovrapponga con l'alias, e modifica anche l'indirizzo HTML script e le impostazioni di build. Se ci sono pagine, cache o link esterni che utilizzano l'indirizzo esistente, verifica l'impatto della modifica e richiedi nuovamente i file effettivi dopo il deployment. Semplicemente rinominare la cartella mantenendo inalterati i riferimenti farà sì che le pagine esistenti non riescano a trovare il file.
Se è necessario mantenere l'indirizzo /javascript esistente, l'amministratore del server può esaminare le dipendenze di tutti gli host virtuali e dei pacchetti prima di modificare o disabilitare l'alias. Disabilitare l'impostazione javascript-common può anche modificare gli indirizzi utilizzati da altri siti o pacchetti, quindi è consigliabile prima esaminare l'impatto e predisporre misure di ripristino. Modificare direttamente il file di configurazione del pacchetto può rendere la gestione più complicata durante gli aggiornamenti dei pacchetti.
Le seguenti sono opzioni quando si è confermato che l'impostazione è abilitata e non utilizzata da altri servizi. Questo comando può influire sull'intera configurazione Apache del server. Se il controllo della sintassi fallisce dopo l'esecuzione, non ricaricare; risolvere prima la causa o riattivare la configurazione.
sudo a2disconf javascript-common
sudo apache2ctl configtest
Ricarica la configurazione solo se il controllo della sintassi conferma Syntax OK. Il nome del servizio può variare a seconda dell'ambiente.
sudo systemctl reload apache2
Per ripristinare, riattiva l'impostazione con i seguenti comandi e ricarica solo quando il controllo della sintassi ha successo.
sudo a2enconf javascript-common
sudo apache2ctl configtest && sudo systemctl reload apache2
Controlla dopo le modifiche e altre cause
Richiedi di nuovo l'URL esatto del file che è fallito prima della modifica e verifica il codice di stato e il contenuto del file. Pulisci la cache del browser o imposta gli strumenti di sviluppo per non utilizzare la cache, quindi controlla le richieste di rete e gli errori nella console della pagina. Inoltre, ispeziona altri siti o pacchetti che utilizzavano il percorso /javascript esistente.
Se l'alias non è la causa o il 403 persiste dopo la modifica, controlla le regole di accesso di Apache Directory·Location, i permessi di lettura dei file e di accesso delle directory principali, le impostazioni dei link simbolici e i file index predefiniti e le politiche di elenco delle directory. Non consentire casualmente l'accesso a tutto o abilitare l'elenco delle directory per rimuovere l'errore, poiché potrebbe esporre file che non intendi rendere pubblici; invece, verifica prima i file e le politiche effettivamente necessari.




