Installazione di un server Web nell'istanza EC2 - Amazon Aurora

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Installazione di un server Web nell'istanza EC2

Installa un server Web in un'istanza EC2 creata in Avvia un'EC2istanza per connetterti con l'. Il server web si connette al cluster di database Amazon Aurora creato in Creazione di un cluster di database Amazon Aurora.

Installazione di un server Web Apache con PHP e MariaDB

Esegui la connessione all'istanza EC2 e installa il server Web Apache.

Per effettuare la connessione all'istanza EC2 e installare il server Web Apache con PHP.
  1. Connettiti all'istanza EC2 che hai creato in precedenza seguendo i passaggi in Connetti alla tua istanza Linux nella Amazon EC2 User Guide.

    Ti consigliamo di connetterti all'istanza EC2 tramite SSH. Se l'utilità client SSH è installata su Windows, Linux o Mac, puoi connetterti all'istanza utilizzando il comando nel seguente formato:

    ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name

    Ad esempio, supponi che ec2-database-connect-key-pair.pem sia archiviato in /dir1 su Linux e che il DNS IPv4 pubblico per l'istanza EC2 sia ec2-12-345-678-90.compute-1.amazonaws.com. Il comando SSH sarà simile al seguente:

    ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
  2. Ottieni le ultime correzioni di bug e gli aggiornamenti di sicurezza aggiornando il software sulla tua istanza EC2. A questo scopo, eseguire il comando seguente.

    Nota

    L'opzione -y installa gli aggiornamenti senza chiedere conferma. Per esaminare gli aggiornamenti prima di installarli, omettere questa opzione.

    sudo dnf update -y
  3. Al completamento degli aggiornamenti, installa il server Web Apache, PHP e il software MariaDB utilizzando i comandi seguenti. Con questo comando vengono installati contemporaneamente più pacchetti software e dipendenze correlate.

    MariaDB & MySQL
    sudo dnf install -y httpd php php-mysqli mariadb105
    PostgreSQL
    sudo dnf install -y httpd php php-pgsql postgresql15

    Se si verifica un errore, è possibile che l'istanza non sia stata lanciata con un'AMI Amazon Linux 2023. Puoi invece utilizzare l'AMI Amazon Linux 2. È possibile visualizzare la versione di Amazon Linux con il comando seguente.

    cat /etc/system-release

    Per ulteriori informazioni, consulta la pagina relativa all'aggiornamento del software dell'istanza.

  4. Avviare il server Web con il comando visualizzato di seguito.

    sudo systemctl start httpd

    È possibile verificare che il server Web sia installato e avviato correttamente. A tale scopo, immettere il nome DNS (Domain Name System) pubblico dell'istanza EC2 nella barra degli indirizzi di un browser Web, ad esempio: http://ec2-42-8-168-21.us-west-1.compute.amazonaws.com. Se il server Web è in esecuzione, verrà visualizzata la pagina di test di Apache.

    Se la pagina di test Apache non viene visualizzata, controllare le regole in entrata per il gruppo di sicurezza VPC creato in Tutorial: Creazione di un Amazon VPC da utilizzare con un cluster database (solo IPv4). Assicurati che le regole in entrata ne includano una che consenta l'accesso HTTP (porta 80) per l'indirizzo IP utilizzato per connettersi al server Web.

    Nota

    La pagina di test di Apache viene visualizzata solo quando la directory principale dei documenti è vuota, /var/www/html. Dopo aver aggiunto contenuti alla directory root dei documenti, i contenuti vengono visualizzati all'indirizzo DNS pubblico dell'istanza EC2. Prima di questo punto, vengono visualizzati nella pagina di test di Apache.

  5. Configurare il server Web affinché si avvii a ogni avvio del sistema tramite il comando systemctl.

    sudo systemctl enable httpd

Per permettere a ec2-user di gestire file nella directory principale predefinita del server Web Apache, è necessario modificare la proprietà e le autorizzazioni della directory /var/www. Sono disponibili molti modi per completare questa attività. In questo tutorial, aggiungi l'utente ec2-user al gruppo apache per assegnare la proprietà del gruppo apache della directory /var/www e assegnare autorizzazioni di scrittura al gruppo.

Per impostare le autorizzazioni dei file sul server Web Apache
  1. Aggiungere l'utente ec2-user al gruppo apache.

    sudo usermod -a -G apache ec2-user
  2. Per aggiornare le autorizzazioni e includere il nuovo gruppo apache, eseguire la disconnessione.

    exit
  3. Effettuare nuovamente l'accesso e verificare che il gruppo apache esista mediante il comando groups.

    groups

    L'output avrà un aspetto simile al seguente:

    ec2-user adm wheel apache systemd-journal
  4. Cambiare la proprietà del gruppo della directory /var/www e dei suoi contenuti sul gruppo apache.

    sudo chown -R ec2-user:apache /var/www
  5. Cambiare le autorizzazioni della directory /var/www e delle sue sottodirectory per aggiungere le autorizzazioni di scrittura di gruppo e impostare l'ID di gruppo per le sottodirectory create in futuro.

    sudo chmod 2775 /var/www find /var/www -type d -exec sudo chmod 2775 {} \;
  6. Cambiare le autorizzazioni in modo ricorsivo per i file nella directory /var/www e nelle sue sottodirectory per aggiungere le autorizzazioni di scrittura di gruppo.

    find /var/www -type f -exec sudo chmod 0664 {} \;

