nginx는 항상 로컬 아파치에 요청을 보냅니다.

nginx는 항상 로컬 아파치에 요청을 보냅니다.

저는 동일한 서버 Apache(포트 81)와 NGINX(포트 80)에서 실행 중입니다. www.example.com의 경우 NGINX 구성 파일에 아래 내용이 있습니다.

문제는 이 서버에서 Apache가 시작될 때 www.example.com에 대한 모든 요청이 포트 81의 Apache 서버로 이동한다는 것입니다. 이는 업스트림에서 구성되지 않으며 www.example.com도 로컬 Apache 인스턴스에서 구성되지 않습니다. 그래서 온통 오류가 발생합니다.

나는 이것이 로컬로 가는 것이 아니라 업스트림에 정의된 대로 외부로만 가기를 원합니다.

Apache를 중지하면 업스트림이 사용되고 nginx의 요청은 업스트림에 정의된 서버로 이동합니다. Apache를 다시 시작하면 모든 요청이 로컬에서 Apache로 라우팅됩니다.

그러면 Apache가 로드될 때 Apache로 가는 요청을 피하고 nginx가 항상 정의된 업스트림을 사용하도록 하려면 어떻게 해야 합니까?

upstream mainserver {
    server w1.externalserver.nl;
    server w2.externalserver.nl;
}

server {
listen 80;

server_name www.example.com;

location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://mainserver;

}
}

답변1

nginx 구성에서 포트 번호를 정의하는 것이 좋습니다.

upstream mainserver {
    server w1.externalserver.nl:81;
    server w2.externalserver.nl:81;
}

그리고 Apache가 올바른 포트에서 수신 대기하는지 확인하십시오. Ubuntu 설치의 경우:apache2.conf또는ports.conf(이 파일도 확인하세요. 설정 내용을 다시 쓸 수 있습니다):

Listen 127.0.0.1:81

업데이트 1

+-------------+
| server 1    | <------- http request :80
|             |
| nginx ----+ | -------> redirect to server 2 (You want)
|           | |
| Apache <--+ | internal redirect to local Apache (problem place)
+-------------+

1). 서버 1에서는 Apache와 nginx를 모두 실행합니다. curl -I http://example.com:80 응답으로 "서버" 필드를 확인하십시오. Apache가 있는 경우 모든 구성을 주의 깊게 확인하십시오: apache2.conf, ports.conf, 가상 호스트 구성 - 언급된 포트 80과 Apache가 nginx를 "listen"으로 "다시 작성"합니다.

2). 프로토콜 없이 시도해보세요 proxy_pass http://mainserver;.proxy_pass mainserver;

관련 정보