เข้าถึงเซิร์ฟเวอร์ AWS EC2 ของฉันindex.htmlจากเบราว์เซอร์ภายนอก

สัปดาห์นี้ฉันได้ตั้งค่าเซิร์ฟเวอร์ 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 บนคอมพิวเตอร์ 2 เครื่องที่แตกต่างกัน และจาก 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 จะเปิดอยู่ ขั้นแรกใช้ IPv2 Public IP:

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.

และใช้ Public 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.

และอีกครั้ง เช่นเดียวกับชื่อโดเมนของฉัน - telnet ไปยังพอร์ต 80 แสดงว่า "เชื่อมต่อแล้ว"

- ความจริงที่ว่า "โฮสต์ต่างประเทศ" ปิดการเชื่อมต่อมีความสำคัญในทันทีหรือไม่? มันควรจะเปิดอยู่หรือไม่หากทุกอย่างทำงานได้ตามปกติ

การรัน curl บนโฮสต์อย่างถูกต้องจะส่งคืนไฟล์ index.html แบบง่ายของฉัน:

[ec2-user@ip-172-xx-xx-xx ~]$ curl localhost
<html>
<h1>TEST!</h1>
</html>

อย่างไรก็ตาม การเรียกใช้ขดบนเครื่องคอมพิวเตอร์ของฉัน - ไปยังเซิร์ฟเวอร์ - ส่งคืน:

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) บนเซิร์ฟเวอร์

ดังนั้น ความเห็นของฉันคือเว็บเซิร์ฟเวอร์เปิดใช้งานแล้ว ทำงานได้ในพื้นที่ แต่ทำงานไม่ถูกต้องสำหรับสิ่งที่มาจาก "ภายนอก" ตอนนี้ฉันยังงงอยู่เลย


person user3253319    schedule 20.12.2018    source แหล่งที่มา
comment
จะเกิดอะไรขึ้นหากคุณลอง curl localhost จากเซิร์ฟเวอร์เอง ด้วยวิธีนี้ จะเป็นการทดสอบเว็บเซิร์ฟเวอร์โดยไม่ได้รับผลกระทบจากการกำหนดค่าเครือข่ายใดๆ   -  person John Rotenstein    schedule 21.12.2018
comment
ขออภัย ควรจะบอกว่าฉันได้ทำสิ่งนั้นแล้ว และมันก็ใช้ได้ดี ส่งคืน HTML ของ index.html แบบง่ายของฉัน   -  person user3253319    schedule 21.12.2018


คำตอบ (2)


โด้! ฉันรีบูทอินสแตนซ์และ.. ทั้งหมดทำงานได้แล้ว!

ทำงานกับคอมพิวเตอร์มา 22 ปี และฉันใช้เวลา 22 ชั่วโมงในการรีบูตเครื่อง คนโง่!

person user3253319    schedule 21.12.2018

  1. เชื่อมต่อกับ EC2 instance ของคุณโดยใช้ ssh บน terminal
  2. ติดตั้ง python หากไม่ได้ติดตั้ง
  3. เริ่มต้นเซิร์ฟเวอร์หลามโดยใช้ nohup เพื่อใช้เซิร์ฟเวอร์อย่างต่อเนื่อง

    nohup python -m http.server &

  4. ซึ่งมักจะเปิดพอร์ต 8000 ไปที่ EC2 Security Group สร้างแหล่งที่มา anywhere หรือตามความจำเป็น

ป้อนคำอธิบายรูปภาพที่นี่

  1. ไปที่โฟลเดอร์ที่มี index.html เส้นทางของไฟล์จะมีลักษณะดังนี้

    http://ec2---.compute-1. amazonaws.com:8000/folder/เว็บไซต์/

คุณจะสามารถพัฒนาและเห็นการเปลี่ยนแปลงของคุณได้ตามต้องการ

person Harry_pb    schedule 10.02.2020