NGINX: Virtual Hosts unerreichbar

B

BulliM

Guest
[GELÖST] Ich habe ein Problem mit nginx. Benutze ihn das erste Mal zum Testen auf dem Raspberry Pi2. Im Idealfall will ich darauf zwei kleine Websites per dynDNS hosten. Meine EasyBox904 lässt das mit bestimmten Diensten ja zu.

Testen konnte ich das bisher aber nicht, weil ich die virtuellen Hosts nicht einmal lokal im Browser erreichen kann. Lediglich die Nginx-Default-Seite öffnet sich unter der Lan-IP des Raspberry (192.168.2.110) im Browser. PHP läuft auch, alles easy. Nur die Vhosts wollen sich nicht melden.

Ich habe zwei Serverscripts für die Vhosts unter /etc/nginx/sites-available angelegt und mAn auch richtig konfiguriert, sowie die Verknüpfungen in /etc/nginx/sites-enabled eingerichtet. Den Server habe ich natürlich nach jeder Änderung neugestartet. Trotzdem kann ich die Seiten nicht erreichen.

Wenn ich also 192.168.2.110/seite.tlv eingebe, bekomme ich einen 404-Error. Woran kann das liegen? Ist das überhaupt die richtige Adresse? Muss ich die Domains noch in die /etc/hosts eintragen? Das hatte ich testweise schon gemacht, aber ohne Erfolg.

Hier eines der Serverfiles. Vielleicht fehlt ja doch noch was. Der Dummy seite.tlv lautet im Original natürlich anders.

Code:
server {
	listen 80;
	listen [::]:80;

	server_name seite.tlv www.seite.tlv;

	root /var/www/seite.tlv/httpdocs;

	location / {
		try_files $uri $uri/ =404;
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
	}

	location ~ /\.ht {
		deny all;
	}
}

Kann jemand helfen?
 
Last edited by a moderator:
Das Problem scheint -imho- zu sein dass du die Seite '192.168.2.110' und nicht server_name aufrufst.

Der Browser kontaktiert nicht einfach nur eine IP-Adresse - er sendet auch mit welche Domain er dort haben will.

In deinem Fall kontaktiert er 192.168.2.110 und möchte die Seite 192.168.2.110.

Tippst du aber http://server_name ein dann kontaktiert er 192.168.2.110 fordert aber die Seite server_name an.

Für den TCP-IP Kontakt ist natürlich die IP wichtig. Für Nginx (oder Apache) ist wichtig welche Seite der Browser will.

Ich würde an deiner Stelle mal versuchen http://server_name einzugeben.
(Natürlich muss das DNS das auch auflösen auf die richtige IP)

Ich kenne mich zwar mit Nginx garnicht aus, denke aber dass ich das Problem getroffen habe. Im Zweifelsfall hilft immer der Blick in Logfiles!

Thomas
 
Das Problem scheint -imho- zu sein dass du die Seite '192.168.2.110' und nicht server_name aufrufst.

Der Browser kontaktiert nicht einfach nur eine IP-Adresse - er sendet auch mit welche Domain er dort haben will.

In deinem Fall kontaktiert er 192.168.2.110 und möchte die Seite 192.168.2.110.

Tippst du aber http://server_name ein dann kontaktiert er 192.168.2.110 fordert aber die Seite server_name an.

Für den TCP-IP Kontakt ist natürlich die IP wichtig. Für Nginx (oder Apache) ist wichtig welche Seite der Browser will.

Ich würde an deiner Stelle mal versuchen http://server_name einzugeben.
(Natürlich muss das DNS das auch auflösen auf die richtige IP)

Ich kenne mich zwar mit Nginx garnicht aus, denke aber dass ich das Problem getroffen habe. Im Zweifelsfall hilft immer der Blick in Logfiles!

Thomas
Nee, das geht ja gar nicht. Weil ich ja von einem anderen Rechner im LAN auf den Server zugreife. ein HTTP-Request wird natürlich ins Netz geleitet. Da gibt es die Seiten natürlich schon. Liegen auf einem vServer. DNS löst dementsprechend noch auf dessen IP auf.

Bevor ich umschalte, muss ich alle Funktionen natürlich lokal testen. Darum geht es.

Wenn ich mit dem Apachen (läuft auf meinem jetzigen Rechner) auf den Localhost zugreife, geht er ja auch in den DocumentRoot. Will ich von da auf eine Site zugreifen, gibt es dafür im DocumentRoot jeweils ein eigenes Verzeichnis. Das ist aber auf dem Nginex anders. Da liegen die Vhosts in eigenen Verzeichnissen. Könnte ich auch für den Apachen machen - müsste es dann nur in die httpd.conf eintragen.

Die Frage ist, wie macht nginx das? Eigene Serverfiles sollen reichen. Die habe ich mit Symlinks eingebunden und den Server neu gestartet. Das access_log protokolloert den Zugriff. Trotzdem bleibt der Browser leer bzw. es gibt 404.
 
