Apache mit Thin für Rails Konfigurieren

Bender86

Lieutenant
Registriert
Jan. 2007
Beiträge
718
Moin moin, ich hoffe mal das ist das richtige Unterforum, wenn nicht bitte bescheid sagen wo es hin sollte. :)

Also ich versuche grade für Testzwecke Apache einzurichten, der als Load Balancer für 3 Thinserver dient. Als Anleitung dazu habe ich diesen Artikel gefunden und mich abgesehen von kleineren Namensänderungen auch an diesen gehalten.

Es sieht bei mir im Moment so aus: Ich habe einen Ubuntu Server auf einer virtuellen Maschine laufen, auf dem alles (Apache, Thin, Rails) installiert ist. Ich möchte das wenn ich im Browser diese virtuelle Maschine ansurfe auf einem der Thin Server lande und die Rails Anwendung zu sehen kriege.

Stand der Dinge ist, wenn ich den Server ohne Port angabe im Browser ansurfe auf der Default Seite aus /var/www/ lande. Wenn ich zusätzlich den Port eines der Thin Server angebe (z.B <ip>:5000) bekomme ich eine Rails Fehlermeldung das die angeforderte Seite nicht gefunden wurde. Es ist aber zumindest eine Rails Fehlermeldung also auf Port 5000 läuft ein Thin Server mit der Rails Anwendung.

Ich vermute, das der Fehler in meiner dazu angelegten sites-available Datei liegt. Da aber sowohl Apache als auch Thin für mich Neuland sind weiß ich es nicht genau. Angelegt habe ich dort eine "localhost" Datei mit diesem Inhalt:

Code:
<VirtualHost *:80>
  ServerName localhost
  ServerAlias localhost

  DocumentRoot /home/bender/public_html/testapp/public

  RewriteEngine On

  <Proxy balancer://thinservers>
    BalancerMember http://127.0.0.1:5000
    BalancerMember http://127.0.0.1:5001
    BalancerMember http://127.0.0.1:5002
  </Proxy>

  # Redirect all non-static requests to thin
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule ^/(.*)$ balancer://thinservers%{REQUEST_URI} [P,QSA,L]

  ProxyPass / balancer://thinservers/
  ProxyPassReverse / balancer://thinservers/
  ProxyPreserveHost on

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

  # Custom log file locations
  ErrorLog  /home/bender/public_html/testapp/log/error.log
  CustomLog /home/bender/public_html/testapp/log/access.log combined

</VirtualHost>

So, um mal zum Punkt zu kommen was ich fragen möchte: kann mir jemand sagen wie ich Apache nun dazu bringe auf die Thin Server zu redirecten wenn man den Server auf Port 80 ansurft?
 
Hi,

wie ich das sehe hast du in deiner conf als ServerName localhost angegeben. Wenn du von außerhalb kommst, in dem Fall dein Hostbetriebssystem für deine VM Ware, greifst du ja nicht über localhost auf die site zu sondern in deinem Fall wahrscheinlich über eine IP Adresse. Hast du schonmal versucht den DNS Namen deines Gastbetriebsystems als ServerName zu benutzen?
Und was bekommste denn wenn du auf der console im ubuntu mal ein "wget http://localhost" machst?

greetz
chunkT
 
Ja ich wusste ehrlich gesagt nicht was ich dort eintragen sollte. Einen DNS Namen hat meine virtuelle Maschine doch garnicht oder? Und die IP wird per DHCP vergeben, von daher dachte ich mir wenn ich einfach localhost eintrage werden einfach alle Anfragen an den Server an die Thin-Server weitergeleitet. Aber wie gesagt ist das das erste mal das ich je einen Webserver (versuche) zu konfigurieren.

Zu wget:

Code:
wget http://localhost
--2010-10-25 23:04:52--  http://localhost/
Auflösen des Hostnamen »localhost«.... ::1, 127.0.0.1
Verbindungsaufbau zu localhost|::1|:80... fehlgeschlagen: Connection refused.
Verbindungsaufbau zu localhost|127.0.0.1|:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 404 Not Found
2010-10-25 23:04:52 FEHLER 404: Not Found.

Das verwundert mich ein wenig. Sollte hier nicht die die /var/www/index.html abgerufen werden die ich zu sehen bekomme wenn ich die Server IP aufrufe?

Ich habe grade mal Versuchshalber mein "localhost" aus der virtual Host Datei durch die konkrete IP-Adresse ausgetauscht. Nun bekomme ich auf Port 80 eine Rails Fehlermeldung was mir schonmal sehr gut aussieht und wget liefert nun:

Code:
wget localhost
--2010-10-25 23:11:26--  http://localhost/
Auflösen des Hostnamen »localhost«.... ::1, 127.0.0.1
Verbindungsaufbau zu localhost|::1|:80... fehlgeschlagen: Connection refused.
Verbindungsaufbau zu localhost|127.0.0.1|:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 77 [text/html]
In »»index.html.1«« speichern.

100%[=========================================================>] 77          --.-K/s   in 0s      

2010-10-25 23:11:26 (3,43 MB/s) - »»index.html.1«« gespeichert [77/77]

Wobei diese Lösung wohl nicht grade optimal ist, denn die IP wird per DHCP vergeben und kann sich ja jederzeit ändern.
 
Kannst du denn keine feste IP für den Server vergeben? DHCP ist zwar meistens sehr nützlich, bei Servern sollte man aber auf statische IPs gehen.
Gruß Ralle
 
Doch könnte ich in dem Fall tatsächlich machen. ;) Besteht denn trotzdem die Möglichkeit Apache zu sagen das einfach alle Anfragen auf Port 80, egal welche IP der Server nun tatsächlich hat einfach an die Thin-Server geleitet werden?

P.s: Nachdem ich nun die Rails Anwendung konfiguriert habe erscheint auch keine Fehlermeldung mehr, sondern ich lande auf der jeweiligen gewünschten Rails Seite.
P.p.s: Das mir die Lösung mit fester IP nicht so lieb ist liegt einfach nur daran, das der Server nie ein "echter" Server wird der in meinem Netz irgendeinen Zweck erfüllen soll sondern nur eine Spielwiese ist um einige Dinge mit Rails auszuprobieren (zB wie ich dort HTTPS verwenden kann). Falls das aber nicht oder nur umständlich geht ist eine feste IP auch kein Beinbruch.
 
Zuletzt bearbeitet:
Zurück
Oben