.png)
저는 제가 구성한 웹 애플리케이션의 세 노드에 걸쳐 프런트 엔드 로드 밸런서로 nginx를 구성했습니다. nginx는 upstream.server 및 server.server_name에서 사용하는 값에 관계없이 계속해서 400/잘못된 요청을 반환합니다. 잘못된 호스트 이름 오류입니다. 나는 두 값 모두에 대해 localhost와 127.0.0.1을 시도했고 일치하는 cURL/Postman 요청을 사용하여 요청을 발행했지만 아무 소용이 없었습니다.
또한 들어오는 HTTP HOST 헤더와 더 잘 일치하도록 포트 번호를 포함하여 server.server_name의 값을 설정해 보았지만 소용이 없었습니다.
nginx.conf
events {
worker_connections 1024;
}
http {
upstream myapp {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 8000;
server_name 127.0.0.1;
location / {
proxy_pass http://myapp;
}
}
}
cURL 요청의 결과는 다음과 같습니다(localhost를 사용하는 것과 127.0.0.1을 사용하는 것 사이에는 차이가 없습니다).
C:\>curl -v http://127.0.0.1:8000/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8000 (#0)
> GET / HTTP/1.1
> Host: 127.0.0.1:8000
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 400 Bad Request
< Server: nginx/1.17.1
< Date: Mon, 22 Jul 2019 14:29:22 GMT
< Content-Type: text/html; charset=us-ascii
< Content-Length: 334
< Connection: keep-alive
<
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>
* Connection #0 to host 127.0.0.1 left intact
답변1
다음 구성으로 시도해 보세요.
events {
worker_connections 1024;
}
http {
upstream myapp {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 8000;
server_name 127.0.0.1;
location / {
proxy_pass http://myapp;
proxy_set_header Host $host;
}
}
}
답변2
같은 오류가 발생했지만~이다IIS 앞에서 nginx를 사용합니다. 그러나 그것은 간헐적이었습니다. 실패한 것은 다른 모든 요청이었고 이상했습니다.
내 IIS 호스트 이름을 특정 IP(모든 IP가 아님)에 바인딩했고 IIS가 로드 밸런싱을 수행했지만 다른 IP를 확인하지 못한 것으로 나타났습니다.
IIS에 모든 IP에 바인딩하도록 지시하면 문제가 해결되었습니다. 그것을 알아내는 데만 몇 시간이 걸렸습니다.