Nginx: przekierowanie na maszyny wirtualne (prywatny adres IP)

1

Chcę skonfigurować zestaw usług internetowych dla moich kolegów z mojego laboratorium; proste rzeczy, takie jak wiki, cms, git itp., abyśmy mogli lepiej dokumentować nasze projekty. Jestem fizykiem, a nie CS, więc przepraszam, jeśli coś przeoczyłem.

Usługi będą znajdować się za tym samym (publicznym) adresem IP. W tym celu skonfigurowałem maszyny wirtualne jako dostawców usług i zainstalowałem Nginx na maszynie hosta, aby przekierowywać odpowiednie połączenia do maszyn wirtualnych.

Problem, który mam, wydaje się być związany ze ścieżką (url) używaną po nazwie hosta. Nie wiem, czy jest to związane z przekierowaniem Nginx, czy z samymi usługami internetowymi.

Obecnie scenariusz wygląda następująco:

  • Komputer hosta ma publiczny adres IP powiązany z nazwą domeny. Chciałbym użyć tutaj, dla uproszczenia, „www.example.com”.
  • Maszyny wirtualne mają prywatne adresy IP. Jeden ma zainstalowanego Drupala, drugi Mediawiki, a trzeci Gitlaba.
    • Maszyna „drupal” ma IP 192.168.56.20
    • Maszyna „wiki” ma adres IP 192.168.56.11
    • Maszyna „git” ma IP 192.168.56.19
  • Na komputerze hosta jest zainstalowany (oprócz VirtualBox) Nginx. Moim celem w Nginx jest proste rozwiązanie dla następujących przekierowań:
    • www.example.com/drupal ---> przechodzi do maszyny „drupal”
    • www.example.com/wiki ---> przechodzi na maszynę „wiki”
    • www.example.com/git ---> przechodzi do maszyny „git”
  • Aby skonfigurować Nginx, po prostu zmodyfikowałem domyślny plik konfiguracyjny ( /etc/nginx/sites-enabled/default).

Występują problemy: - Kiedy próbuję uzyskać dostęp www.example.com/wiki(z dowolnego komputera w sieci) lub localhost/wiki(z komputera hosta), adres URL jest zmieniany na (zwykle) www.example.com/wikilub localhost/Main_Pageodpowiednio i pojawia się komunikat „ 404 Nie znaleziono ”. - To samo dzieje się, gdy próbuję localhost/git: po przekierowaniu pojawia się błąd „404 Nie znaleziono” localhost/users/sign_in. - Kiedy próbuję, localhost/drupalwszystko działa dobrze, ale tylko do momentu zmiany ścieżki strony internetowej (na przykład klikam przycisk „Zarejestruj się”), a następnie localhost/user/registernie działa („404 nie znaleziono”).

Rozumiem, że błędy te dotyczą adresu URL. Jest dla mnie jasne, że Nginx nie wie, co zrobić (np.), localhost/Main_PagePonieważ nie powiedziałem mu, co z tym zrobić, ale jak to naprawić? To znaczy, kto odpowiada za to między Nginx a usługami?

Zaloguj się i wykonaj konfigurację. Modyfikacje, które wprowadziłem w pliku konfiguracyjnym Nginx, zostały zaczerpnięte z tego ładnego samouczka .

Jakaś pomoc? Z góry dziękuję.

Oto dziennik, w którym próbuję uzyskać dostęp (zgodnie z powyższym opisem) do „/ wiki”, „/ git” i „/ drupal (i klikając przycisk„ Zarejestruj się ”) ​​z„ lokalnego hosta ”:

127.0.0.1 - - [29/Jul/2015:12:44:41 +0200] "GET /wiki HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:44:41 +0200] "GET /Wiki HTTP/1.1" 404 208 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:17 +0200] "GET /wiki HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:17 +0200] "GET /Main_Page HTTP/1.1" 404 208 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:24 +0200] "GET /git HTTP/1.1" 302 111 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:24 +0200] "GET /users/sign_in HTTP/1.1" 404 208 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:31 +0200] "GET /drupal HTTP/1.1" 200 2255 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:36 +0200] "GET /user/register HTTP/1.1" 404 208 "http://localhost/drupal" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"

Oto mój plik konfiguracyjny Nginx:

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/html;
index index.html index.htm;

# Make site accessible from http://localhost/
server_name localhost;

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
}

location /wiki {
    rewrite ^/wiki(.*) /$1 break;
    proxy_pass http://192.168.56.11;
}

location /drupal {
    rewrite ^/drupal(.*) /$1 break;
    proxy_pass http://192.168.56.20;
}

location /git {
    rewrite ^/git(.*) /$1 break;
    proxy_pass http://192.168.56.19;
}

location /google {
    rewrite ^/google(.*) /$1 break;
    proxy_pass http://www.google.com;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found off;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

}
Brandt
źródło

Odpowiedzi:

1

Powinieneś spojrzeć na instrukcję proxy_redirect . Dokument dotyczy dokładnie takiej sytuacji, w której chcesz, aby odpowiedź przekierowania wracająca z serwera proxy została przepisana na widok adresu URL z zewnętrznego świata.

Prawdopodobnie potrzebujesz tylko w każdej locationlinii dodatkowej

proxy_redirect default;
meuh
źródło