Я хочу настроить набор веб-сервисов для моих коллег из моей лаборатории; простые вещи, такие как вики, 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 ---> идет к машине "drupal"
    • www.example.com/wiki ---> идет на "вики" машину
    • www.example.com/git ---> переходит к машине "git"
  • Чтобы настроить 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;
}

}

1 ответ1

0

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

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

proxy_redirect default;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .