Я установил экземпляр вычислительного движка 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)
$ 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