Назад | Перейти на главную страницу

не может получить доступ к внешнему IP-адресу вычислителя

Я установил экземпляр вычислительного движка Google и установил nginx, и теперь nginx прослушивает порт 80. У меня есть статический внешний IP-адрес, назначенный моему экземпляру, и я просто не могу получить доступ к своему внешнему IP-адресу.

Почему это должно быть так сложно? Все руководства просто говорят:

установите nginx и перейдите на внешний IP-адрес, и вы должны появиться на экране приветствия nginx

Я установил правила брандмауэра для http / https, но ничего не работает. Вот на что стоит обратить внимание:

Конфигурация сервера nginx:

listen 80;
listen [::]:80;
server_name example.com;
root /var/www/example.com;
index index.html;
location / {
  try_files $uri $uri/ =404;
}

снимок экрана экземпляра:

nginx работает:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3490/nginx
tcp6       0      0 :::80                   :::*                    LISTEN      3490/nginx

Я пытаюсь перейти на: 104.196.111.24 но это просто говорит safari failed to open the page

Бег ifconfig возвращает это:

docker0   Link encap:Ethernet  HWaddr 02:42:de:3f:fb:67  
          inet addr:172.18.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02  
          inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1460  Metric:1
          RX packets:3802 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2248 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:21591383 (20.5 MiB)  TX bytes:351275 (343.0 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:54 errors:0 dropped:0 overruns:0 frame:0
          TX packets:54 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:3568 (3.4 KiB)  TX bytes:3568 (3.4 KiB)

Закрытый порт 80

$ nmap -p80 104.196.111.24
Starting Nmap 6.40 ( http://nmap.org ) at 2016-03-09 16:25 CET
Nmap scan report for 24.111.196.104.bc.googleusercontent.com (104.196.111.24)
Host is up (0.14s latency).
PORT   STATE  SERVICE
80/tcp closed http

Это наводит на мысль, что в конфигурации брандмауэра что-то не так, несмотря на опции «Разрешить HTTP-трафик» и «Разрешить https-трафик», отмеченные на вашем снимке экрана. Теперь я больше не знаю о конфигурации брандмауэра GCE.

(NB Несколько позже: на данный момент nmap сообщает, что хост не работает.)

О моем первоначальном посте

Мой первоначальный пост, приведенный ниже, будет относиться к nginx экземпляр работает на реальном хосте. Я упустил тот факт, что ты фактически работает виртуальная машина, где может быть нормально иметь nginx прослушивание локальных адресов («что-то еще» на хосте передает запросы к виртуальной машине). Однако я не понимаю, почему внутренний IP-адрес не отображается в вашем ifconfig вывод.

Исходное содержание сообщения:

Если я хорошо понимаю, у вас есть экземпляр nginx, работающий на сервере с адресом 104.196.111.24. И когда вы пытаетесь получить доступ к этому адресу в веб-браузере, вы получаете сообщение об ошибке.

Итак, я не совсем уверен, что это сработает, но я заметил, что ваш экземпляр nginx прослушивает порт 80 на 0.0.0.0 (ipv4), что является локальным адресом. Википедия об этом говорит:

В Интернет-протоколе версии 4 адрес 0.0.0.0 - это немаршрутизируемый метаадрес, используемый для обозначения недопустимой, неизвестной или неприменимой цели.

Более того:

В контексте серверов 0.0.0.0 означает «все адреса IPv4 на локальном компьютере».

Так что я думаю, что здесь есть что исправить, так как nginx кажется доступным только с локальных адресов на вашем сервере.

Более того, если я поставлю себе nginx для прослушивания порта 80 на 0.0.0.0 для любого из моих веб-сайтов, тогда просмотр этого сайта вернет ошибку (например, соединение было повторно инициализировано, а не ошибка из nginx).

Итак, я бы попытался установить nginx для прослушивания порта 80 на внешнем адресе, например:

listen 104.196.111.24:80;

(и, конечно же, после этого проверьте, что это правильно с nginx -t а затем перезагрузите правила nginx с помощью service nginx reload).

РЕДАКТИРОВАТЬ: дополнительная информация от ifconfig позволяет мне думать, что в конфигурации сети действительно что-то не так (или не настроено), но я не могу это объяснить: адрес сетевой карты (eth0, работает) - 172.17.0.2, что относится к некоторому специальному зарезервированному диапазону адресов IANA . Я ожидал, что 104.196.111.24 появится в ifconfigвывод, но это не так. Я даже не понимаю, как вы можете использовать ssh в 104.196.111.24 без его настройки. В любом случае я думаю nginx недоступен извне, пока он прослушивает 0.0.0.0, это, безусловно, должно быть исправлено для решения проблемы, что может быть сделано путем исправления конфигурации сети.

Используйте подстановочный знак, и он будет работать

    listen *:80;
    listen *:443 ssl;

Вы не в том месте. На основании результата ifconfig похоже, что вы находитесь в Облачная оболочка Google и нет ssh в оболочку вашего экземпляра. Если вы находитесь в оболочке вашего экземпляра, результат ifconfig будет соответствовать внутреннему IP-адресу, отображаемому в консоли.

Проверьте правила брандмауэра для VPC вашего проекта:

$ gcloud beta compute firewall-rules list 

Если порт 80 TCP не покрыт, вам нужно добавить его:

$ gcloud beta compute firewall-rules create default-allow-http80 \
> --direction ingress --action allow --source-ranges 0.0.0.0/0 
> --rules tcp:80