Перейти к содержимому

virtualbox и nginx имя_сервера

2

Я пытаюсь настроить запуск gitlab в гостевой системе Ubuntu 12.04 с хостом Windows7. Я могу ssh гостя с помощью перенаправления портов и получить доступ к серверу nginx с помощью перенаправления портов (8888 на хосте - 80 на гостевой, поэтому localhost: 8888 на хосте попадает на сервер nginx на гостевой), но имя_сервера в файле конфигурации nginx: доставляет мне неприятности Что такое правильное прослушивание и имя_сервера, что примет nginx?

Гость имеет интерфейс NAT в 10.0.2.15 и интерфейс Host-Only в 192.168.56.101, статический.

Спасибо!

РЕДАКТИРОВАТЬ: Поскольку хост использует статический IP-адрес, я не могу использовать мостовой режим для гостя Ubuntu, поэтому я должен придерживаться только Host-Only и Port Forwarding. При этом я могу получить доступ к серверу nginx в гостевой системе, но имя_сервера все еще неверно, так как я должен использовать localhost: 8888 на хосте Windows и перенаправить его на порт 80 в гостевой системе. Каким должно быть имя_сервера?

4 090 просмотров
Ivan спросил 13 лет назад
I 167

2 ответа

2

nginx проверит имя, указанное в URL, чтобы добраться до сервера, и сравнит его с именем сервера. Вы должны использовать имя хоста гостевой машины для доступа к нему и использовать его как имя сервера. Другой способ - использовать локальный DNS или hostsфайл для предоставления правильного IP-адреса для имени хоста вашей гостевой системы (или любого URI, который вы хотите - например, веб-сайт в разработке) и использовать это имя хоста или URI в качестве имени сервера.

Чтобы использовать сервер на гостевой системе, я бы предложил использовать режим моста вместо NAT, чтобы вам не нужно было переадресовывать порт и избежать множества мелких сложностей. (Obs: я не говорю, что вы не можете работать с NAT, но я считаю, что использовать мост проще)

Я пытался использовать мостовой режим, но хост Windows не может найти гостя ни на одном порту. Любые предложения на этой стороне? Документы не показывают ничего для этого случая.

Ivan · 13 лет назад · 0

Также я поменял второй сетевой адаптер на мостовой. У хоста Windows есть ip 192.168.56.1, а у гостя ubuntu - eth1 в 192.168.56.101, но они не могут видеть друг друга. Есть что-нибудь еще, что нужно настроить? Спасибо

Ivan · 13 лет назад · 0

Они должны видеть друг друга, если они находятся в одной подсети без проблем ... Я никогда не использовал хост на Windows, но с хостом на Ubuntu нечего настраивать, поэтому я предполагаю, что он должен быть таким же. Вы не можете пинговать IP напрямую или только по имени? Если он доступен по IP, это проблема разрешения имен, поэтому, если у вас нет локального DNS, вы можете использовать файл хоста машины Windows (в C: \ WINDOWS \ system32 \ drivers \ etc \ hosts на winxp - должно быть похоже на win7 ...), чтобы предоставить правильный IP для вашего гостя (синтаксис такой же, как в Linux).

laurent · 13 лет назад · 0

Проблема здесь в том, что хост имеет реальный и статический IP-адрес, поэтому я не могу использовать мостовую сеть. Придется рассчитываться только с принимающей стороной и переадресацией портов.

Ivan · 13 лет назад · 0

Таким образом, с NAT ваш гость не находится в подсети, маршрутизируемой вашим маршрутизатором. Нет проблем, вам нужно будет только маршрутизировать к хосту, а хост должен будет маршрутизировать гостя. Под реальным IP вы подразумеваете публичный статический IP? Если это так, он не может быть позади NAT.

laurent · 13 лет назад · 0
laurent ответил 13 лет назад
L 4 108
2
Принятый ответ

Спасибо за помощь, Лоран!

В итоге я оставил эту конфигурацию в nginx:

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; } } 

И это работает! Окончательная конфигурация:

Хост Windows7: создан интерфейс только для хоста, IP 192.168.56.1, настроена переадресация портов: хост 8888 на гостевой 80

Ubuntu 12.04 Гость сервера: nginx запущен, eth0 как VirtualBox NAT, eth1 с Host-only, со статическим ip 192.168.56.101

Ubuntu 12.04 Desktop: eth0 как Virtualbox NAT, eth1 с Host-only со статическим ip 192.168.56.102, прямой доступ к 192.168.56.101 nginx, ssh, всем сервисам.

Спасибо!

Я думаю, что это работает, потому что вы определили его как listen 80 default; (без servername и с default). Таким образом, nginx ответит на все, что поступит на его порт 80. Если вы собираетесь запускать другие сайты в будущем с использованием этого экземпляра nginx, вам придется определить их по-другому, но сейчас это работает! ;)

laurent · 13 лет назад · 1

Не по теме, но Лоран помог вам решить проблему, и вы опубликовали свой ответ и приняли ваш ответ? Я думаю, что вы должны были отредактировать свой вопрос и включить резолюцию и отметить его ответ как принятый. Кажется странным, когда кто-то помогает тебе, а потом сам принимает баллы ...

Bryan Ray · 12 лет назад · 1
Ivan ответил 13 лет назад
I 167