Henry Isakoff 🥕 Linux Palvelimet

| Linux Palvelimet | 6 min

Apache, nimipalvelimet porteille, virtuaalinimipalvelimet (korjattu) ja hyvät käytännöt.

*Korjattu 11.2.2025 - Virtual name base system asennettu väärin portteihin

• Name-based Virtual Hosting mahdollistaa usean verkkosivuston yhden IP-osoitteen alla.
• Edellyttää Apache2:n asennusta ja konfigurointia
• Jokainen sivusto vaatii oman VirtualHost-määrittelyn

Hyödyt:

• Kustannustehokas tapa hostata useita sivustoja
• Helppo ylläpitää
• Skaalautuva ratkaisu pienille ja keskisuurille projekteille

Moi maailma ja apache-serveri alustana -kahdella sisänimellä ja kahdella sivustolla.

Vanhojen pakettien poisto ja tehtävän alustus

Aloitetaan perinteisillä keinoilla, eli päivitetään paketit ja poistetaan vanha apache serveri, asetukset ja käyttäjätiedot. Ihan selkeyden vuoksi.

sudo apt-get update

Tähän väliin suljetaan mahdollinen juokseva kokonaisuus.

sudo systemctl stop apache2

Purge komennolla poistetaan kokonaisuus ihan käyttäjä-asetukset mukaanlukien.

sudo apt purge apache2 apache2-utils apache2-bin apache2-data

Poistetaan myös turhat riippuvuudet ja kotikansiosta vanhat sivustot.

