Nginx с docker, местоположение отличается от sla sh не найдено - PullRequest
1 голос
/ 13 апреля 2020

Сводка

Я создал этот простой пример для исправления и проверки ошибок, которые у меня возникают в другом более сложном проекте. Итак, у меня есть docker -композитный файл с 1 веб-сервером и 2 приложениями и nginx conf файл.

Обратите внимание, что я тестирую его с Docker Quick Start Terminal для Windows 10 Home Edition, но я тестировал даже на Ubuntu 18.04, и результат тот же.

Результат

Переход к: http://192.168.99.100: 8080 /
Вывод по умолчанию:

Это работает!

Единственная проблема здесь связана с app2, так как Я не могу получить доступ app2 .

Переход к http://192.168.99.100: 8080 / app2 .
Ошибка:

Не найдено

Запрошенный URL не найден на этом сервере.

Я не понимаю, почему я не в состоянии сделать это, и где находится ошибка.

Что я пробовал

  • Переключите порядок расположения, чтобы location /app2 после location /, но ничего не изменилось
  • Измените расположение location /app2 на location /foo, даже здесь тот же результат.
  • Измените путь, связанный с предыдущим примером, все, что отличается от location /, не работает. (например, location /bar location /foobar location /test)
  • Измените location /, чтобы ссылаться на app2 вместо app1, и это работает, но таким образом я не могу связаться с app1.

    <code>
    location / {
        proxy_pass <a href="http://app2:80" rel="nofollow noreferrer">http://app2:80</a>;
    }</p>
    
    <p>location /app1 {
        proxy_pass <a href="http://app1:80" rel="nofollow noreferrer">http://app1:80</a>;
    }
    

Код

docker-compose.yml

version: "3.7"

services:
  web:
    image: nginx:alpine
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
        - 8080:80
    networks:
        - app1_net
        - app2_net

  app1:
      image: httpd:latest
      networks:
        - app1_net

  app2:
      image: httpd:latest
      networks:
        - app2_net

networks:
  app1_net:
  app2_net:

nginx.conf

events {}
http {
    server{
        listen 80;
        listen [::]:80;

        server_name localhost;

        location /app2 {
            proxy_pass http://app2:80;
        }

        location / {
            proxy_pass http://app1:80;
        }
    }
}

1 Ответ

0 голосов
/ 13 апреля 2020

Это правильный путь, используйте регулярное выражение, чтобы разрешить навигацию по подпапкам, и идеальное совпадение на / app2 для перенаправления трафика c на http://app2:

location ~ ^/app2/(.*)$ {
  proxy_pass http://app2/$1;
}
location = /app2 {
  proxy_pass http://app2/;
}
location / {
  proxy_pass http://app1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...