Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Proxy Domeinforward naar Subdomein -> configs in Database

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zoek een oplossing om een domein, wat normaal een vhost zou moeten zijn in apache, in een proxy te zetten en deze te forwarden naar een subdomein.

Gezien het dynamisch moet zijn denk ik aan de config op te slaan in een MySQL Database en te laden voor iedere proxy, echter welke proxy kan dit ?

Apache heeft een MySQL module maar deze lijkt niet echt geschikt voor een derlijke oplossing. Zijn er eventueel proxies welke dit kunnen, net zoals een antispam gateway werkt als eigen applicance ?

Ik zoek me wezenloos eigenlijk, het HA stuk is niet lastig, maar om de server/appliance te vinden wel.

Ideeën zijn welkom!

  • PerfectPC
  • Registratie: Februari 2004
  • Laatst online: 27-10 16:54
Dit kan niet apache's config is statisch en wordt eenmalig uitgelezen bij het starten.
Wat wil je eigenlijk bereiken? En ben je zeker dat je url rewriting voldoende hebt bekeken?

Verwijderd

Topicstarter
Het idee is om een dynamische rewrite proxy voor een aantal domeinen naar subdomeinen te maken.

Het hoeft niet zo dynamisch te zijn als een DNS refresh maar een herstart van apache zou volstaan wanneer nodig om een nieuwe config uit te lezen per vhost/proxy

Het makkelijkste is om dergelijke configs voor een proxy uit een DB te halen. Reatime lookups zijn dus niet noodzakelijk.

Verwijderd

Topicstarter
Wat een gezoek, maar mod_proxy_express lijkt dit te kunnen: http://httpd.apache.org/d...od/mod_proxy_express.html

Nu alleen een manier te vinden om het uit een Database te vissen, wellicht dat ik hier een DBD module van apache voor kan gebruiken.

  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 26-11 17:08

xleeuwx

developer Tweakers Elect
ik heb dit in het verleden idd intern ook gedaan alleen zonder de mysql koppeling

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## web03.domein.nl

<VirtualHost *:80>
    ServerAdmin systeembeheer@domein.nl
    ServerName web03.domein.nl
    ProxyRequests Off

    ProxyPreserveHost On

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://192.168.1.112/
    ProxyPassReverse / http://192.168.1.112/
</VirtualHost>


Verder hoeft de apache niet gerestart te worden hiervoor een reload is voldoende

Edit:
wellicht heb je hier iets aan ;)
http://www.rexify.org/howtos/apache-vhosts.html

[ Voor 8% gewijzigd door xleeuwx op 21-05-2014 14:53 ]


Verwijderd

Topicstarter
xleeuwx schreef op woensdag 21 mei 2014 @ 14:50:
ik heb dit in het verleden idd intern ook gedaan alleen zonder de mysql koppeling

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## web03.domein.nl

<VirtualHost *:80>
    ServerAdmin systeembeheer@domein.nl
    ServerName web03.domein.nl
    ProxyRequests Off

    ProxyPreserveHost On

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://192.168.1.112/
    ProxyPassReverse / http://192.168.1.112/
</VirtualHost>


Verder hoeft de apache niet gerestart te worden hiervoor een reload is voldoende
Yes, dank je, dit gebruik ik nu ook.

Het gaat alleen om honderden domeinen die "on the fly" aangebracht moeten kunnen worden. On the fly met een reload is opzich niet echt maar ik zit niet op honderden vhostfiles te wachten.

Nginx schijn je veel mee te kunnen maar ben ik altijd van weg gebleven. Redis, Drizzle lijken hier geschiktvoor maar benodigen redelijk wat kookwerk denk ik.

http://sosedoff.com/2012/...ith-nodejs-and-redis.html

Zoiets is het idee...


edit => thanks voor die link, die was ik kwijt... geen bookmark gister!

[ Voor 3% gewijzigd door Verwijderd op 21-05-2014 14:56 ]


  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 26-11 17:08

xleeuwx

developer Tweakers Elect
Ik zou zeker eens naar nginx gaan kijken, is zeker aan te bevelen. Maar als het met apache moet, je kan misschien met een programmeer taal één vhost file aanmaken en daarna de apache server reloaden.

Verwijderd

Topicstarter
xleeuwx schreef op woensdag 21 mei 2014 @ 14:57:
Ik zou zeker eens naar nginx gaan kijken, is zeker aan te bevelen. Maar als het met apache moet, je kan misschien met een programmeer taal één vhost file aanmaken en daarna de apache server reloaden.
Ik kijk hier momenteel ook naar, maar het is nog niet mijn ding.