Ich habe bisher mit nginx noch nicht gearbeitet, aber du arbeitest mit einem Name-based Virtual Host, der erst mal nur auf Anfragen reagiert, die auch den passenden Hostnamen im HTTP-Protokoll mit übermitteln. Bei Anfragen direkt über die IP-Adresse gehen diese standardmäßig auf den Default-Host der Konfiguration (beim Apache ist dies normalerweise der zuerst definierte, wird bei anderen Webservern ähnlich sein).
Du mußt also deinen NGINX so konfigurieren, das der vHost sich auch für Anfragen ohne Hostname zuständig fühlt. Alternativ verwendest du für deine Test-Umgebung eine Domain, die es im Internet nicht gibt (das mache ich bei mir - diese Test-Domain existiert nur auf meinem lokalen Webserver und wird auch nur von meinem lokalen DNS-Server aufgelöst)
 
Ich habe bisher mit nginx noch nicht gearbeitet, aber du arbeitest mit einem Name-based Virtual Host, der erst mal nur auf Anfragen reagiert, die auch den passenden Hostnamen im HTTP-Protokoll mit übermitteln. Bei Anfragen direkt über die IP-Adresse gehen diese standardmäßig auf den Default-Host der Konfiguration (beim Apache ist dies normalerweise der zuerst definierte, wird bei anderen Webservern ähnlich sein).
Du mußt also deinen NGINX so konfigurieren, das der vHost sich auch für Anfragen ohne Hostname zuständig fühlt. Alternativ verwendest du für deine Test-Umgebung eine Domain, die es im Internet nicht gibt (das mache ich bei mir - diese Test-Domain existiert nur auf meinem lokalen Webserver und wird auch nur von meinem lokalen DNS-Server aufgelöst)
Verstehe. Ist ja auch logisch. Ich habe eine statische für den RPi vergeben. Ich trage die einfach mal mit in die Variable server_name ein und schaue was passiert. (EDIT: Hat nicht funktioniert!)

Ich habe den Tipp bekommen, dass ein lokaler DNS-Server (bind9) den Job übernehmen kann. Ist das richtig? Den habe ich aber auch erst einmal konfiguriert.
 
Last edited by a moderator:
Verstehe. Ist ja auch logisch. Ich habe eine statische für den RPi vergeben. Ich trage die einfach mal mit in die Variable server_name ein und schaue was passiert. (EDIT: Hat nicht funktioniert!)

Ich habe den Tipp bekommen, dass ein lokaler DNS-Server (bind9) den Job übernehmen kann. Ist das richtig? Den habe ich aber auch erst einmal konfiguriert.
Ja. Bei mir z.B. fungiert der RPI2 als DHCP, DNS (beides dnsmasq), NAS und kleiner Webdev Server.

Wichtig ist dann eben das der RPI als DNS server eingetragen wird


Oder ganz alternativ den unschönen lokalen "host" hack.
 
Ich denke was MadMakz sagen will ist dass du die IP und den Hostname einfach in deine lokale Hosts-Datei eintragen solltest.

Sobald der "ping HOSTNAME" mal richtig auflöst müsst es auch im Firefox gehen!

Thomas
 
Ich habe den Tipp bekommen, dass ein lokaler DNS-Server (bind9) den Job übernehmen kann. Ist das richtig? Den habe ich aber auch erst einmal konfiguriert.
Bind kann die Namesauflösung in deinem lokalen Netz übernehmen, wahrscheinlich würde dir aber was leichtgewichtigeres wie dnsmasq für deine Zweckes völlig ausreichen.
Als Alternative kannst du natürlich wie bereits erwähnt, die Zuordnung FQDN -> IP in der lokalen host Datei auf dem Client-PC vornehmen, der diese benötigt (wenn es denn nur einer ist, dürfte das die einfachste Methode sein).
 
Okay. das sind wohl brauchbare antworten. Ich versuche das mit der hosts.conf auf meinem Client.

@Danton: dnsmasq werde ich mir mal ansehen. Ja, ich suche vor allem ressourcensparende Software. Sonst könnte ich ja auch auf den Apache zurückgreifen, den ich viel besser kenne. Aber da Nginx sowieso schwer im Kommen ist und mittlerweile überall verfügbar ist, will ich mich da auch einarbeiten. Muss natürlich erstmal laufen. ;)

Normalerweise entwickle auf meinem Windows-Desktop. Netzwerk-Konfiguration im LAN ist mir fremd. Das macht es nicht leichter. Also danke für eure Hilfe bis hierher. Ich melde mich wieder.

EDIT: Das funzt teilweise. Wenn ich jetzt raspberry.pi in die Adresszeile eingebe, öffnet sich die Seite im DocumentRoot. Aber auch die eingetragene Domain gibt nicht mehr 404 sondern 403 (forbidden) ! Und das sollte zu beheben sein. Ich schraube da nochmal ein bisschen daran herum.

EDIT2: Funzt. Ich habe noch die Direktive index index.html index.htm index.php; in die Server eingetragen. Jetzt kann ich die Seiten aufrufen. Cool! Danke Leute!
 
Last edited by a moderator:
Back
Top