• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Weiterleitung auf verschiedene Ports einer Adresse

Hallo,

folgendes habe ich vor:

Mit meine.domain -> direkt auf den Apache-Server, welcher auf port 8080 läuft
Mit meine.domain/seite -> auf ein Programm, dass einen webserver mit sich bringt, welcher auf Port 8000 läuft.

Ich hab das schon mit ProxyPass... direkt in Apache versucht, jedoch funktioniert dies nicht wirklich. (Links und CSS Funktionieren nicht)
Deshalb wollte ich es jetzt mit squid versuchen.
Ich bin jetzt schon soweit, dass wenn ich auf meine.domain gehe, direkt bei meinem apache-Server auf Port 8080 lande. :)

Ist das überhaupt so realisierbar?
 

framp

Moderator
Teammitglied
Ich würde mit rewrite rules in einer .htaccess meine.domain/seite so umbiegen, dass der Request auf Deinen anderen Webserver auf Port 8000 redirected wird.
 

framp

Moderator
Teammitglied
gForce1989 schrieb:
Kannst du mir das bitte etwas näher erläutern?
Bin noch ziemlich neu in der Branche. :eek:ps:
War ich auch mal ;) Wird sich aber auch bei Dir ändern :D
Genaugenommen wird das mod_rewrite Module von Apache darin benutzt. Damit kann man sämtliche Requests, die am Server reinkommen, umbauen. Leider ist die Syntax nicht sehr intuitiv.

Ich denke das folgende Fragment könnte ein Startpunkt sein (ist ungetestet!)
Code:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^http://^(www\.)?meine.domain/seite [NC]
RewriteRule (.*) http://meineAndere.domain:8000 [R,L]
Die zweite Zeile testet, ob die eingehende URI auf Deine meine.domain/seite zeigt und die dritte Zeile schiesst das dann auf die andere Domain und Port 8000 um.
 
OP
G

gForce1989

Newbie
Ne haste mich ne :D
Hatte nur noch keine Zeit es mal auszuprobieren. Aber danke erset einmal. Melde mich wieder, wenn ich es geschafft habe oder irgendwelche Probleme Auftreten
 
OP
G

gForce1989

Newbie
Hab jetzt ein bisschen rumgespielt. Klappt irgendwie net.
Jetzt wollte ich das direkt in Apache einbauen, damit ich Squid nicht nutzen muss.
Das Weiterleiten klappt, jedoch wird die Seite falsch dargestellt und die links beziehen sich nicht auf
http/meine.domain/seite/
, sondern auf
http/meine.domain/
.

Hier der Config-Teil:
Code:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteLog rewrite.log
RewriteLogLevel 9
RewriteCond %{REQUEST_URI} /seite/.*
RewriteRule .*/(.*) http://localhost:8000/$1 [P] [L]
RewriteCond %{HTTP_REFERER} http://localhost/seite.*
RewriteRule .*/(.*) http://localhost/seite/$1 [R]
</IfModule>

Kannst du mir da evtl. auch helgfen?
 

framp

Moderator
Teammitglied
gForce1989 schrieb:
Das Weiterleiten klappt, jedoch wird die Seite falsch dargestellt und die links beziehen sich nicht auf
http/meine.domain/seite/
, sondern auf
http/meine.domain/
Sorry - das verstehe ich nicht. Was wird falsch dargestellt bzw was machst Du und was für ein Ergebnis bekommst Du?

Mein Vorschlag: Schreibe doch mal genau auf welche QuellURL in welche ZielURL umgeschrieben werden soll. Dann bekommen wir sicherlich auch die Regeln hin die das erledigen ;)
 
OP
G

gForce1989

Newbie
Also,
das Programm, es handelt sich um pyload, hat ein Webinterface. Es läuft auf Port 8000.
Ich kann per http://xx.dyndns.org:8000/ auf es drauf zugreifen.
Ich würde gern aber über http://xx.dyndns.org/pyload/ drauf zugreifen können.
Es ist auch schon mit den obigen Rewrite-Rules über http://xx.dyndns.org/pyload/ zu erreichen. Jedoch ist der Seitenaufbau nicht korrekt.
Hintergrundbild Fehlt, alle Links stehen untereinander, es sind Sachen zu sehen, die nur nach anklicken von bestimmten Links erscheinen.
Wenn ich jetzt auf einen Link klicke, z.B. Logs, dann kommt ein 404-Fehler und in der Adresse steht http://xx.dyndns.org/logs/ anstatt http://xx.dyndns.org/pyload/logs/.

Quell-URL: http://xx.dyndns.org:8000/ bzw. http://localhost:8000/
Ziel:URL: http://xx.dyndns.org/pyload/

Ich danke für deine Antwort und hoffe, dass dir das was nützt.
 

framp

Moderator
Teammitglied
Ich kann per http://xx.dyndns.org:8000/ auf es drauf zugreifen.
Ich würde gern aber über http://xx.dyndns.org/pyload/ drauf zugreifen können.
und
Quell-URL: http://xx.dyndns.org:8000/ bzw. http://localhost:8000/
Ziel:URL: http://xx.dyndns.org/pyload/
widersprechen sich für mich.