Wat ik eigenlijk zoek is een ProxyPass welke ingelezen wordt uit een database en geen files schrijft.

Gezien ik een aantal frontends geloadbalanced inzet moet ik dus alles schaalbaar hebben en ook snel up te daten zonder dat ineens alles overschreven gaat worden op een host.

Stel ik heb 2000 ProxyPasses als vhosts op een server staan heb ik toch liever iets van een ProxyGateway of iets dergelijks.

  • Foeijonghaai
  • Registratie: Juli 2001
  • Laatst online: 18-11 09:04
Je kan natuurlijk ook 2000 vhosts configs in een (=1) bestand zetten. Je hoeft het niet in 2000 bestanden te zetten.

Verder kun je het laten schrijven in een aparte dir laten doen en dan pas moven of eerst laten schrijven naar een tijdelijke filename en dan pas hernoemen. Dit om allerlei problemen te voorkomen met processen die nog aan het schrijven zijn en processen die de config alweer aan het inlezen zijn.

Wat jij misschien wil is een url-rewriter zoals je die in Squid kan gebruiken. Deze rewriter is een extern programma en kan dus gemaakt worden in welke taal je maar wil. En kan dus ook een database uitlezen, als je taal daar ondersteuning voor heeft. Mogelijk zijn er ook andere proxies die dit kunnen, maar daar ben ik niet van op de hoogte.

Verwijderd

Topicstarter
Ik ben nog druk onderzoekende maar Squid lijkt wat teveel gedoe, op zich wel goed om over die url-rewriter te lezen.

Ik kan niet goed achterhalen hoe goed supported the MySQL modules voor vhosts (nog) zijn...

Verwijderd

Topicstarter
Ik zie momenteel dat er echt veel vraag is naar een dergelijke oplossing idee.

http://sosedoff.com/2012/...ith-nodejs-and-redis.html

Is een goed voorbeeld en de vraag blijft regelmatig of een MySQL query voor iedere lookup wel gewenst is. Vandaar dat hier ook een file gebruikt wordt denk ik, en tevens omdat het niet om heel veel redirects gaat.

Wanneer je een aantal ProxyServers geloadbalanced gebruikt vraag ik me af of het wenselijk is om bijvoorbeeld 10K aan vhosts te delen tussen verschillende machines. Een read-in van via MySQL bij opstarten lijkt wellicht het meest ideale.

Lighttpd gaat dit in de toekomst wellicht ondersteunen, in de tussentijd zoek ik even verder.

  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 26-11 17:08

xleeuwx

developer Tweakers Elect
en al iets gevonden ?

Je zou bijvoorbeeld met php een vhost file kunnen aanmaken zoals Foijonghaai ook vertelt, en kan je bijvoorbeeld een gehele tabel uit mysql in de file droppen, vervolgens reload je apache en dan werken de vhost's


zo zou hij er met db tabel uit zien
Script
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
<?php
// Config
    //MySQL 
        $dbhost = 'localhost'; // server ip or hostname of server
        $dbuser = 'root'; // mysql username
        $dbpass = 'Secr*t'; // mysql password
        $dbname = 'vhosts'; // mysql database
    
    // File
        $path = 'extra/'; // path to config file
        $file = 'vhost_dynamic.conf'; // file in path
        
        

// Connect DB
$mysqli = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); 

// SQL query
$sql = "SELECT `server_admin`, `from_domain`, `to_domain` FROM `vhost_table`"; 

 // run query
$res = mysqli_query($mysqli, $sql);

// Put database results into a array
while($row = mysqli_fetch_assoc($res)) {
    $vhosts[] = $row;
}


// Start writing to variabel
    $file_content = '';

    // Start comments for file
    $file_content .= '#'.PHP_EOL;
    $file_content .= '#Dynamic file from mysql'.PHP_EOL;
    $file_content .= '#'.PHP_EOL;
