Nginx: перенаправление на (частные ip) виртуальные машины


0

Я хочу настроить набор веб-сервисов для моих коллег из моей лаборатории; простые вещи, такие как вики, cms, git и т. д., чтобы мы могли лучше документировать наши проекты. Я физик, а не CS, поэтому извините, если я что-то упускаю очевидное.

Службы будут находиться за одним и тем же (общедоступным) IP-адресом. Для этого я бы настроил виртуальные машины в качестве поставщиков услуг и установил Nginx на хост-машине, чтобы перенаправить соответствующие вызовы на виртуальные машины.

Кажется, проблема связана с (url) путем, используемым после имени хоста. Я не знаю, связано ли это с перенаправлением Nginx или с самими веб-сервисами.

В настоящее время сценарий выглядит следующим образом:

  • Хост-машина имеет публичный IP-адрес, связанный с доменным именем. Позвольте мне использовать здесь, для простоты, "www.example.com".
  • Виртуальные машины имеют частные IP-адреса. На одном установлен Drupal, на другом - Mediawiki, на третьем - Gitlab.
    • Машина "drupal" имеет IP 192.168.56.20
    • Машина "wiki" имеет IP 192.168.56.11
    • Машина "git" имеет IP 192.168.56.19
  • На хост-машине установлен (помимо VirtualBox) Nginx. Моя цель с Nginx - найти простое решение для следующих перенаправлений:
    • www.example.com/drupal --- & gt; едет в "друпал" автомат
    • www.example.com/wiki --- & gt; идет к "вики" машине
    • www.example.com/git --- & gt; идет к "мерзавцу" машины
  • Для настройки Nginx я просто изменил файл конфигурации по умолчанию ( /etc/nginx/sites-enabled/default ).

Проблема (и) у меня есть:  - Когда я пытаюсь получить доступ www.example.com/wiki (с любой машины в сети) или localhost/wiki (с хост-машины), URL меняется на (обычный) www.example.com/wiki или же localhost/Main_Pageсоответственно и получаю ошибку "404 Not Found".  - То же самое происходит, когда я пытаюсь localhost/git: Я получаю ошибку «404 Not Found», после перенаправления на localhost/users/sign_in,  - Когда я пытаюсь localhost/drupal все работает нормально, но только до тех пор, пока я не изменю путь веб-сайта (например, нажимаю кнопку «зарегистрироваться»), затем localhost/user/register больше не работает («404 Not Found»).

Я понимаю, что это ошибки, связанные с URL. Мне ясно, что Nginx не знает, что делать (например, с) localhost/Main_Page так как я не сказал ему, что с этим делать, но как мне это исправить? Я имею в виду, кто отвечает за это между Nginx и сервисом (ами)?

Лог и конфиг следуют. Изменения, которые я сделал в конфигурационном файле Nginx, были взяты из этого приятного руководство ,

Любая помощь? Заранее спасибо.

Вот журнал, в котором я пытался получить доступ (как описано выше) к "/ wiki", "/ git" и "/ drupal (и нажав на кнопку" зарегистрироваться ")" с "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"

Вот мой конфигурационный файл 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;
}

}

Ответы:


0

Вы должны посмотреть на proxy_redirect инструкция. Документ описывает именно ту ситуацию, в которой вы находитесь, когда вы хотите, чтобы ответ перенаправления, возвращаемый прокси-сервером, был переписан во внешний вид URL.

Вы, вероятно, просто нуждаетесь в каждом или вашем location дополнительная линия

proxy_redirect default;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.