아파치로 배포한 웹에서 get post 요청 안되는 문제 해결 net::ERR_CONNECTION_TIMED_OUT

728x90

아파치로 배포한 웹에서 get post 요청 안되는 문제 해결 net::ERR_CONNECTION_TIMED_OUT

 


플러터 웹을 아파치로 띄운 다음, 같은 내부망을 사용하는 다른 pc에서 내 웹사이트를 이용할 수 있도록 구현해야하는 일이 생겼다.

 

웹을 띄우고 다른 pc에서 접속하는 것까진 성공했으나, 다른 pc에서 내 웹사이트에 접속한 후 get, post 요청을 보내면 다음과 같은 에러가 발생했다.

net::ERR_CONNECTION_TIMED_OUT

해당 에러에 대해 gpt에 검색하니 다음과 같이 설명했다.

  1. 네트워크 구성 확인: 서버 PC와 클라이언트 PC가 모두 동일한 Wi-Fi 네트워크에 연결되어 있는지 확인하십시오. 두 PC의 Wi-Fi 연결 설정을 다시 확인하여 올바르게 연결되었는지 확인하십시오.
  2. 방화벽 설정 확인: 서버와 클라이언트 PC 모두의 방화벽이 연결을 차단하고 있을 수 있습니다. 두 PC의 방화벽을 일시적으로 비활성화하여 연결을 설정할 수 있는지 확인합니다. 방화벽 없이 연결이 작동하는 경우 필요한 포트(일반적으로 HTTP/HTTPS의 경우 포트 80 또는 443)에서 들어오고 나가는 연결을 허용하도록 방화벽 규칙을 구성해야 합니다.
  3. Apache 구성 확인: Apache 웹 서버가 수신 연결을 허용하도록 올바르게 구성되었는지 확인하십시오. 다음을 확인하십시오.
    • Apache가 올바른 IP 주소 및 포트에서 수신 대기하는지 확인하십시오. Apache 구성 파일(httpd.conf 또는 가상 호스트 구성 파일)에서 Listen 지시문을 확인하고 올바른 IP 및 포트(일반적으로 HTTP의 경우 Listen 80)로 설정되어 있는지 확인하십시오.
    • 가상 호스트 구성을 확인하여 요청을 처리하도록 올바르게 설정되었는지 확인하십시오. ServerName, ServerAlias 및 기타 관련 설정을 확인합니다.
  4. 서버 IP 주소 확인: 클라이언트 PC에서 요청을 보낼 때 서버 PC의 올바른 IP 주소를 사용하고 있는지 확인하십시오. 서버에서 ipconfig(Windows) 또는 ifconfig(Linux) 명령을 실행하여 서버의 IP 주소를 찾을 수 있습니다.

 

프론트에서 보내는 요청 url이 잘못된 것도 아니었으므로 백엔드 부분 또는 아파치나 방화벽에서 문제가 있을 것이라고 생각되었다.

 

우선 백엔드 부분의 코드에서 모든 host의 요청을 받아올 수 있도록 설정했다. (파이썬 플라스크를 활용했다.)

 

만약 서버가 127.0.0.1에서 돌고 있다면 서버를 실행시킨 pc에서만 접속이 가능하다.

if __name__ == '__main__':

    app.debug = True
    app.run(host='0.0.0.0', port=5000)

윈도우의 경우, 이게 잘 안먹히면 서버를 실행시킬 때 아래 명령어를 이용하여 외부로의 접근을 허용하도록 한다.

flask run --host=0.0.0.0

 

그리고 외부의 데이터가 들어오도록 하려면 해당 포트를 열어줘야한다.

같은 와이파이를 사용하는 다른 pc에서 접근이 허용하도록 하려면 그냥 공용 네트워크 방화벽을 꺼버리면 한 방에 해결 되겠으나, 보안에 취약하기 때문에 특정 프로그램이 필요할 경우에만 포트를 열 수 있도록 설정한다.

설정 변경 -> 다른 앱 허용 순서대로 클릭

찾아보기를 클릭하여 아파치 프로그램을 추가한다.

아파치 폴더가 C드라이브에 있을 경우를 기준으로,

C:\Apache24\bin\httpd.exe 위치에 있다.

 

 

 

방화벽에서 서버에 대한 포트 번호를 열어줘야 한다.

고급 설정 클릭
인바운드 규칙 -> 새 규칙
포트 설정
서버에서 사용하는 포트를 지정한다. 플라스크를 쓰고 있어서 5000번을 했다.
이름은 아무렇게 지정해도 된다.

 

다시 확인해보면 같은 공유기 내의 휴대폰이나 pc에서도 post, get 요청이 잘 전달 될 것이다.

728x90