Сводка
Я создал этот простой пример для исправления и проверки ошибок, которые у меня возникают в другом более сложном проекте. Итак, у меня есть 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;
}
}
}