ugrás a tartalomhoz

Apache Virtual Hostok elérése belső hálózaton

Qkac · 2011. Nov. 30. (Sze), 17.53
Sziasztok, a segítségeteket szeretném kérni. Sok hasonló téma van a fórumon, de nem találtam megoldást a problémámra ami a következő:

Van itthon két gépem az egyiket hívjuk szervernek, ezen fut apache - php - mysql stb a másikat meg hívjuk kliensnek az egy sima xp-s gép.
A szerver gépen van már egy csomó weblap amit virtual hostok létrehozásával különítek el. Ez localhoston korrektül működik.
Tehát egy példa:
hosts fájlban:
127.0.0.1 test.loc

apache httpd-ben:
<VirtualHost *:80>
DocumentRoot "/Users/username/Sites/test"
ServerName test.loc
</VirtualHost>
Így ha a szerver gépen beírom a böngészőbe hogy test.loc akkor megjelenik a test mappában elhelyezett weboldal.

Azt szeretném megoldani, hogy ez ugyan így legyen a kliens gép esetén is. Tehát ha a kliens gépen beírom a böngészőbe, hogy test.loc akkor töltse be a szerver gépről a weblapot.

-A két gép látja egymást, plusz ha a kliens gép böngészőjében beírom a szerver ip-jét, akkor betölt a szerver gép localhostja. (It Works! képernyő).
Az nekem nem megoldás, hogy ip után mappastruktúrán keresztül érjem el a weblapot, szeretnék hostnévvel hivatkozni rá.

-Nem szeretnék dns szervert telepíteni ha lehet egyszerűbben szeretném megoldani.

-Hallottam olyan megoldást, hogy ha a kliens gép hosts fájlában felveszem a szerver ip-t meg a hostnevet akkor működni fog, de nálam ez nem megy. Ez jó lenne megoldásnak ha valaki írna rá egy példát esetleg tudnám mi a gond.

-nincs szükségem külső netkapcsolatra, router van de tűzfal nem akadályoz mert az apache alapértelmezett localhostját ip alapján eléri a kliens gép!

Szerintem mindent leírtam, tud valaki segíteni? :)
 
1

A kliens gépen biztosan jó

H.Z. v2 · 2011. Nov. 30. (Sze), 18.05
A kliens gépen biztosan jó fájlba írtad a címet?
Ha jól emlékszem, valami C:\windows\system32\etc\hosts az elérési útja és vigyázni kell, mert a notepad hajlamos .txt kiterjesztést hozzácsapni a mentéskor.
2

A kliens gépen a hosts fájl...

Qkac · 2011. Nov. 30. (Sze), 18.59
A kliens gépen a hosts fájl a C:\windows\system32\drivers\etc\hosts nincs rajta kiterjesztés és a tartalma a kövi:

192.168.0.10 test.loc

Gondolom ezt az ip-t kéne megadni mert erre bejön a szerver gép default localhost apache mappája az It Works! html fájllal. De ez csak akkor működik ha az ip-t írom be a kliens gépen.

Ha test.loc -ot írok, akkor az oldal nem található.
4

És ha ping test.loc-t írsz

H.Z. v2 · 2011. Nov. 30. (Sze), 20.36
És ha ping test.loc-t írsz be, akkor mi van?

update: közben még valami eszembe jutott. Meg kellene nézni az apache access.log-ját, hogy valójában milyen címet is kér a böngésződ.
Aztán: kellene a pontos hibaüzenet, mert az eddig olvasottak alapján azt sem tudnám eldönteni, hogy a web szervered mondja, hogy nem találja az oldalt vagy a böngésződ.
Továbbá: bár nem írtad, de ha jól vettem ki a szavaidból, a szervered is windows. Nem lehet, hogy a tűzfalad dobja vissza a kérést? Bár ez elég valószínűtlen, de némely windows-os tűzfalak számomra elég rejtélyes dolgokat képesek produkálni...
(hogy ilyen triviális dolgok már nem jutnak eszembe, csak hosszas gondolkodás után... ez már a vég. Munkát akarok!!!! :-) :-( )
3

A "." a test.loc-ban okozhat

