
Я нахожусь в процессе миграции небольшого личного веб-сайта из виртуальной машины VirtualBox в контейнер Docker, размещенный на моем персональном компьютере. Но я сталкиваюсь с проблемой, когда получаю сообщение "время ожидания соединения истекло" при попытке доступа к этому контейнеру из интернета (пытаюсь с телефона без Wi-Fi), с других компьютеров в той же сети все работает.
Вот какие тесты я провел до сих пор:
Локальная сеть
Все работает отлично как с http://localhost так иhttp://192.168.1.10с любого другого компьютера в сети
Из этого теста я понял, что мой компьютер и конфигурация Docker работают нормально, и сервер доступен извне.
Из интернета
На моем интернет-шлюзе у меня настроена переадресация портов. При перенаправлении на 192.168.1.15 у меня есть корректный доступ к серверу vm.
при перенаправлении на 192.168.1.10 я получаю тайм-аут шлюза, а инструмент проверки портов сообщает, что порт 80 закрыт
Из этого теста я понял, что мой провайдер не мешает, и мой шлюз правильно пересылает данные на правильный IP. Также нет проблем на стороне клиента (мой телефон/телефонный провайдер)
полезная конфигурация
- Конфигурация docker-compose:
version: "3.7"
services:
proxy:
image: nginx:stable
ports:
- "80:80"
volumes:
- ./proxy/conf.d:/etc/nginx/conf.d
- ./proxy/conf.d/site.conf
server {
listen 80;
server_name example.com; # not actual DNS, but it doesn’t seem to be in cause.
location / {
deny all;
}
}
да,работает отличнона самом деле я имею в виду, что сейчас я получаю ошибку 403 «Доступ запрещен»
- переадресация порта шлюза (в пользовательском интерфейсе) порта 80 на порт 80 хоста 192.168.10
- Сеть Virtualbox vm настроена как мост и имеет IP 192.168.1.15
- все внутренние IP-адреса записаны как статические
Дайте мне знать, если вам может потребоваться какая-либо дополнительная информация.
Исключенный
Я намеренно исключил все переменные SSL и DNS, пока эта проблема не будет решена. Настройка будет выполнена позже.
Я в основном ищу идеи, что еще проверить, потому что все части, кажется, работают хорошо по отдельности, но мне явно чего-то не хватает.
правка: немного подробнее рассмотрел проблему закрытого порта/тайм-аута, выводимую командой curl с удаленного компьютера:
$ curl -v --output - 142.#.#.#
* Trying 142.#.#.#:80...
* Connected to 142.#.#.# (142.#.#.#) port 80 (#0)
> GET / HTTP/1.1
> Host: 142.#.#.#
> User-Agent: curl/7.83.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 502 Connection timed out
< Date: Wed, 01 Jun 2022 16:34:06 GMT
< Connection: close
< Cache-Control: no-store
< Content-Type: text/html
< Content-Language: en
< Content-Length: 219
<
<HEAD><TITLE>Connection timed out</TITLE></HEAD>
<BODY BGCOLOR="white" FGCOLOR="black">
<FONT FACE="Helvetica,Arial"><B>
Connection timed out</B></FONT>
<!-- default "Connection timed out" response (502) -->
</BODY>
* Closing connection 0
вывод проверки порта
$ nmap 142.#.#.# -p 81
...
Host is up (0.077s latency).
PORT STATE SERVICE
80/tcp open http
$ nc -zvw10 142.#.#.# 80
...
[142.#.#.#] 80 (http) open
но ping.eu, который я использовал первым, все еще показывает, что он закрыт. Не уверен, как они это проверяют