ngrok의 도메인 이름을 고정 할 때 "Bad Request"오류를 피하십시오.

4973 단어 Webhookngrok
일반적으로 ngrok을 시작하면 http://28f1ac85.ngrok.io와 같이 ngrok.io 앞에 매번 다른 문자열이 할당됩니다. 그것이라고 조금 사용하기 어려우므로, 아래의 기사를 참고로 ngrok의 플랜을 Basic 이상으로 올려, 도메인명을 고정했습니다.

ngrok에서 항상 동일한 주소를 사용하는 방법 - Qiita
매우 이해하기 쉬웠습니다

그런데 도메인을 고정했을 때만 왜인지 "Bad Request"오류가 나오게 되었습니다.
물론 로컬 웹 서버가 시작되고 있습니다.

결국, 원인은 단순했습니다만, 꽤 빠져 버렸습니다.
(같은 증상의 사람이 없기 때문에, 혹시 Mac만일지도?)

증상



하위 도메인을 등록한 후 사이트의 지시에 따라 터미널에서 ngrok을 시작합니다.
./ngrok http -subdomain=testtest 8080

정상적으로 움직이고 있는 것 같다.
ngrok by @inconshreveable                                                                                    

Session Status               online
Account                      fukusin (Plan: Pro)
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwardinghttp://testtest.ngrok.io -> http://localhost:8080
Forwarding                    https://testtest.ngrok.io -> http://localhost:8080

Connections                   ttl     opn     rt1     rt5     p50     p90
                              3       0       0.00    0.00    0.00    0.00

그러나 로컬 웹 서버를 시작하고 브라우저에서 http://testtest.ngrok.io에 액세스하면 터미널에 오류가 발생합니다.
HTTP Requests
-------------
GET  /favicon.ico              400 Bad Request
GET  /                         400 Bad Request

물론 로컬 웹 서버에도 요청이 없습니다.

원인



80번 포트로 연결하여 에러의 상세를 확인합니다.
Failed to complete tunnel connection
The connection to http://testtest.ngrok.io was successfully tunneled to your ngrok client, but the client failed to establish a connection to the local address localhost:80.

Make sure that a web service is running on localhost:80 and that it is a valid address.

The error encountered was: dial tcp [::1]:80: connect: connection refused

Failed to complete tunnel connection ???

성공적으로 포트를 지정할 수 없는 것 같고 http://testtest.ngrok.io -> http://localhost:80 사이의 터널 연결에 실패했습니다.

ngrok의 사양인가 Mac 환경의 문제인가는 불명합니다만, 대책을 해 갑니다.

대책



도메인과 localhost 둘 다 같은 포트를 지정하여 시작하면 좋을 것 같습니다.

도메인의 경우 ./ngrok http -subdomain=testtest 8080localhost의 경우 ./ngrok http -host-header=localhost 8080
그러나이 두 명령은 동시에 사용할 수 없습니다.

그래서 방금 전 기사 을 참고로 ngrok.yml 를 사용해 기동합니다.
ngrok.yml을 사용하면 옵션을 정리할 수 있으므로 매번 시작이 쉬워집니다.

ngrok.yml
authtoken: <トークン文字列>
region: us
tunnels:
  process1:
    proto: http
    addr: 8080
    host_header: localhost 8080
    subdomain: testtest

Mac의 경우 [ユーザー]/.ngrok2/ngrok.yml에 저장됩니다.
localhost의 포트도 지정하고 싶으므로 기사의 코드에 host_header: localhost 8080를 추가하고 있습니다.

저장하고 터미널에서 부팅합니다.
./ngrok start process1
ngrok by @inconshreveable

Session Status                online
Account                       fukusin (Plan: Pro)
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://testtest.ngrok.io -> http://localhost:8080
Forwarding                    https://testtest.ngrok.io -> http://localhost:8080

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

기동 화면은 에러가 나왔을 때와 같은 내용입니다만, 브라우저로 http://testtest.ngrok.io 에 액세스 하면, 이번은 정상적으로 Web 서버에 연결됩니다.
HTTP Requests
-------------
POST /                         200 OK

안전하게 웹 서버에서도 요청을 받았습니다.

궁극적으로 시작 명령을 ./ngrok start process1로 바꾸면 "Bad Request"오류를 피할 수 있습니다.
도움이 되면.

좋은 웹페이지 즐겨찾기