Hidvégi Gábor · 2011. Nov. 30. (Sze), 20.25
A "." a test.loc-ban okozhat gondot, esetleg próbáld meg explicite beírni a címsorba, hogy http://test.loc/ vagy http://testloc/, régebbi böngészők általuk furcsának vélt címekkel sokszor nem tudnak mit kezdeni, ha nincs előtte http.

Érdekességképp: az IE7 pl. nem tud mit kezdeni ilyen virtuális hostokkal, ha a hostnévben _ jel van.
5

NameVirtualHost

gabesz666 · 2011. Nov. 30. (Sze), 20.38
Egyrészt a kliens gép hosts fájljába fel kell venni a megfelelő host neveket, ugyanazzal az ip címmel (szerver ip-jével), majd az apache konfigban definiálni kell minden egyes site-ot egyenként. Ez a következőképp nézne ki:
Listen 80
NameVirtualHost 192.168.1.1 # Szerver IP-je

<VirtualHost 192.168.1.1>
   ServerName test.loc
   DocumentRoot /var/www/site1
</VirtualHost>

<VirtualHost 192.168.1.1>
   ServerName test.loc2
   DocumentRoot /var/www/site2
</VirtualHost>
Elméletileg így működnie kéne, nem próbáltam ki!
6

Ha localhost-ról működik a

H.Z. v2 · 2011. Nov. 30. (Sze), 20.46
Ha localhost-ról működik a virtuális cím, akkor szvsz az apache konfig nagyjából rendben van. Rosszul tudom?
7

Nem teljesen

gabesz666 · 2011. Nov. 30. (Sze), 21.12
Az, hogy visszaad valamit a webszerver, illetve hogy visszaadja azt amit meghívtál az jelen esetben két külön dolog. A témaindító hozzászólásban levő konfig minden egyes kérést ugyanoda fog irányítani és pont nem ez lenne a cél. Erre való a név alapú virtualhost.

Megjegyzés: ezeket a konfigokat érdemes a httpd.conf-ból kiszedni és egy külön fájlba rakni a sites-enabled könyvtárba (ha minden igaz windows-on is kell lennie ilyennek az apache könyvtárában)
8

Akkor valamelyikőtöket nem

H.Z. v2 · 2011. Nov. 30. (Sze), 22.12
Akkor valamelyikőtöket nem értem. Vagy te siklottál át valami felett...

Nekem az jött le, hogy a szerveren a hosts-ban ott van a virtualhost-nak megadott név is. Ha erre hivatkozik, akkor a hozzá tartozó lap jön fel, ha másra, akkor az alap oldal.
A másik gépről, ha nem a virtualhost nevével szólítja meg a szervert, akkor az alapoldalt kapja válaszként, egyébként meg hibát.

Ha ez így van, akkor a virtualhost-os dolog működik, csak a "kliens" gépről vagy nem jut el a név a szerverhez vagy rosszul oldja fel a rendszere. (sites-enabled - windowson nem tudom, hogy megy, linuxból láttam már olyat, ahol nem volt ilyen)
9

Kavar

janoszen · 2011. Nov. 30. (Sze), 22.24
Hujjuj, kavar van itt. Natehát a dolog így működik:

  • Beírod a böngésződbe, hogy valamidomain.
  • Az oprendszered megnézi a nála helyben letárolt hosts fájlt, hogy van-e erre szabály. Ha van, akkor ezt az IP címet használja.
  • Ha nincs, akkor a neki megadott elsődleges és másodlagos névfeloldót kérdezi meg, hogy a valamidomain IP címe micsoda.
  • Ha van IP címe, akkor oda csatlakozik és a HTTP kérésben a szervernek megmondja, hogy melyik domaint kérték.
  • A szerver a domain név (NameVirtualHost opció) és az útvonal alapján eldönti, hogy mit szolgál ki.


Ergó, kell a DNS vagy a hosts fáj, kell a NameVirtualHost és kell maga a VirtualHost beállítás is. Ennek fényében az Apache manualt tessék elolvasni, nem mindenféle egyéb szutyok tutorialokat, mert akkor nem értitek meg, hogy mitől (nem) működik.
10

Te most leírtad azt, amit én

H.Z. v2 · 2011. Nov. 30. (Sze), 22.45
Te most leírtad azt, amit én is mondok, csak kicsit részletesebben.

