여러 가상 호스트에 요청을 제공하기 위해 CentOS 7 시스템에 Apache v2.4 역방향 프록시를 설정했습니다. 그중에는 Atlassian 애플리케이션 서버가 있습니다.
프록시의 개인 IP 주소는 10.0.0.77이고, 공용 IP 주소는 77.77.77.77이며, 여러 DNS A 레코드는 공용 IP를 다양한 FQDN 등에 매핑합니다 foo.example.com
.bar.example.com
NAT가 있습니다.
77.77.77.77:10080 -> 10.0.0.77:80
77.77.77.77:10443 -> 10.0.0.77:443
이는 프록시의 공용 IP 주소가 다른 서비스에도 사용되기 때문에 필요합니다. 다음으로 설정이것은 또 다른 질문입니다.
다음은 가상 호스트 구성의 단순화된 예입니다 /etc/httpd/conf.d/foo.conf
.
<VirtualHost *:80>
ServerName foo.example.com
ProxyRequests Off
ProxyPreserveHost Off
SetEnv proxy-nokeepalive 1
Redirect "/" "https://foo.example.com:10443/"
</VirtualHost>
<VirtualHost *:443>
ServerName foo.example.com
ServerSignature On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine On
SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder on
# SSLCipherSuite shortened here for simplicity
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384"
SSLCertificateFile /etc/httpd/ssl/proxy.crt
SSLCertificateKeyFile /etc/httpd/ssl/proxy.key
SSLCACertificateFile /etc/httpd/ssl/proxy.ca.crt
ProxyRequests Off
ProxyPreserveHost On
ProxyPass "/" "http://foo.example.com:8080/"
ProxyPassReverse "/" "http://foo.example.com:8080/"
</VirtualHost>
이 구성은 두 개의 Jira 서버, Stash 서버, Confluence v6.10 서버 및 기타 여러 서버에서 작동합니다. 그러나 웹 브라우저는 프록시 Bamboo v6.4 서버 가상 호스트 및 Question2Answer 플랫폼을 로드할 수 없습니다.
Firefox에서 보고된 오류는 입니다 NS_ERROR_NET_TIMEOUT
. IE에서 오류는 다음과 같습니다:
일시적인 DNS 오류가 발생했습니다. 페이지를 새로 고쳐보세요.
오류 코드: INET_E_RESOURCE_NOT_FOUND
실패한 각 가상 호스트에 대한 httpd 액세스 로그에는 심지어 에도 아무 것도 없으므로 LogLevel trace8
요청이 프록시에 도달하지 않은 것 같습니다.
프록시를 통해 컬에서 Bamboo에 액세스할 수 있습니다( -L
Bamboo가 302를 제공하기 때문에 플래그가 필요함).
[root@proxy]# curl -XGET http://bamboo.example.com:8085/
[root@proxy]# curl -v -XGET http://bamboo.example.com:8085/
* About to connect() to bamboo.example.com port 8085 (#0)
* Trying 10.0.0.11...
* Connected to bamboo.example.com (10.0.0.11) port 8085 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: bamboo.example.com:8085
> Accept: */*
>
< HTTP/1.1 302 Found
< Server: Apache-Coyote/1.1
< X-ASEN: SEN-4619603
< X-Frame-Options: SAMEORIGIN
< X-Content-Type-Options: nosniff
< Vary: Accept-Encoding
< Set-Cookie: JSESSIONID=E4D13B8AD7D4D172F4E5F834D1E89710; Path=/; Secure; HttpOnly
< Cache-Control: no-store
< Location: /userlogin!doDefault.action?os_destination=%2Fstart.action
< Content-Language: en-US
< Content-Length: 0
< Date: Mon, 01 Oct 2018 15:06:19 GMT
<
* Connection #0 to host bamboo.example.com left intact
[root@proxy]# curl -L -XGET http://bamboo.example.com:8085/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Log in as a Bamboo user</title>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta name="application-name" content="Bamboo" />
(...)
대상 서버의 방화벽은 서버에서 에이전트로 열려 있습니다. Atlassian 애플리케이션은 TCP/8080에서 콘텐츠를 제공하는 Jira와 같은 비표준 포트에서 실행됩니다.
거의 모든 다른 웹 호스트가 완벽하게 작동하기 때문에 혼란스럽습니다. 또한 URL 경로를 다시 확인했는데 정확했습니다.
이 문제의 원인은 무엇입니까?
HTTP 요청을 추적하는 더 좋은 방법이 있습니까? 저는 현재 Firefox의 추가 기능인 HTTP Header Live를 사용하고 있으며 좀 더 정교한 도구를 찾고 싶습니다.
답변1
구성에 문제가 있는 경우 Apache 오류 로그에서 실패한 요청의 내용을 볼 수 있습니다. 보통 그들은 /var/log/apache2/error.log
비슷한 장소나 어딘가에 있습니다 . 시간 초과는 구성의 백엔드 서버에 연결할 수 없음을 나타냅니다. 컬을 사용하여 접근할 수 있으므로 이는 구성 문제일 수 있습니다.
해당 항목에 아무것도 없거나 요청에 대한 액세스 로그(동일한 위치)가 없다면 애초에 프록시에 도달하지 않았을 가능성이 높습니다. Bamboo.example.com의 DNS 구성이 올바르고 예상대로 프록시를 가리키는지 확인하겠습니다.
외부 액세스 프록시를 사용하여 curl
진행 상황을 더 자세히 확인할 수 있습니다. 이름이 예상한 IP로 확인되는지 먼저 확인해 dig
보세요 .nslookup
내 생각엔 클라이언트 -> 프록시 사이에 문제가 있는 것 같습니다. 프록시 -> 백엔드 시간이 초과되면 브라우저에 504 오류 코드가 표시될 수 있기 때문입니다.
답변2
IE가 보고한 오류에서 힌트를 얻었습니다. 실패한 가상 호스트의 DNS A 레코드는 프록시 서버를 가리키는 것이 아니라 서버의 개인 IP를 가리킵니다.
Firefox는 일반적인 시간 초과만 보고했기 때문에 문제를 더 빨리 파악하지 못했습니다.