Nginx: redirecionamento para máquinas virtuais (ip privadas)

0

Eu quero configurar um conjunto de serviços da web para meus colegas do meu laboratório; coisas simples como wiki, cms, git, etc, para que possamos documentar melhor nossos projetos. Sou físico, não CS, desculpe se sinto falta de algo óbvio.

Os serviços estariam por trás do mesmo endereço IP (público). Para tal, eu configurei as máquinas virtuais como os provedores de serviços e instalei o Nginx na máquina host para redirecionar as chamadas correspondentes para as VMs.

O problema que estou tendo parece estar relacionado ao caminho (url) usado após o nome do host. Não sei se está relacionado ao redirecionamento Nginx ou aos próprios serviços da Web.

Atualmente, o cenário é o seguinte:

  • A máquina host tem um endereço IP público, vinculado a um nome de domínio. Deixe-me usar aqui, por uma questão de simplicidade, "www.example.com".
  • As máquinas virtuais têm endereços IP privados. Um tem o Drupal instalado, o outro o Mediawiki e um terceiro com o Gitlab.
    • A máquina "drupal" tem o IP 192.168.56.20
    • A máquina "wiki" tem o IP 192.168.56.11
    • A máquina "git" tem o IP 192.168.56.19
  • A máquina host possui (além do VirtualBox) o Nginx instalado. Meu objetivo com o Nginx é ter uma solução simples para os seguintes redirecionamentos:
    • www.example.com/drupal --- > vai para a máquina "drupal"
    • www.example.com/wiki --- > vai para a máquina "wiki"
    • www.example.com/git --- > vai para a máquina "git"
  • Para configurar o Nginx, simplesmente modifiquei o arquivo de configuração padrão ( /etc/nginx/sites-enabled/default ).

O (s) problema (s) que estou tendo:  - Quando eu tento acessar www.example.com/wiki (de qualquer máquina na rede) ou localhost/wiki (da máquina host), a URL é alterada para (o usual) www.example.com/wiki ou localhost/Main_Page , respectivamente, e eu recebo o erro "404 não encontrado".  - O mesmo acontece quando tento localhost/git : recebo o erro "404 Not Found", depois de ser redirecionado para localhost/users/sign_in .  - Quando eu tento localhost/drupal , tudo funciona bem, mas somente até eu alterar o caminho do site (por exemplo, clico no botão "registrar"), então localhost/user/register não funciona mais ("404 Not Found").

Eu entendo que esses erros estão relacionados com o URL. É claro para mim que o Nginx não sabe o que fazer com (por exemplo) localhost/Main_Page , uma vez que não lhe disse o que fazer com ele, mas como posso corrigir isso? Quer dizer, quem está encarregado disso entre o Nginx e o (s) serviço (s)?

Log e config seguem. As modificações que fiz no arquivo de configuração do Nginx foram tiradas desse tutorial .

Qualquer ajuda? Agradecemos antecipadamente.

Aqui está o log de mim tentando acessar (como descrito acima) o "/ wiki", "/ git" e "/ drupal (e clicando no botão 'registrar')" do "localhost":

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"

Aqui está o meu arquivo de configuração do 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;
}

}
    
por Brandt 29.07.2015 / 13:04

1 resposta

0

Você deve observar a instrução proxy_redirect . O documento aborda exatamente a situação que você tem, onde você deseja que uma resposta de redirecionamento que volta do proxy seja reescrita para a visão externa do mundo da URL.

Você provavelmente precisará apenas de cada uma ou sua location de uma linha extra

proxy_redirect default;
    
por 29.07.2015 / 21:27