De ennek így kell működnie akkor is, ha "remote" gépről csinálom és akkor is, ha a szerver a localhoston van.
Tehát ha a localhoston működik, hogy a (bocs, emlékezetből írom) a http://tesz.loc címre hivatkozva a megfelelő lap jön elő, akkor az apache konfigja rendben van.
Márpedig a kérdező (ha jól értem) azt állítja, hogy a localhost-ot megszólítva a virtualhost nevével jó lapot kap.
Így ha a szerver gépen beírom a böngészőbe hogy test.loc akkor megjelenik a test mappában elhelyezett weboldal.
11

Köszönöm a válaszokat

Qkac · 2011. Dec. 1. (Cs), 00.55
Először is köszönöm a sok választ!

-A szerver gép egy osx, de az apache itt is csak apache (Server version: Apache/2.2.20 (Unix) )

-A sites enabled könyvtárat nem értem, de van az apache2 mappán belül egy 'extra' nevű mappa, ott van elhelyezve a httpd-vhosts.conf fájlom, ebben veszem fel a vhostokat, amit beimportál a httpd.conf fájl. Ezt így nem részleteztem, de én is így használom.

-A 'szerver gépen' minden rendesen működik a böngészőben betöltődnek a weboldalak. Tehát ha beírom az egyik felvett hostot pl. http://test.loc akkor gond nélkül betölti a hivatkozott mappában található weboldalt. Ha beírom hogy http://localhost akkor pedig betölt a default apache itsworks oldal amit amúgy ki tudnék másra cserélni de most nem ez a célom.