sudo apt autoremove
rm -rf public_html/*

Ja vielä lopputarkistus, että apache2 paketteja ei paikalla

dpkg -l | grep apache2

Paketit asennettuna

Aloitetaan alusta ja asennetaan apache serveri!

sudo apt install apache2

Luodaan kansiot kahdelle sivustolle kotikansioon /public_html/ nimillä laiskottelu ja rapsuttelu

mkdir -p /home/henry/public_html/laiskottelu;
mkdir -p /home/henry/public_html/rapsuttelu

Ja näihin kansioihin tehdään index.html osoittamaan mitä sisällä.

echo "<h1>Laiskottelu Sivusto</h1>" > /home/henry/public_html/laiskottelu/index.html;echo "<h1>Rapsuttelu Sivusto</h1>" > /home/henry/public_html/rapsuttelu/index.html

Meillä kaksi sivua niin meidän täytyy konfiguroida sivustot kahteen porttiin.

sudo nano /etc/apache2/ports.conf

Lisätään ’Listen 80’ alapuolelle ’Listen 81’.

Cli porttilisäys

Konfiguraatiot

Luodaan molemmille sivuille konfiguraatiot

sudo nano /etc/apache2/sites-available/laiskottelu.conf
sudo nano /etc/apache2/sites-available/rapsuttelu.conf

Laiskottelu asetetaan portille 80, rapsuttelu portille 81. Molemmille sivuille tehdään omat loki-paikat josta voi ottaa kopin vain kyseisen sivuston lokeista.

<VirtualHost *:80>
    ServerName laiskottelu.lokaali.fi
    DocumentRoot /home/henry/public_html/laiskottelu
    
    ErrorLog ${APACHE_LOG_DIR}/laiskottelu_error.log
    CustomLog ${APACHE_LOG_DIR}/laiskottelu_access.log combined

    <Directory /home/henry/public_html/laiskottelu>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
<VirtualHost *:81>
    ServerName rapsuttelu.lokaali.fi
    DocumentRoot /home/henry/public_html/rapsuttelu
    
    ErrorLog ${APACHE_LOG_DIR}/rapsuttelu_error.log
    CustomLog ${APACHE_LOG_DIR}/rapsuttelu_access.log combined

    <Directory /home/henry/public_html/rapsuttelu>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

KORJAUS 11.2.2025. Minun ohjeella saa jaettua portit osaksi, jolloin saan toimimaan eri porteissa sivut. Virtual name base - ei tarvitse tätä.

Eli

<VirtualHost *:80>
    ServerName laiskottelu.lokaali.fi
    DocumentRoot /home/henry/public_html/laiskottelu
    
    ErrorLog ${APACHE_LOG_DIR}/laiskottelu_error.log
    CustomLog ${APACHE_LOG_DIR}/laiskottelu_access.log combined

    <Directory /home/henry/public_html/laiskottelu>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName rapsuttelu.lokaali.fi
    DocumentRoot /home/henry/public_html/rapsuttelu
    
    ErrorLog ${APACHE_LOG_DIR}/rapsuttelu_error.log
    CustomLog ${APACHE_LOG_DIR}/rapsuttelu_access.log combined

    <Directory /home/henry/public_html/rapsuttelu>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Näin virtual name base toimii samassa portissa. Tästä syystä eri porteissa ’CURL osoite’ osoittaa molemmat samaan osoitteeseen seuraavissa. Jos portit halutaan erikseen ’virtual base’ ei toimi.

Loppuasetukset, nimipalvelimet ja systeemi pyörimään.

Poistetaan apachen perus-sivusto\

sudo rm /var/www/html/index.html
sudo a2dissite 000-default.conf

Varmistetaan oman kansion ja sivuston oikeudet ihan varalta

sudo chown -R $USER:$USER /home/henry/public_html/laiskottelu;sudo chown -R $USER:$USER /home/henry/public_html/rapsuttelu

Jos saitti tulisi julkiseen internettiin tässä ohjaisimme portit omasta VLAN/porttiasetuksista eteenpäin. Nyt kuitenkin sivusto vain demomielessä paikallisesti.

Tehdään kuitenkin merkinnät lokaaliin verkkoon.

sudo nano /etc/hosts

Lisätään paikallisen koneen ohjaukset konfiguraatioiden mukaan.

127.0.0.1   laiskottelu.lokaali.fi
127.0.0.1   rapsuttelu.lokaali.fi

Ja vihdoin saamme liittää symlinkit paikalleen sites-enabled kansioon. Käytetään apachen omaa a2ensite työkalua.

sudo a2ensite laiskottelu.conf;
sudo a2ensite rapsuttelu.conf

Ja käynnistetään prosessi uudelleen.

sudo systemctl restart apache2

JA VALMISTA TULI!

Kokeillaan molemmat sivut curl läpi. Curl lähettää ja vastaanottaa yksinkertaisia HTML pyyntöjä. Printattava kokonaisuus on teksti vastaanotettavasta datasta. -L lisällä sivu ohjataan myös seuraamaan uudelleenohjaukset. Nyt sitä ei tarvita.

curl rapsuttelu.lokaali.fi
curl laiskottelu.lokaali.fi

TÄSSÄ VIRHE Eli oikein portit laitettuna tämä toimii. Huomatkaa, että kuvassa molemmat ohjaa samaan osoitteeseen.

Cli ulkonäkö

Koska minulla palvelin yhdistetty wireguard tunnelilla ja fyysisesti eri verkossa, porteista saan kiinni sivut selaimella ip-osoitteella ja portilla.

http://42.0.0.126:80 johtaa rapsutteluun ja http://42.0.0.126:81 johtaa laiskotteluun. Nimipalvelimet eivät toimi ilman, että ajan muutoksia myös omaan DNS järjestelmään. Nyt en sitä tee tähän kokonaisuuteen. SSH yli curlin ajaa toimivan demon.

Molemmat sivut ulkona

HTML5, doctype ja rakenne.

Html5 sivustossa on oltava hakukoneille osoittava doctype kunnossa, merkistöinti-ilmoitus ja ideaalisti hyvin selkeä semaattinen pohja.

Esimerkki hyvästä pohjasta.

<!DOCTYPE html>
<html lang="fi">
<head>
    <!-- Merkistökoodaus -->
    <meta charset="UTF-8">
    
    <!-- Responsiivinen ikkunaportti -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
    <!-- Sivun metadata -->
    <title>Sivun Otsikko</title>
    <meta name="description" content="Sivun kuvaus hakukoneita varten">
    <meta name="keywords" content="avainsanat, hakusanat">
    
    <!-- Suosikki-iconi -->
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    
    <!-- Open Graph metatiedot somea varten -->
    <meta property="og:title" content="Sivun Otsikko">
    <meta property="og:description" content="Sivun kuvaus">
    <meta property="og:image" content="url_kuva_sosiaaliseen_mediaan">
    <meta property="og:url" content="sivun_url">
    
    <!-- CSS-tiedostot -->
    <link rel="stylesheet" href="styles.css">
    
    <!-- Ulkoiset fontit (esim. Google Fonts) -->
    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap" rel="stylesheet">
</head>
<body>
    <!-- Navigaatio -->
    <header>
        <nav>
            <ul>
                <li><a href="#home">Etusivu</a></li>
                <li><a href="#about">Tietoa</a></li>
                <li><a href="#contact">Yhteystiedot</a></li>
            </ul>
        </nav>
    </header>

    <!-- Pääsisältö -->
    <main>
        <section id="home">
            <h1>Tervetuloa sivustollemme</h1>
            <p>Tämä on sivuston pääsisältö</p>
        </section>
    </main>

    <!-- Footer -->
    <footer>
        <p>&copy; 2023 Sivuston Nimi. Kaikki oikeudet pidätetään.</p>
    </footer>

    <!-- JavaScript-tiedostot -->
    <script src="script.js" defer></script>
</body>
</html>

Loppusanat

Apache on erittäin helppokäyttöinen http-palvelin joka skaalautuu pienestä yhden sivun kokonaisuudesta, suureen monen sivuston palvelinkokonaisuuteen todella helpolla.

Lähteet

Apache Docs https://httpd.apache.org/docs/

Dokumentissa käytetty apuna formatoinnissa ja tekstinkäsittelyssä LLM mistra-small:24b järkeily + gemma2:27b sanoitus malleja sekoitettuna kirjoittajan omalla opetusdatalla. WilmerAI välissä. https://ollama.com/library/mistral-small:22b https://ollama.com/library/gemma2:27b https://github.com/SomeOddCodeGuy/WilmerAI

Kuvat optimoitu https://optimage.app

Nimipalvelimien tietopankki https://httpd.apache.org/docs/2.4/vhosts/name-based.html https://terokarvinen.com/2018/04/10/name-based-virtual-hosts-on-apache-multiple-websites-to-single-ip-address/

Käytetty aika 1h 6min