Toon posts:

[Apache] IP-based virtual hosts

Pagina: 1
Acties:

  • Clock
  • Registratie: maart 2005
  • Laatst online: 13-09 07:50
Hi all,

In de eeuwigdurende strijd om alle webservices die draaien op de server ook toegankelijk te maken via het internet ben ik bezig met het instellen van virtualhosts in Apache
  • Server is van buiten bereikbaar op ip xx.xxx.xx.xxx. Er is geen domeinnaam aan gekoppeld
  • Er draaien 5 webservices op de poorten 8000 t/m 8004. Ik wil Apache graag zo instellen dat middels een subdomein (of IP/bla) alle webservices toegankelijk zijn door poort 80.
  • Ik heb nu de volgende virtualhost:
    code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    <VirtualHost *:80>
      ServerName xx.xxx.xx.xxx
      ServerAlias intern
      ErrorLog logs/error_log
      CustomLog logs/access_log combined
    
      ProxyRequests Off
      ProxyPreserveHost On
      <Proxy *>
        order deny,allow
        deny from all
        allow from all
      </Proxy>
      ProxyPass / http://192.168.1.51:8003/
      ProxyPassReverse / http://192.168.1.51:8003/
    </VirtualHost>
Dit is werkend, echter moeten er nog 4 virtualhosts bij voor de andere applicaties. Bij een koppeling met een domein is het dan een kwestie van subdomein.domein.ext invoeren bij ServerName (name-based). Dit is IP-based, dus dat krijg ik niet werkend.

Ik wil geen ProxyPass /serviceX http://192.168.1.51:800X toepassen omdat niet alle programma's ondersteuning hebben voor een base_url en dan dus de CSS+links ed niet meer werken.

Mijn vraag dus: hoe maak ik zonder gebruik te maken van een domein meerdere virtualhosts aan die elk doorsluizen naar een andere poort? Ik heb nu wel een domein, maar die wil ik graag gekoppeld houden aan de server in het datacentrum. (Als een apart domein noodzakelijk is dan so be it)

  • wasted247
  • Registratie: oktober 2006
  • Laatst online: 10-07 10:57
Conclusie, wat je wilt kan niet op basis van ip, iig niet zover ik weet. Misschien dat een apache guru er een truukje voor heeft (Zie opmerking hieronder ;)). Sub dirs zou dan wel weer kunnen, echter geef je zelf al aan dat je dat liever niet wilt.

Is het niet veel makkelijker virtual hosts op basis van naam te grbuiken, en hier subdomeinen aan te hangen?

webservice1.domeinnaampje.nl etc... Die kun je wel netjes oppakken in name based virtual hosts.

[Voor 4% gewijzigd door wasted247 op 03-11-2010 18:17]


  • frickY
  • Registratie: juli 2001
  • Laatst online: 13:51
Zie de ServerPath directive.
Een vhost is pas van toepassing als het ServerPath matched.
Als je een vhost met een ServerPath /service1/ hebt en een andere met ServerPath /service2/ hebt, zijn die bereiklbaar op http://xx.xx.xx.xx/service1/ en http://xx.xx.xx.xx/service2/

code:
1
2
3
4
5
6
7
8
9
10
<VirtualHost *:80>
  ServerName xx.xxx.xx.xxx
  ServerPath /service1/
  DocumentRoot /webservice1/
</VirtualHost>
<VirtualHost *:80>
  ServerName xx.xxx.xx.xxx
  ServerPath /service2/
  DocumentRoot /webservice2/
</VirtualHost>


Zou ook nog met één vhost en een rewrite kunnen werken, maar dit is mijns inziens netter, ook al is dit eigenlijk bedoeld voor browsers die de Host-header niet meesturen.

[Voor 95% gewijzigd door frickY op 03-11-2010 18:13. Reden: derp]


  • Clock
  • Registratie: maart 2005
  • Laatst online: 13-09 07:50
frickY schreef op woensdag 03 november 2010 @ 18:03:
Zie de ServerPath directive.
Een vhost is pas van toepassing als het ServerPath matched.
Als je een vhost met een ServerPath /service1/ hebt en een andere met ServerPath /service2/ hebt, zijn die bereiklbaar op http://xx.xx.xx.xx/service1/ en http://xx.xx.xx.xx/service2/

code:
1
2
3
4
5
6
7
8
9
10
<VirtualHost *:80>
  ServerName xx.xxx.xx.xxx
  ServerPath /service1/
  DocumentRoot /webservice1/
</VirtualHost>
<VirtualHost *:80>
  ServerName xx.xxx.xx.xxx
  ServerPath /service2/
  DocumentRoot /webservice2/
</VirtualHost>


Zou ook nog met één vhost en een rewrite kunnen werken, maar dit is mijns inziens netter, ook al is dit eigenlijk bedoeld voor browsers die de Host-header niet meesturen.
Gebruikt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<VirtualHost *:80>
  ServerName xx.xxx.xx.xxx
  ServerPath /service1/
  DocumentRoot /service1/

  ProxyRequests Off
  ProxyPreserveHost On
  <Proxy *>
    order deny,allow
    deny from all
    allow from all
  </Proxy>
  ProxyPass / http://192.168.1.51:8003/
  ProxyPassReverse / http://192.168.1.51:8003/