-A kliens gépen szintén elérem ezt a szerver localhost-ot, ha a böngészőben megadom a szerver ip-jét a 192.168.0.10-et betölt az apache itworks oldala.
Viszont hiába veszem fel a kliens gép hosts fájlába ugyan azokat a host neveket mint a szervernél (azzal a különbséggel hogy itt ip-nek nem 127.0.0.1 -et adok meg hanem a szerver ip-t (192.168.0.10) mert semmi nem történik, hanem a böngésző kiírja, hogy a lap nem található. (Ez nem apache hibaüzenet, egyszerűen olyan mintha csak elgépelnél firefoxban egy weblap címet amit ezután nem talál)

-A hozzászólásokból azt gyanítom, hogy nem úgy használom a vhostokat, ahogy azt kellene. Mindjárt utánaolvasok a NameVirtualHost-nak mert szerintem itt lehet az eltérés, de addig is leírom hogy nálam hogy néz ki a dolog, ha valakinek egyértelmű a hiba, akkor kérlek rakjon helyre!

Tehát most csak a szerver gépen:
Ha egy új weblapot szeretnék csinálni, általában a következő lépéseket teszem:

1. Létrehozok egy új mappát a weblapnak:
/Users/myusername/Sites/ujweblap
tegyük fel van benne egy index.html v. php

2. Hozzáírok egy plusz sort az /etc/hosts fájlhoz:
127.0.0.1 ujweblap.loc

3. Felveszek egy vhostot az apache2/extra/httpd-vhosts.conf fájlban

<VirtualHost *:80>
DocumentRoot "/Users/myusername/Sites/ujweblap"
ServerName ujweblap.loc
ErrorLog "/private/var/log/apache2/ujweblap-error_log"
CustomLog "/private/var/log/apache2/ujweblap-access_log" common
</VirtualHost>

4. nyomok egy apache restartot

5. a böngészőbe begépelem, hogy "ujweblap.loc" És ez így működni szokott.
12

nameVirtualhost

Qkac · 2011. Dec. 1. (Cs), 01.02
és a nameVirtualHost így néz ki nálam a vhost confban:
NameVirtualHost *:80

httpd confban pedig szerepel a:
Listen 80
14

A sites enabled könyvtárat

gabesz666 · 2011. Dec. 1. (Cs), 03.16
A sites enabled könyvtárat nem értem


Ubuntu és debian alatt van ilyen könyvtár, ezekből indultam ki, OSX-et sajna nem ismerem. De egyébként ez csak egy tipp volt az átláthatóság érdekében, httpd.conf-ba is simán lehet írni a definíciókat.

Viszont hiába veszem fel a kliens gép hosts fájlába ugyan azokat a host neveket mint a szervernél (azzal a különbséggel hogy itt ip-nek nem 127.0.0.1 -et adok meg hanem a szerver ip-t (192.168.0.10) mert semmi nem történik, hanem a böngésző kiírja, hogy a lap nem található.


Windows restart megvolt hosts fájl módosítása után? Úgy rémlik, hogy minden módosítás után kell neki egy restart.

3. Felveszek egy vhostot az apache2/extra/httpd-vhosts.conf fájlban

<VirtualHost *:80>
DocumentRoot "/Users/myusername/Sites/ujweblap"
ServerName ujweblap.loc
ErrorLog "/private/var/log/apache2/ujweblap-error_log"
CustomLog "/private/var/log/apache2/ujweblap-access_log" common
</VirtualHost>


Nem vagyok apache guru, de nem vagyok biztos benne, hogy NameVirtualHost esetén a *:80 tetszik neki. Próbáld meg azt, hogy *:80 helyett megadod a szerver ip-t, ahogy fentebb írtam. (portot nem kell megadni)
15

E szerint valóban nem jó

H.Z. v2 · 2011. Dec. 1. (Cs), 08.35
Itt azt írják, hogy a NameVirtualHost *:80 valóban nem jó.
Ugyanakkor az én ubuntu szerveremen is ez van a konfigban és gond nélkül működik minden virtual hostom. (anno háromszor is átolvastam valami erről szóló doksit és annak alapján hagytam békén azt a sort)
És továbbra is azon "rugózok", hogy a szerveren futtatott böngészőből mégiscsak működik neki.

Ugyanakkor az 1.3-as(elavult! De nem kizárt, hogy OSX-en még ez fut) Apache saját doksijában meg azt írják, így jó.

Viszont eszembe jutott valami, bár lehet, hogy hülyeség: Qkac! Mi lenne, ha kivennéd a Mac-en a hosts-ból a virtuális szerverre mutató definíciót?
Esetleg kicserélnéd a hozzá tartozó valódi IP címre?
17

NameVirtualHost

janoszen · 2011. Dec. 1. (Cs), 08.41
A NameVirtualHost azt mondja meg, hogy mely IP cím-port kombóra legyen hostnév figyelés. Be lehet írni a *-ot is. VirtualHost-ra ugyanez igaz, ott is használható a csillag, úgyis a hostnév fog dönteni. Mint a linkelt oldalon írják, az a fontos, hogy a NameVirtualHost és a VirtualHost definíció megegyezzen. Azt fontos figyelembe venni, hogy ha nem találja a virtualhostot az Apache, akkor az ELSŐ vhostot fogja kiszolgálni, ami a configban van.
18

Na ehhez még álmos vagyok,

H.Z. v2 · 2011. Dec. 1. (Cs), 08.51
Na ehhez még álmos vagyok, majd megnézem újra, de talán kezdem felfogni, miről beszélsz te is, meg az a doksi is, csak gabesz666 kissé megkavart...
:-)
16

DNS

janoszen · 2011. Dec. 1. (Cs), 08.38
Akkor a DNS felől kell megtámadni. Én az önszivatás helyett az egyik domainemet használtam erre, tehát van pl olyan, hogy printer.home.janoszen.at. Sokkal egyszerűbb és karbantarthatóbb megoldás és éves hihetetlen 1-3e Ft-ba kerül. (Az AT domain drágább, de másra is lesz használva. Most van eu akció, érdemes kihasználni.)
13

A szerveren...

gabesz666 · 2011. Dec. 1. (Cs), 03.07
A szerveren a hosts fájlba felesleges beírni a site-okat. (kivéve persze ha a szerveren is szeretne tesztelni Qkac) Ahogy proclub is írta a név feloldása kliens oldalon történik meg. Ezért is írtam, hogy a hosts fájlba első lépésként fel kell venni a site-okat a kliens gépen. Ezután, ha meghívja a kliens gép valamelyik site-ot, akkor már jó helyre fog menni a kérés. De ez önmagában nem elég, ugyanis az apache alatt több site is fut és el kell neki dönteni, hogy melyik virtual host fogja kiszolgálni a kérést. Emiatt kell a site-onkénti definíció.