Kai keičiamas įvairių PHP projektų įvadas į vieną mašiną, naudojant tik http://localhost, greitai tapa netikslu.
Apache VirtualHosts leidžia priskirti atskiriems projektams skirtingus vietinius domenius. Pavyzdys:
http://mon-projet.localhttp://blog.localhttp://app.local
Kiekvienas domenas gali nuostatyti įskleidžiamą skirtingo katalogo.
Šiuo straipsniu matysime, kaip sukurti VirtualHost Apache per Debian 13 (Trixie) projejto PHP lokaliniui kūrimui.
Pavyzdys naudojant:
- Debian 13;
- Apache 2.4;
- PHP 8.4;
- projektas yra
/var/www/mon-projet; - vietinis domenas
mon-projet.local.
Pastaba: ši konfigūracija yra skirta lokaliniui kūrimui. Ji ne yra produkcijos konfigūracija.
1. Įdiegti Apache ir PHP
Jeigu Apache ir PHP dar neturi būti įdiegti, pradėkite atnaujinant paketus:
sudo apt update |
sudo apt upgrade |
Tada įdiejkitės Apache ir PHP:
sudo apt install apache2 php libapache2-mod-php |
Debian 13 dabar įdieja PHP 8.4 kaip numatytąją versiją. Paketas php yra paketas, kuriame nurodoma stabili PHP versija, teikiamos Debian.
Patikrinkite įdiegto versijų numerius su:
apache2 -v |
php -v |
Jūs turėtumėte išvesti koį nors atitinkantį:
Server version: Apache/2.4.68 |
ir:
PHP 8.4.x |
Numeriai galėtų natūraliai keistis su saugumo atnaujinimais Debian.
Patikrinkite taip pat, ar Apache paslaždijimas veikia:
sudo systemctl status apache2 |
Jeigu reikia:
sudo systemctl enable --now apache2 |
```Sukurti projektų katalogą |
--- |
|
Projektą siūlome pateikti štai čia: |
|
```text |
/var/www/mon-projet |
Sukurkite katalogą:
sudo mkdir -p /var/www/mon-projet |
Norėdami greitai patikrinti konfigūraciją, sukurti PHP failą:
sudo nano /var/www/mon-projet/index.php |
Pridėkite šį kodą į failą:
<?php |
|
echo '<h1>Mon projet fonctionne !</h1>'; |
echo '<p>PHP fonctionne avec Apache.</p>'; |
Sukurkite failą.
2. Sukurti projekto katalogą
2.1. Apie teises
Apache veikia naudojant sistemos vartotoją www-data.
Tačiau nebus reikalingas visų projekto failų tiesioginis prieigavimas www-data vartotojui.
Kodėl nepriklausomai nuo įvairių projektų, dažniausiai leidžiamas variantas yra, kad jūsų Linux vartotojas būtų projekto failų savininkas ir Apache turėtų tiesioginius prieigavimo teises į tokius failus, kurie reikia.
Norėdami greitai patikrinti konfigūraciją, galite naudoti:
sudo chown -R $USER:$USER /var/www/mon-projet |
Tačiau, jei reikalaujama prieigos į failus ar katalogus, kaip yra su Symfony ir Laravel, turėsite nustatyti teises į jų cache, logius ar atsisiuntimus.
3. Sukurti VirtualHost Apache
Apache projektų konfigūracijos yra saugotos štai čia:
/etc/apache2/sites-available/ |
Sukurkite failą:
sudo nano /etc/apache2/sites-available/mon-projet.conf |
Pridėkite šią konfigūraciją:
<VirtualHost *:80> |
ServerName mon-projet.local |
DocumentRoot /var/www/mon-projet |
|
<Directory /var/www/mon-projet> |
Options FollowSymLinks |
AllowOverride All |
Require all granted |
</Directory> |
|
ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log |
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined |
</VirtualHost> |
3.1. Paaiškinimai
VirtualHost *:80
<VirtualHost *:80> |
Apache štai čia atviras po HTTP 80, nepriklausomai nuo naudojamos IP adresės.
VirtualHost yra įmanomas leisti keliems svetainėms dalintis vienu IP adresiu ir portu. Apache pasirinktų tinkamą VirtualHost atsižvelgiant į ServerName arba ServerAlias, kurie buvo nurodomi HTTP užklausoje.
ServerName
ServerName mon-projet.local |
Šis yra pavadinimas, kuriuo naudodėsime naršyklėje:
http://mon-projet.local |
Atsižvelgiant į rekomendacijas, ServerName turėtų būti nurodytas išskirtinai kiekvienam VirtualHost.
DocumentRoot
DocumentRoot /var/www/mon-projet |
Ši direktoriautas nurodo Apache, kurie yra svetainės failai.
<Directory>
<Directory /var/www/mon-projet> |
Options FollowSymLinks |
AllowOverride All |
Require all granted |
</Directory> |
Require all granted leidžia Apache pasirinkti šio direktorijos turinius.
AllowOverride All leidžia, kad .htaccess failas galėtų pakeisti kai kurias Apache nustatymus.
Jei jūsų programine nepriklauso nuo .htaccess, galite naudoti:
AllowOverride None |
Šis pasirinkimas yra įprastai geriau, jei jūsų programa to nepriklauso, nes Apache nustatymai tada bus centralizuoti.
Journals
ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log |
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined |
Klaidos būsenos bus išsaugotos:
/var/log/apache2/mon-projet-error.log |
ir prieigos duomenys:
/var/log/apache2/mon-projet-access.log |
4. Pridėkite domeną į /etc/hosts
Naudotojo svetainė mon-projet.local neturi interneto.
Turime nurodyti, kad šis pavadinimas priklauso 127.0.0.1.
Redaguokite failą /etc/hosts:
sudo nano /etc/hosts |
Pridėkite:
127.0.0.1 mon-projet.local |
Arba galite naudoti:
127.0.0.1 mon-projet.local www.mon-projet.local |
jei norite naudoti du domenius.
Failas /etc/hosts leidžia imitaciją lokalinei DNS resoliucijai. Apache nepasiruošęs sukurti tinkamų DNS įvesties, kurioms priklauso VirtualHosts.
5. Įjungti VirtualHost
Naudotoji failas, kuriame mes tikėtis, yra šią vietoją:
/etc/apache2/sites-available/ |
Tai reiškia, kad jis yra galimas, bet dar ne įjungtas. Šio failo įjungimą galite atlikti naudojant:
sudo a2ensite mon-projet.conf |
Galite atidaryti Apache nepriklausomą VirtualHost:
sudo a2dissite 000-default.conf |
Tačiau tai nėra svarbi užduotis, kad galėtumėte pasiekti naują VirtualHost.
6. Patikrinti Apache konfigūraciją
Prieš išklyausti Apache, patikrinkite jo konfigūraciją:
sudo apachectl configtest |
Jeigu viskas yra teisingai, turėtumėte gauti:
Syntax OK |
Ši etapa yra svarbi: ji leidžia išvengti išklyausti konfigūracijos, kuriame yra sintaksinis klaida.
Turėtumėte išklysti Apache:
sudo systemctl reload apache2 |
Reload yra geriausias būdas: jis leidžia Apache aptikti naują konfigūraciją, nepasidarydamas viso paslėpimo.
7. Patikrinti įjungtus VirtualHosts
Apache teikia gerai veikiančią komandą, kuri leidžia patikrinti konfigūruotus VirtualHosts:
sudo apachectl -S |
Turėtumėte iš viso rasti eilutę, atitinkančią:
*:80 mon-projet.local |
Ši komanda yra labai naudinga, kai mašina hostuoja kelis projektus ir norite suprasti, kurį VirtualHost Apache naudoja. Apache dokumentacija rekomenduoja apachectl -S kaip diagnozuojant VirtualHosts konfigūraciją.
8. Testuoti svetainę
Dabar galite atidaryti savo naršyklę ir įvesti:
http://mon-projet.local |
Turėtumėte matyti:
Mon projet fonctionne ! |
PHP fonctionne avec Apache. |
Jeigu norite patikrinti testą iš terminalio:
curl http://mon-projet.local |
Turėtumėte gauti PHP sukurto HTML turinį.
Galite taip pat patikrinti, ar Apache vykdomas PHP, sukurtuotu temporišką failą:
sudo nano /var/www/mon-projet/info.php |
su:
<?php |
|
phpinfo(); |
Dabar atidarykite:
http://mon-projet.local/info.php |
Turėtumėte gauti PHP informacijos puslapį.
Ištrinkite šį failą, nes phpinfo() rodo daug informacijos apie PHP aplinką:
sudo rm /var/www/mon-projet/info.php |
Aktivuoti mod_rewrite, jei reikalinga
Daugybės modernių PHP programinės įrangos naudoja Apache rewrite modulį.
Jį galite įjungti su:
# 9. Įjungti `mod_rewrite`, jei reikia |
--- |
|
sudo a2enmod rewrite |
Tada patikrinkite konfigūraciją:
sudo apachectl configtest |
ir iš naujo įkelti Apache:
sudo systemctl reload apache2 |
Su mod_rewrite įjungta, programa naudojant .htaccess galės nustatyti savo patikslius atminties perduodimo taisyklės.
10. Pridėti daugiau projektų
VirtualHosts yra labai naudingi, kai į vieną kompiuterį įdiegta keletas projekto PHP.
Pavyzdys:
/var/www/site1 |
/var/www/site2 |
/var/www/site3 |
Galite sukurti:
/etc/apache2/sites-available/site1.conf |
/etc/apache2/sites-available/site2.conf |
/etc/apache2/sites-available/site3.conf |
site1.conf
<VirtualHost *:80> |
ServerName site1.local |
DocumentRoot /var/www/site1 |
|
<Directory /var/www/site1> |
Options FollowSymLinks |
AllowOverride All |
Require all granted |
</Directory> |
|
ErrorLog ${APACHE_LOG_DIR}/site1-error.log |
CustomLog ${APACHE_LOG_DIR}/site1-access.log combined |
</VirtualHost> |
site2.conf
<VirtualHost *:80> |
ServerName site2.local |
DocumentRoot /var/www/site2 |
|
<Directory /var/www/site2> |
Options FollowSymLinks |
AllowOverride All |
Require all granted |
</Directory> |
|
ErrorLog ${APACHE_LOG_DIR}/site2-error.log |
CustomLog ${APACHE_LOG_DIR}/site2-access.log combined |
</VirtualHost> |
Tada pridėkite šiuos vardus į /etc/hosts:
127.0.0.1 site1.local |
127.0.0.1 site2.local |
Įjunkite dvius projektus:
sudo a2ensite site1.conf |
sudo a2ensite site2.conf |
Patikrinkite konfigūraciją:
sudo apachectl configtest |
Tada iš naujo įkelti Apache:
sudo systemctl reload apache2 |
Tada galėsite prieinamai naudoti dvi projektus per URL:
http://site1.local |
http://site2.local |
11. Naudojant ServerAlias
Jei projektas turi būti prieinamas per keletą vardų, naudokite ServerAlias.
Pavyzdys:
<VirtualHost *:80> |
ServerName mon-projet.local |
ServerAlias www.mon-projet.local |
|
DocumentRoot /var/www/mon-projet |
|
<Directory /var/www/mon-projet> |
Options FollowSymLinks |
AllowOverride All |
Require all granted |
</Directory> |
|
ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log |
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined |
</VirtualHost> |
Tada galėsite naudoti:
http://mon-projet.local |
arba:
http://www.mon-projet.local |
Taip pat pridėkite šiuos vartotojų vardus į /etc/hosts:
127.0.0.1 mon-projet.local www.mon-projet.local |
Apache naudoja ServerName ir ServerAlias, kad galėtų apibrėžti, kuris VirtualHost atsakytų į nurodytą užklausą.
12. Ar reikia naudoti NameVirtualHost?
Priešingai nei senesniuose Apache versijose gali būti reikalinga ši direktoriaus įrašas:
NameVirtualHost *:80 |
Šios direktoriaus įrašo nėra reikalingos su Apache 2.4.
Modernaus Debian 13 konfigūracijos atveju reikia tik:
<VirtualHost *:80> |
ServerName mon-projet.local |
... |
</VirtualHost> |
Apache 2.4 natūraliai tvarka VirtualHosts pagal vardą.
Taigi, jei kurtate naują konfigūraciją, nebūtina pridėti NameVirtualHost *:80.
13. Galutinė struktūra
Šiuo metu mūsų įstojimas atrodo tokia:
/var/www/ |
└── mon-projet/ |
└── index.php |
|
/etc/apache2/ |
├── sites-available/ |
│ └── mon-projet.conf |
└── sites-enabled/ |
└── mon-projet.conf -> ../sites-available/mon-projet.conf |
Ir /etc/hosts turėtų atrodyti taip:
127.0.0.1 mon-projet.local |
VirtualHost yra šiame konfigūracijos bloke:
<VirtualHost *:80> |
ServerName mon-projet.local |
DocumentRoot /var/www/mon-projet |
|
<Directory /var/www/mon-projet> |
Options FollowSymLinks |
AllowOverride All |
Require all granted |
</Directory> |
|
ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log |
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined |
</VirtualHost> |
Išvados
Sukurti VirtualHost Apache per Debian 13 projejto PHP lokaliniui kūrimui yra relativai paprastas procesas.
Essencinis komandiniai įrankiai yra:
sudo apt update |
sudo apt install apache2 php libapache2-mod-php |
Tada:
sudo mkdir -p /var/www/mon-projet |
sudo nano /etc/apache2/sites-available/mon-projet.conf |
Pridėkite domeną į:
sudo nano /etc/hosts |
Po to įjunkite ir patikrinkite svetainę:
sudo a2ensite mon-projet.conf |
sudo apachectl configtest |
sudo systemctl reload apache2 |
Ir paskui:
sudo apachectl -S |
Leidžia patikrinti, kuriuos VirtualHosts Apache faktine vietoje tvarko. Tada galite pasiekti savo projektą per:
http://mon-projet.local |
Šis metodas leidžia imitavti realaus svetainės struktūrą lokaliniuose testavimo aplinkose, o taip pat leidžia įkurti keletą atskirų PHP projektų vienoje Debian 13 mašinoje.
Komentarai
Kol kas nėra patvirtintų komentarų.
Prisijunkite su komentuotojo paskyra, kad galėtumėte komentuoti. Prisijungti.