На этой неделе я настраивал сервер AWS EC2 и почти закончил то, что хочу. Но открытие в качестве веб-сервера оказалось камнем преткновения.
МОИ НАСТРОЙКИ
У меня есть экземпляр AWS EC2, на котором работает Red Hat EL7.
У меня есть сервер Apache, работающий на моем экземпляре:
[ec2-user@ip-172-xx-xx-xx ~]$ ps -ef | grep -i httpd
root 18162 1 0 18:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 18163 18162 0 18:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 18164 18162 0 18:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 18165 18162 0 18:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 18166 18162 0 18:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 18167 18162 0 18:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
ec2-user 21345 20507 0 19:03 pts/1 00:00:00 grep --color=auto -i httpd
Кажется, он прослушивает порт 80:
[root@ip-172-xx-xx-xx ~]# netstat -lntp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 18162/httpd
Я добавил входящие правила в группу безопасности «launch-wizard-1» (которая показана как группа безопасности для экземпляра) для портов 80 (HTTP) и 443 (HTTPS) с источниками «0.0.0.0/0» и « ::/0"
И, наконец, для тестирования моей установки я создал файл index.html в корневом каталоге моего документа (/var/www/html):
<html>
<h1>TEST!</h1>
</html>
ПРОБЛЕМА
Из моего браузера Chrome на моем компьютере, когда я пытаюсь нажать:
http://ec2-18-xxx-xxx-xx.us-east-2.compute.amazonaws.com/index.html
Я просто получаю:
This page isn’t working
ec2-18-xxx-xxx-xx.us-east-2.compute.amazonaws.com didn’t send any data.
ERR_EMPTY_RESPONSE
(Я получаю то же самое, когда нажимаю на одно из своих доменных имен, которые я там настроил, что я на самом деле пытаюсь сделать, конечно же!)
Я пытался подключиться из Chrome на двух разных компьютерах и из Safari на своем телефоне («Safari не может открыть страницу, потому что не может подключиться к серверу»)
ПРОВЕРКИ, ВЫПОЛНЕННЫЕ МНОЙ
Я не верю, что у меня есть брандмауэр сервера, предотвращающий это:
[root@ip-xx-xx-xx-xx conf]# /sbin/iptables -L -v -n
Chain INPUT (policy ACCEPT 3575 packets, 275K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2215 packets, 350K bytes)
pkts bytes target prot opt in out source destination
Тестирование с помощью telnet из сеанса терминала на моем Mac, порт 80 кажется открытым. Во-первых, используя общедоступный IP-адрес IPv2:
telnet 18.xxx.xxx.xx 80
Trying 18.xxx.xxx.xx...
Connected to ec2-18-xxx-xxx-xx.us-east-2.compute.amazonaws.com.
Escape character is '^]'.
Connection closed by foreign host.
и используя общедоступный DNS (IPv4):
telnet ec2-18-xxx-xxx-xx.us-east-2.compute.amazonaws.com 80
Trying 18.xxx.xxx.xx...
Connected to ec2-18-xxx-xxx-xx.us-east-2.compute.amazonaws.com.
Escape character is '^]'.
Connection closed by foreign host.
И снова то же самое касается моих доменных имен - телнет на порт 80 показывает "Подключено".
– Имеет ли значение тот факт, что "внешний хост" немедленно закрывает соединение? Должен ли он оставаться открытым, если все работает как надо?
Запуск curl на хосте корректно возвращает мой простой файл index.html:
[ec2-user@ip-172-xx-xx-xx ~]$ curl localhost
<html>
<h1>TEST!</h1>
</html>
Однако запуск curl на моем локальном компьютере — на сервере — возвращает:
curl -v http://ec2-18-xxx-xxx-xx.us-east-2.compute.amazonaws.com:80
* Rebuilt URL to: http://ec2-18-xxx-xxx-xx.us-east-2.compute.amazonaws.com:80/
* Trying 18.xxx.xxx.xx...
* Connected to ec2-18-xxx-xxx-xx.us-east-2.compute.amazonaws.com (18.xxx.xxx.xx) port 80 (#0)
> GET / HTTP/1.1
> Host: ec2-18-xxx-xxx-xx.us-east-2.compute.amazonaws.com
> User-Agent: curl/7.43.0
> Accept: */*
>
* Empty reply from server
* Connection #0 to host ec2-18-xxx-xxx-xx.us-east-2.compute.amazonaws.com left intact
curl: (52) Empty reply from server
Я также протестировал веб-сервер «внутри», запустив google chrome (безголовый) на сервере, чтобы создать снимок экрана, загруженный на мой локальный компьютер, и он показывает TEST! (т.е. работает):
google-chrome-stable --headless --disable-gpu --screenshot http://localhost
Еще одна вещь, которую нужно добавить: когда я пытаюсь попасть на веб-сервер с моей локальной машины, в журналах веб-сервера (error_log или access_log) на сервере ничего не отображается.
Итак, мое мнение таково, что веб-сервер запущен и работает локально, но не работает корректно для всего, что приходит «извне». Хотя сейчас я в тупике.
curl localhost
с самого сервера? Таким образом, он тестирует веб-сервер без влияния каких-либо сетевых конфигураций. - person John Rotenstein   schedule 21.12.2018