</VirtualHost>


http://xx.xxx.xx.xxx sluist me door naar de webservice. http://xx.xxx.xx.xxx/service1/ leidt me naar internIP:8003/service1 (levert een 404 op). Nog niet helemaal werkend dus, heb je nog een magische tip? Thnx btw.

Edit: Bij het gebruiken van ProxyPass /service1/ http://192.168.1.51:8003/ (+ProxyPassReverse) krijg ik weer gedonder met de webapps die geen base_url setting hebben. (geen werkende css, 403's etc)

[Voor 31% gewijzigd door Clock op 03-11-2010 20:34]


  • frickY
  • Registratie: juli 2001
  • Laatst online: 13:51
Ik dacht dat het juist de bedoeling was dat je de Proxy niet meer nodig had?
Draaien de webservices niet op de server waarop je deze vhosts aan de praat probeert te krijgen?

  • Clock
  • Registratie: maart 2005
  • Laatst online: 13-09 07:50
Ik zit net te denken: is het eigenlijk wel mogelijk om dit te realiseren zonder subdomeinen als de applicaties geen base_url setting hebben? De eerste request (IP/service1) wordt netjes doorgesluisd naar internIP:8001. So far so good. Maar dan zitten in de opgevraagde pagina tal van relatieve verwijzingen naar afbeeldingen/css/links/etc die er dan uit gaan zien als IP/css/style.css, waarna je vanzelfsprekend een 403 krijgt. (had moeten zijn: IP/service1/css/style.css).

Bij een subdomein is dit niet aan de orde en zal het wel goed werken. Klopt het wat ik denk? Of is er toch een manier..?


Edit:
frickY schreef op woensdag 03 november 2010 @ 20:45:
Ik dacht dat het juist de bedoeling was dat je de Proxy niet meer nodig had?
Draaien de webservices niet op de server waarop je deze vhosts aan de praat probeert te krijgen?
Webservices draaien op dezelfde server ja. Ik probeerde het ook zonder Proxy, alleen kan je bij document root geen IP+poort opgeven. Dus het doorsturen naar interneIP:poort wil dan niet.
code:
1
2
3
4
5
<VirtualHost *:80>
  ServerName xx.xxx.xx.xxx
  ServerPath /service1
  DocumentRoot 192.168.1.51:8003
</VirtualHost>

[Voor 36% gewijzigd door Clock op 03-11-2010 23:33]


  • Clock
  • Registratie: maart 2005
  • Laatst online: 13-09 07:50
Heb er toch maar een domeintje aangegooid. Echter krijg ik het nog niet werkend, ik ben vervloekt denk ik.
Gebruikt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
NameVirtualHost xx.xx.xx.xxx

<VirtualHost *:80>
    ServerName service1.***********.nl

    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
    order deny,allow
    deny from all
    allow from all
  
    </Proxy>
    ProxyPass / http://192.168.1.51:8004/
    ProxyPassReverse / http://192.168.1.51:8004/
</VirtualHost>

<VirtualHost *:80>
    ServerName service2.**********.nl

    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
    order deny,allow
    deny from all
    allow from all

    </Proxy>
    ProxyPass / http://192.168.1.51:8003/
    ProxyPassReverse / http://192.168.1.51:8003/
</VirtualHost>


Echter sluist ie alles door naar de eerste virtual host (service 1). Ook als ik naar service2.*******.nl ga of naar *******.nl. Heb ook al geprobeerd CNAME records aan te maken voor de subdomeinen, maar heeft geen effect gehad. Tips?

  • Clock
  • Registratie: maart 2005
  • Laatst online: 13-09 07:50
Heb het werkend met de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
NameVirtualHost *:80
# service1
<VirtualHost *:80>
  ServerName service1.***-srv-tim.nl
  ProxyPass               /       http://192.168.1.51:8000/
  ProxyPassReverse        /       http://192.168.1.51:8000/

  <Proxy *>
    order deny,allow
    deny from all
    allow from all

    AuthUserFile /Applicaties/WAMP/pwds/.htpasswd
    AuthType Digest
    AuthName "Inloggen aub"
    require valid-user
  </Proxy>
</VirtualHost>

# service2
<VirtualHost *:80>
  ServerName service2.***-srv-tim.nl
  ProxyPass               /       http://192.168.1.51:8001/
  ProxyPassReverse        /       http://192.168.1.51:8001/

  <Proxy *>
    order deny,allow
    deny from all
    allow from all

    AuthUserFile /Applicaties/WAMP/pwds/.htpasswd
    AuthType Digest
    AuthName "Inloggen aub"
    require valid-user
  </Proxy>
</VirtualHost>

