Frage virtualbox und nginx Servername


Ich versuche gitlab in einem Ubuntu 12.04 Guest mit Windows7 Host zu konfigurieren. Ich kann ssh den Gast mit Port-Weiterleitung und Zugriff auf den Nginx-Server mit Port-Umleitung (8888 in Host ist 80 in Gast, so dass localhost: 8888 in Host auf den Nginx-Server im Gast), aber der Server-Name in Nginx Konfigurationsdatei ist gib mir Ärger. Was ist der korrekte Listen- und Servername, den nginx akzeptieren würde?

Der Gast hat die NAT-Schnittstelle bei 10.0.2.15 und die Host-Only-Schnittstelle bei 192.168.56.101, statisch.

Vielen Dank!

EDIT: Da der Host eine statische IP-Adresse verwendet, kann ich den Bridged-Modus für den Ubuntu-Gast nicht verwenden, daher muss ich bei Host-Only und Port Forwarding bleiben. Damit kann ich auf den nginx-Server im Gast zugreifen, aber server_name ist immer noch falsch, da ich localhost: 8888 im Windows-Host verwenden muss und ihn an Port 80 im Gast weiterleiten muss. Was sollte Servername sein?


2
2017-12-12 16:36


Ursprung




Antworten:


nginx wird den in der URL angegebenen Namen verwenden, um den Server zu erreichen und mit dem Servernamen zu vergleichen. Sie müssen den Hostnamen des Gastcomputers verwenden, um ihn zu erreichen und als Servernamen zu verwenden. Eine andere Möglichkeit ist die Verwendung eines lokalen DNS oder hosts Datei, um die richtige IP für den Hostnamen Ihres Gast-Systems (oder eine beliebige uri, die Sie wollen - eine Website in Entwicklung zum Beispiel) zu liefern und diesen Hostnamen oder URI als Servername zu verwenden.

Um einen Server auf einem Gast zu verwenden, würde ich vorschlagen, den Bridge-Modus anstelle von NAT zu verwenden, so dass Sie keine Port-Weiterleitung benötigen und viele kleine Komplikationen vermeiden. (Obs: Ich sage nicht, dass Sie nicht mit NAT arbeiten können, aber ich finde es einfacher, Bridge zu verwenden)


2
2017-12-12 17:14



Ich habe versucht, Bridged-Modus zu verwenden, aber sie der Windows-Host kann den Gast an keinem Port finden. Irgendwelche Vorschläge auf dieser Seite? Die Dokumentation zeigt für diesen Fall nichts. - Ivan
Außerdem habe ich die zweite NIC auf überbrückt. Der Windows-Host hat die IP 192.168.56.1 und der Ubuntu-Gast hat eth1 bei 192.168.56.101, aber sie können sich nicht sehen. Gibt es noch etwas, das konfiguriert werden muss? Vielen Dank - Ivan
Sie sollten sich gegenseitig sehen, wenn sie sich ohne Probleme im selben Subnetz befinden ... Ich habe den Host nie unter Windows benutzt, aber mit dem Host auf ubuntu gibt es nichts zu konfigurieren, also stelle ich mir vor, dass es dasselbe sein sollte. Sie können die IP nicht direkt oder nur mit dem Namen anpingen? Wenn es per IP erreichbar ist, ist dies ein Problem mit der Namensauflösung. Wenn Sie also kein lokales DNS haben, könnten Sie die Host - Datei des Windows - Rechners benutzen (in C:\WINDOWS\system32\drivers\etc\hosts auf WinXP - sollte auf Win7 ähnlich sein ...), um die richtige IP für Ihren Gast zu liefern (die Syntax ist die gleiche wie unter Linux). - laurent
Das Problem hier ist, dass der Host eine reale und statische IP-Adresse hat, also kann ich kein Bridged-Netzwerk verwenden. Ich muss mich mit Host-Only und Port Forwarding begnügen. - Ivan
Bei NAT ist Ihr Gast also nicht im Subnetz, das von Ihrem Router geroutet wird. Kein Problem, Sie müssen nur zum Host routen und der Host muss den Gast routen. Mit echter IP meinen Sie öffentliche statische IP? Wenn dies der Fall ist, kann es nicht hinter einem NAT sein. - laurent


Danke für die Hilfe, Laurent!

Am Ende habe ich diese Konfiguration in nginx hinterlassen:

upstream gitlab {
  server unix:/home/gitlab/gitlab/tmp/sockets/gitlab.socket;
}


server {
  listen 80 default;         # e.g., listen 192.168.1.1:80;
  #server_name thinkstation-ubuntu;     # e.g., server_name source.example.com;
  root /home/gitlab/gitlab/public;

  # individual nginx logs for this gitlab vhost
  access_log  /var/log/nginx/gitlab_access.log;
  error_log   /var/log/nginx/gitlab_error.log;

  location / {
    # serve static files from defined root folder;.
    # @gitlab is a named location for the upstream fallback, see below
    try_files $uri $uri/index.html $uri.html @gitlab;
  }

  # if a file, which is not found in the root folder is requested,
  # then the proxy pass the request to the upsteam (gitlab unicorn)
  location @gitlab {
    proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
    proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
    proxy_redirect     off;

    proxy_set_header   X-Forwarded-Proto $scheme;
    proxy_set_header   Host              $http_host;
    proxy_set_header   X-Real-IP         $remote_addr;

    proxy_pass http://gitlab;
  }
}

Und es funktioniert! Die endgültige Konfiguration ist:

Windows7-Host: Nur-Host-Schnittstelle erstellt, IP 192.168.56.1, Portweiterleitung konfiguriert: Host 8888 an Gast 80

Ubuntu 12.04 Server guest: nginx läuft, eth0 als VirtualBox NAT, eth1 mit Host-only, mit statischer IP 192.168.56.101

Ubuntu 12.04 Desktop: eth0 als Virtualbox NAT, eth1 mit Host-only mit statischer IP 192.168.56.102, Zugriff direkt 192.168.56.101 nginx, ssh, alle Dienste.

Vielen Dank!


2
2017-12-14 15:40



Ich denke, das funktioniert, weil Sie es als definiert haben listen 80 default; (Ohne Servername und mit Standard). Auf diese Weise antwortet nginx auf alles, was auf Port 80 kommt. Wenn Sie beabsichtigen, andere Sites in der Zukunft mit dieser nginx-Instanz auszuführen, müssen Sie sie anders definieren, aber für den Moment funktioniert es! ;) - laurent
Off topic, aber Laurent hat dir geholfen, das Problem zu lösen und du hast deine eigene Antwort geschrieben und deine Antwort akzeptiert? Ich denke, du hättest deine Frage editieren und die Resolution einfügen sollen und seine Antwort als akzeptiert markieren müssen. Es scheint irgendwie komisch, dass dir jemand hilft und dann akzeptiere die Punkte selbst ... - Bryan Ray