Ich denke Du meinst:
Code:
Quell-URL: http://xx.dyndns.org/pyload/* bzw. http://localhost:/pyload/*
Ziel:URL: http://xx.dyndns.org/*:8000
Die folgende Rule sollte das richtige Mapping sein (ungetestet ;-) )
Code:
RewriteRule ^/pyload/(.*)$ /$1:8000
Da wird einfach der String /pyload aus der URI rausgenommen und noch :8000 am Ende angehängt.
 
OP
G

gForce1989

Newbie
Funktioniert leider auch nicht Wirklich. :-/
Immernoch die selben Fehler.
Soweit ich weiß, verwendet Pyload CSS, falls was zu bedeuten haben söllte.

Hier nochmal der aktuelle Config-Ausschnitt.

Code:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteLog rewrite.log
RewriteLogLevel 9
RewriteCond %{REQUEST_URI} /pyload/.*
RewriteRule .*/(.*) http://localhost:8000/$1 [P] [L]
RewriteCond %{HTTP_REFERER} http://localhost/pyload.*
RewriteRule .*/(.*) http://localhost/pyload/$1 [R]
RewriteRule ^/pyload/(.*)$ /$1:8000
</IfModule>
 

framp

Moderator
Teammitglied
gForce1989 schrieb:
Funktioniert leider auch nicht Wirklich.
Schade. Nur leider kann ich Dir nicht helfen wenn Du keine Info lieferst was genau nicht geht und/oder welche Fehlermeldungen Du bekommst :-(
Soweit ich weiß, verwendet Pyload CSS, falls dir das auch was nützen könnte.
Das ist nicht das Problem. Da ist noch irgendein Denkfehler. Aus den ApacheLogs sollte es möglich sein rauszufinden was schief läuft.
 
OP
G

gForce1989

Newbie
Hier mal der Unterschied:

falschb.jpg


Das erste ist mit http://xx.dyndns.org/pyload aufgerufen und das zweite (korrekte) mit http://xx.dyndns.org:8000
Das Weiterleiten funktioniert ja, jedoch wird, halt wie auf dem ersten Bild zu sehen, die Seite falsch dargestellt und die Links funzen nicht.

z.B. der Link Logs. Da kommt folgende Fehlermeldung:
Not Found

The requested URL /logs/ was not found on this server.
 
OP
G

gForce1989

Newbie
So und hier noch der Logeintrag:
Code:
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88b23d8/initial] (2) init rewrite engine with requested uri /pyload/
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88b23d8/initial] (3) applying pattern '.*/(.*)' to uri '/pyload/'
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88b23d8/initial] (4) RewriteCond: input='/pyload/' pattern='/pyload/.*' => matched
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88b23d8/initial] (2) rewrite '/pyload/' -> 'http://localhost:8000/'
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88b23d8/initial] (2) forcing proxy-throughput with http://localhost:8000/
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88b23d8/initial] (1) go-ahead with proxy request proxy:http://localhost:8000/ [OK]
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88bc400/initial] (2) init rewrite engine with requested uri /login/
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88bc400/initial] (3) applying pattern '.*/(.*)' to uri '/login/'
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88bc400/initial] (4) RewriteCond: input='/login/' pattern='/pyload/.*' => not-matched
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88bc400/initial] (3) applying pattern '.*/(.*)' to uri '/login/'
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88bc400/initial] (4) RewriteCond: input='' pattern='http://localhost/pyload.*' => not-matched
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88bc400/initial] (3) applying pattern '^/pyload/(.*)$' to uri '/login/'
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88bc400/initial] (3) applying pattern '.+\.css$' to uri '/login/'
192.168.1.7 - - [23/Nov/2010:17:51:22 +0100] [server/sid#83c0348][rid#88bc400/initial] (1) pass through /login/
Ich hab mich zuvor direkt per http://xx.dyndns.org:8000/ mit dem Programm verbunden und mich bei pyload abgemeldet.
Danach hab ich mich mit http://xx.dyndns.org/pyload/ verbunden. Da kommt dann der selbe Fehler(404) wie bei Logs und in der Adresse steht dann http://xx.dyndns.org/login/?next=/
 

framp

Moderator
Teammitglied
Hm ... da bin ich so langsam auch am Ende mit meinem Latein. Da es sich hier ja nicht mehr um squid sondern um Apache reqrite handelt wäre es wohl ganz gut den Thread zu LAMP zu verschieben. Vielleicht wissen dort andere Leute weiter.

@Stefan schieb ;-)
 
OP
G

gForce1989

Newbie
Könntest du mir bitte mal ein vollständiges Script für mein Vorhaben schreiben?
Für "RewriteBase /" muss ja ein Directory angelegt werden. Hab ich gemacht, jedoch funktioniert dann die weiterleitung überhaupt nicht mehr.

Code:
<Directory /pyload/> 
<IfModule mod_rewrite.c>
RewriteBase /
RewriteEngine on
RewriteCond %{REQUEST_URI} /pyload/.*
RewriteRule .*/(.*) http://localhost:8000/$1 [P] [L]
RewriteCond %{HTTP_REFERER} http://localhost/pyload.*
RewriteRule .*/(.*) http://localhost/pyload/$1 [R]
RewriteRule ^/pyload/(.*)$ /$1:8000
RewriteRule .+\.css$ http://localhost:8000/$0 [L,P]
</IfModule>
</Directory>
RewriteLog rewrite.log
RewriteLogLevel 9
 
Oben