# service3
<VirtualHost *:80>
  ServerName service3.***-srv-tim.nl
  ProxyPass               /       http://192.168.1.51:8002/
  ProxyPassReverse        /       http://192.168.1.51:8002/

  <Proxy *>
    order deny,allow
    deny from all
    allow from all

    AuthUserFile /Applicaties/WAMP/pwds/.htpasswd
    AuthType Digest
    AuthName "Inloggen aub"
    require valid-user
  </Proxy>
</VirtualHost>

# service4
<VirtualHost *:80>
  ServerName service4.***-srv-tim.nl
  ProxyPass               /       http://192.168.1.51:8003/
  ProxyPassReverse        /       http://192.168.1.51:8003/

  <Proxy *>
    order deny,allow
    deny from all
    allow from all

    AuthUserFile /Applicaties/WAMP/pwds/.htpasswd
    AuthType Digest
    AuthName "Inloggen aub"
    require valid-user
  </Proxy>
</VirtualHost>

# service5
<VirtualHost *:80>
  ServerName service5.***-srv-tim.nl
  ProxyPass               /       http://192.168.1.51:8004/
  ProxyPassReverse        /       http://192.168.1.51:8004/

  <Proxy *>
    order deny,allow
    deny from all
    allow from all

    AuthUserFile /Applicaties/WAMP/pwds/.htpasswd
    AuthType Digest
    AuthName "Inloggen aub"
    require valid-user
  </Proxy>
</VirtualHost>


Dit werkt uitstekend. Echter draait er ook nog een website op poort 80 in de root folder van Apache. Deze krijg ik echter niet toegevoegd met een virtualhost. Geprobeerd:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# service6
<VirtualHost *:80>
  ServerName service6.***-srv-tim.nl
  ProxyPass               /       http://127.0.0.1:80/
  ProxyPassReverse        /       http://127.0.0.1:80/

  <Proxy *>
    order deny,allow
    deny from all
    allow from all

    AuthUserFile /Applicaties/WAMP/pwds/.htpasswd
    AuthType Digest
    AuthName "Inloggen aub"
    require valid-user
  </Proxy>
</VirtualHost>

Nu krijg ik echter op alle subdomeinen de website te zien. Zogauw ik die virtualhost weer verwijder werken de subdomeinen weer. Ook geprobeert: ProxyPass / http://192.168.1.51:80/.
Ook geprobeerd: apache omzetten naar poort 8006 en daarna verwijzen met een proxy.

Kunnen jullie me helpen?

  • frickY
  • Registratie: juli 2001
  • Laatst online: 13:51
Clock schreef op woensdag 03 november 2010 @ 20:47:
Webservices draaien op dezelfde server ja. Ik probeerde het ook zonder Proxy, alleen kan je bij document root geen IP+poort opgeven. Dus het doorsturen naar interneIP:poort wil dan niet.
code:
1
2
3
4
5
<VirtualHost *:80>
  ServerName xx.xxx.xx.xxx
  ServerPath /service1
  DocumentRoot 192.168.1.51:8003
</VirtualHost>
8)7 Heb nu werkelijk geen idee meer wat het probleem i.
Uiteraard kun je in een Document_Root, het fysieke pad waaruit geserveerd wordt, geen poort opgeven. Dat doe je in de virtualhost container;
code:
1
2
3
4
<VirtualHost *:1234>
  ServerName xx.xxx.xx.xxx
  DocumentRoot /var/www/vhosts/webservice1/
</VirtualHost>


Begrijp dat je het inmiddels werkend hebt met een domein. Als je het wel nog op puur IP wilt hebben werken zul wat duidelijker uiteen moeten zetten wat waar draait, en hoe je dat wilt benaderen.

  • Clock
  • Registratie: maart 2005
  • Laatst online: 13-09 07:50
Je hebt gelijk, het is een zooi nu (qua uitleg). Dit topic gaat nu over veel te veel verschillende dingen. Zal een nieuw topic aanmaken waarin ik ff duidelijk aangeef wat de bedoeling is en wat ik heb.

  • frickY
  • Registratie: juli 2001
  • Laatst online: 13:51
Ik was aan het zoeken of je het nieuwe topic al hebt aangemaakt, maar kwam toen juist dit oudere topic tegen; [Apache] Verschillende webservices achter Apache+1 poort

Gaat dat nog om hetzelfde probleem? Dan is het me nu vrij duidelijk.

Ik ging er van uit dat de services waar je het over had ook door Apache zelf geserveerd werden (php scripts bijv.), maar dat blijken dus hele andere deamons te zijn. Je zult dan inderdaad wel ProxyPass moeten gebruiken als je die via poort 80 beschikbaar wilt maken.

Je kunt voor elke service een vhost aanmaken, matchen met ServerPath, en het request forwarden met ProxyPass. Het kan echter ook veel korter met een paar rewrites;

code:
1
2
3
4
5
RewriteEngine On
RewriteRule ^SABnzbd/?(.*) http://localhost:8000/$1 [P]
RewriteRule ^CouchPotato/?(.*) http://localhost:8001/$1 [P]
RewriteRule ^SickBeard/?(.*) http://localhost:8002/$1 [P]
RewriteRule ^Squeezebox/?(.*) http://localhost:8000/$1 [P]
Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee