명시적으로 "sudo ufw allowed 5000"을 사용했는데도 내 웹 서버가 포트 80에서는 표시되지만 포트 5000에서는 표시되지 않는 이유는 무엇입니까?

명시적으로 "sudo ufw allowed 5000"을 사용했는데도 내 웹 서버가 포트 80에서는 표시되지만 포트 5000에서는 표시되지 않는 이유는 무엇입니까?

저는 우분투 18.04를 사용하는 Digital Ocean Droplet을 가지고 있으며 이 가이드에 따라 Flask 앱을 ​​만들고 Gunicorn + nginx를 사용하여 호스팅하려고 합니다.

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-18-04

따라서 가이드의 시작 부분에서 샘플 Flask 애플리케이션(myproject.py라는 이름)을 만들었습니다.

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

그런 다음 다음을 수행하여 인터넷에 노출되는지 여부를 테스트할 수 있습니다.

sudo ufw allow 5000
python myproject.py 

내 질문:

내 터미널에서는 앱이 제대로 실행되는 것 같지만 브라우저가 URL에 액세스하려고 하면 로드되지 않습니다.

이제 저에게 이상한 점은 이 두 명령을 실행하고 애플리케이션을 시작하면 매우 정상적인 출력이 생성된다는 것입니다.

(myprojectenv) root@ubuntu-s-1vcpu-1gb-nyc1-01:/home/root/myproject# python myproject.py 
 * Serving Flask app "myproject" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

하지만 실제로 URL에서 Droplet에 액세스하려고 하면 다음과 같습니다.http://165.227.205.175:5000(구글 크롬에서)

전형적인 "사이트에 접근할 수 없음 오류"가 나타납니다.

여기에 이미지 설명을 입력하세요.

또한 터미널은 알림을 받지 못하며 내 플라스크 애플리케이션은 누군가가 이에 액세스하려고 한다는 사실을 전혀 인식하지 못합니다.

그러나 애플리케이션을 다음과 같이 변경하면:

[... flask boilerplate ...]
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

그런 다음 다음을 실행하십시오.

sudo ufw allow 5000
python myproject.py

사이트가 다음 위치에 표시되는 것을 볼 수 있습니다. http://165.227.205.175! 또한 Flask 앱은 명확하게 로그(200개 요청...)를 생성하고 다시 코드를 약간 조정합니다(그래서 포트 번호에 대해 더 명시적입니다).

[... flask boilerplate ...]
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

명령을 다시 실행하십시오.

sudo ufw allow 5000
python myproject.py

이제 로드하려고 하면 아무것도 볼 수 없습니다.http://165.227.205.175다시 말하지만, Flask 앱은 내 브라우저가 이를 로드하려고 한다는 사실을 전혀 인식하지 못하는 것 같습니다.

"sudo ufw allowed 5000" 명령의 출력은 항상 다음과 같습니다.

Skipping adding existing rule
Skipping adding existing rule (v6)

이 문제에 대해 어떻게 진전을 이룰 수 있습니까?

답변1

Droplet을 삭제하고 다시 시작하여 이 문제를 성공적으로 해결했습니다. 정확히 무슨 일이 일어나고 있는지 잘 모르겠지만(아마도 방화벽 구성 오류일 수 있음) 인터넷에서 이 문제를 발견하면 모든 코드와 데이터를 백업하고 재부팅하는 것이 좋습니다. 첫 번째 선택이 되지 않는 것은 쉽습니다.

관련 정보