Ora, ec2-user (e qualsiasi membro futuro del gruppo apache) può aggiungere, eliminare e modificare i file nella root del documento di Apache. Questo consente di aggiungere contenuti, ad esempio un sito Web statico o un'applicazione PHP.

Nota

Un server Web che esegue il protocollo HTTP non offre alcuna sicurezza di trasporto per i dati inviati e ricevuti. Quando ti connetti a un server HTTP tramite un browser Web, la molte informazioni sono visibili a persone non autorizzate in qualsiasi punto del percorso di rete. Queste informazioni includono gli URL visitati, il contenuto delle pagine Web ricevute e i contenuti (incluse le password) di eventuali moduli HTML.

La best practice per la protezione del tuo server Web prevede l'installazione del supporto per HTTPS (HTTP Secure). Questo protocollo protegge i dati con la crittografia SSL/TLS. Per ulteriori informazioni, consulta Esercitazione: Configurare SSL/TLS con l'AMI di Amazon Linux nella Guida per l’utente di Amazon EC2 .

Connessione del server web Apache al cluster di database

Successivamente, aggiungere contenuti al server Web Apache che effettua la connessione all'Amazon Aurora Cluster DB.

Per aggiungere contenuti al server Web Apache che effettua la connessione all'Cluster DB.
  1. Mentre è ancora in corso la connessione all'istanza EC2, modificare la directory in /var/www e creare una nuova sottodirectory denominata inc.

    cd /var/www mkdir inc cd inc
  2. Creare un nuovo file nella directory inc denominato dbinfo.inc e poi modificarlo con nano (o un altro editor a scelta).

    >dbinfo.inc nano dbinfo.inc
  3. Aggiungi i seguenti contenuti al file dbinfo.inc. Qui, db_instance_endpoint è l'endpoint dell'istanza di scrittura del cluster database, senza la porta, per il cluster database.

    Nota

    Si consiglia di inserire le informazioni relative al nome utente e alla password in una cartella che non fa parte della directory principale del documento per il server Web. In questo modo si riduce la possibilità che le informazioni di sicurezza vengano esposte.

    Assicurati di modificare master password in una password adatta per la tua applicazione.

    <?php define('DB_SERVER', 'db_cluster_writer_endpoint'); define('DB_USERNAME', 'tutorial_user'); define('DB_PASSWORD', 'master password'); define('DB_DATABASE', 'sample'); ?>
  4. Salvare e chiudere il file dbinfo.inc. Se stai usando nano, salva e chiudi il file usando Ctrl+S e Ctrl+X.

  5. Cambiare la directory in /var/www/html.

    cd /var/www/html
  6. Creare un nuovo file nella directory html denominato SamplePage.php e poi modificarlo con nano (o un altro editor a scelta).

    >SamplePage.php nano SamplePage.php
  7. Aggiungere i seguenti contenuti al file SamplePage.php:

    MariaDB & MySQL
    <?php include "../inc/dbinfo.inc"; ?> <html> <body> <h1>Sample page</h1> <?php /* Connect to MySQL and select the database. */ $connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD); if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error(); $database = mysqli_select_db($connection, DB_DATABASE); /* Ensure that the EMPLOYEES table exists. */ VerifyEmployeesTable($connection, DB_DATABASE); /* If input fields are populated, add a row to the EMPLOYEES table. */ $employee_name = htmlentities($_POST['NAME']); $employee_address = htmlentities($_POST['ADDRESS']); if (strlen($employee_name) || strlen($employee_address)) { AddEmployee($connection, $employee_name, $employee_address); } ?> <!-- Input form --> <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST"> <table border="0"> <tr> <td>NAME</td> <td>ADDRESS</td> </tr> <tr> <td> <input type="text" name="NAME" maxlength="45" size="30" /> </td> <td> <input type="text" name="ADDRESS" maxlength="90" size="60" /> </td> <td> <input type="submit" value="Add Data" /> </td> </tr> </table> </form> <!-- Display table data. --> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>ID</td> <td>NAME</td> <td>ADDRESS</td> </tr> <?php $result = mysqli_query($connection, "SELECT * FROM EMPLOYEES"); while($query_data = mysqli_fetch_row($result)) { echo "<tr>"; echo "<td>",$query_data[0], "</td>", "<td>",$query_data[1], "</td>", "<td>",$query_data[2], "</td>"; echo "</tr>"; } ?> </table> <!-- Clean up. --> <?php mysqli_free_result($result); mysqli_close($connection); ?> </body> </html> <?php /* Add an employee to the table. */ function AddEmployee($connection, $name, $address) { $n = mysqli_real_escape_string($connection, $name); $a = mysqli_real_escape_string($connection, $address); $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');"; if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>"); } /* Check whether the table exists and, if not, create it. */ function VerifyEmployeesTable($connection, $dbName) { if(!TableExists("EMPLOYEES", $connection, $dbName)) { $query = "CREATE TABLE EMPLOYEES ( ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(45), ADDRESS VARCHAR(90) )"; if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>"); } } /* Check for the existence of a table. */ function TableExists($tableName, $connection, $dbName) { $t = mysqli_real_escape_string($connection, $tableName); $d = mysqli_real_escape_string($connection, $dbName); $checktable = mysqli_query($connection, "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'"); if(mysqli_num_rows($checktable) > 0) return true; return false; } ?>
    PostgreSQL
    <?php include "../inc/dbinfo.inc"; ?> <html> <body> <h1>Sample page</h1> <?php /* Connect to PostgreSQL and select the database. */ $constring = "host=" . DB_SERVER . " dbname=" . DB_DATABASE . " user=" . DB_USERNAME . " password=" . DB_PASSWORD ; $connection = pg_connect($constring); if (!$connection){ echo "Failed to connect to PostgreSQL"; exit; } /* Ensure that the EMPLOYEES table exists. */ VerifyEmployeesTable($connection, DB_DATABASE); /* If input fields are populated, add a row to the EMPLOYEES table. */ $employee_name = htmlentities($_POST['NAME']); $employee_address = htmlentities($_POST['ADDRESS']); if (strlen($employee_name) || strlen($employee_address)) { AddEmployee($connection, $employee_name, $employee_address); } ?> <!-- Input form --> <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST"> <table border="0"> <tr> <td>NAME</td> <td>ADDRESS</td> </tr> <tr> <td> <input type="text" name="NAME" maxlength="45" size="30" /> </td> <td> <input type="text" name="ADDRESS" maxlength="90" size="60" /> </td> <td> <input type="submit" value="Add Data" /> </td> </tr> </table> </form> <!-- Display table data. --> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>ID</td> <td>NAME</td> <td>ADDRESS</td> </tr> <?php $result = pg_query($connection, "SELECT * FROM EMPLOYEES"); while($query_data = pg_fetch_row($result)) { echo "<tr>"; echo "<td>",$query_data[0], "</td>", "<td>",$query_data[1], "</td>", "<td>",$query_data[2], "</td>"; echo "</tr>"; } ?> </table> <!-- Clean up. --> <?php pg_free_result($result); pg_close($connection); ?> </body> </html> <?php /* Add an employee to the table. */ function AddEmployee($connection, $name, $address) { $n = pg_escape_string($name); $a = pg_escape_string($address); echo "Forming Query"; $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');"; if(!pg_query($connection, $query)) echo("<p>Error adding employee data.</p>"); } /* Check whether the table exists and, if not, create it. */ function VerifyEmployeesTable($connection, $dbName) { if(!TableExists("EMPLOYEES", $connection, $dbName)) { $query = "CREATE TABLE EMPLOYEES ( ID serial PRIMARY KEY, NAME VARCHAR(45), ADDRESS VARCHAR(90) )"; if(!pg_query($connection, $query)) echo("<p>Error creating table.</p>"); } } /* Check for the existence of a table. */ function TableExists($tableName, $connection, $dbName) { $t = strtolower(pg_escape_string($tableName)); //table name is case sensitive $d = pg_escape_string($dbName); //schema is 'public' instead of 'sample' db name so not using that $query = "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t';"; $checktable = pg_query($connection, $query); if (pg_num_rows($checktable) >0) return true; return false; } ?>
  8. Salvare e chiudere il file SamplePage.php.

  9. Verificare che il server Web effettui correttamente la connessione all'cluster DB aprendo un browser web e navigando fino a http://EC2 instance endpoint/SamplePage.php, ad esempio: http://ec2-12-345-67-890.us-west-2.compute.amazonaws.com/SamplePage.php.

È possibile utilizzare SamplePage.php per aggiungere dati all'cluster DB. I dati aggiunti verranno visualizzati nella pagina. Per verificare che i dati siano stati inseriti nella tabella, installa il client MySQL nell'istanza Amazon EC2. Esegui quindi la connessione al cluster di database ed esegui la query sulla tabella.

Per ulteriori informazioni sulla connessione a un cluster DB, consultare Connessione a un cluster database Amazon Aurora.

Per assicurarsi che l’il cluster DB sia il più possibile sicura, verificare che le fonti esterne al VPC non possano connettersi all’Cluster DB.

Dopo aver terminato il test del server Web e del database, è necessario eliminare l'istanza il DB e l'istanza Amazon EC2.