if(count($vhosts) > 0) {
    foreach($vhosts as $key => $value) {
        // Commands for vhost
        $file_content .= PHP_EOL;
        $file_content .= "#".PHP_EOL;
        $file_content .= "# VHOST: ".$value["from_domain"].PHP_EOL;
        $file_content .= "#".PHP_EOL;
        $file_content .= PHP_EOL;
        
        // Vhost
        $file_content .= "<VirtualHost *:80>".PHP_EOL;
        $file_content .= "\tServerAdmin ".$value["server_admin"].PHP_EOL;
        $file_content .= "\tServerName ".$value["from_domain"].PHP_EOL;
        $file_content .= "\tProxyRequest Off".PHP_EOL;
        $file_content .= "\t".PHP_EOL;
        $file_content .= "\tProxyPreserveHost On".PHP_EOL;
        $file_content .= "\t".PHP_EOL;
        $file_content .= "\t<Proxy *>".PHP_EOL;
        $file_content .= "\t\t Order deny,allow".PHP_EOL;
        $file_content .= "\t\t Allow from all".PHP_EOL;
        $file_content .= "\t</Proxy>".PHP_EOL;
        $file_content .= "\t".PHP_EOL;
        $file_content .= "\tProxyPass / ".$value["to_domain"].PHP_EOL;
        $file_content .= "\tProxyPassReverse / ".$value["to_domain"].PHP_EOL;
        $file_content .= "</VirtualHost>".PHP_EOL;
    }
}

// Write variabel to file 
file_put_contents($path.$file, $file_content);

// Reload Apache
//exec("services apache reload");
    
?>


OUTPUT
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
91
92
93
94
95
96
97
98
99
100
101
102
103
#
#Dynamic file from mysql
#

#
# VHOST: web01.domain.nl
#

<VirtualHost *:80>
    ServerAdmin system@domain.nl
    ServerName web01.domain.nl
    ProxyRequest Off
    
    ProxyPreserveHost On
    
    <Proxy *>
         Order deny,allow
         Allow from all
    </Proxy>
    
    ProxyPass / web01.todomain.nl
    ProxyPassReverse / web01.todomain.nl
</VirtualHost>

#
# VHOST: web02.domain.nl
#

<VirtualHost *:80>
    ServerAdmin system@domain.nl
    ServerName web02.domain.nl
    ProxyRequest Off
    
    ProxyPreserveHost On
    
    <Proxy *>
         Order deny,allow
         Allow from all
    </Proxy>
    
    ProxyPass / web02.todomain.nl
    ProxyPassReverse / web02.todomain.nl
</VirtualHost>

#
# VHOST: web03.domain.nl
#

<VirtualHost *:80>
    ServerAdmin system@domain.nl
    ServerName web03.domain.nl
    ProxyRequest Off
    
    ProxyPreserveHost On
    
    <Proxy *>
         Order deny,allow
         Allow from all
    </Proxy>
    
    ProxyPass / web03.todomain.nl
    ProxyPassReverse / web03.todomain.nl
</VirtualHost>

#
# VHOST: web04.domain.nl
#

<VirtualHost *:80>
    ServerAdmin system@domain.nl
    ServerName web04.domain.nl
    ProxyRequest Off
    
    ProxyPreserveHost On
    
    <Proxy *>
         Order deny,allow
         Allow from all
    </Proxy>
    
    ProxyPass / web04.todomain.nl
    ProxyPassReverse / web04.todomain.nl
    </VirtualHost>

#
# VHOST: web05.domain.nl
#

<VirtualHost *:80>
    ServerAdmin system@domain.nl
    ServerName web05.domain.nl
    ProxyRequest Off
    
    ProxyPreserveHost On
    
    <Proxy *>
         Order deny,allow
         Allow from all
    </Proxy>
    
    ProxyPass / web05.todomain.nl
    ProxyPassReverse / web05.todomain.nl
    </VirtualHost>


Ik hoor graag of dit de oplossing is :*)

ps. waarom php en geen java, er draait toch al een webserver en misschien wil je hiervoor dan geen java gebruiken, en mijn programmeerkunsten zijn beter in php als java O-). Betekend niet dat java geen optie is.

EDIT:

Script beetje aangepast. O-)

[ Voor 60% gewijzigd door xleeuwx op 26-05-2014 16:21 ]


Verwijderd

Topicstarter
Yes, ik heb een oplossing met haproxy gevonden welke niet echt je van het is en ben overgestap op varnish.

Verwijderd

Topicstarter
Ik ben toch nog even goed gaan bekijken en zie dat veel rewrites alleen op dezelfde domeinbasis gedaan worden en niet van domein naar domein.

Minder voor de hand liggend item dan ik dacht.

Ideeën blijven welkom!

[ Voor 36% gewijzigd door Verwijderd op 28-05-2014 23:16 . Reden: link deed niet ter zake ]

Pagina: 1