
미리 알림: 웹마스터 StackExchange 및 ServerFault에 이 질문을 했는데 두 번 모두 닫혔습니다. ServerFault에서 여기로 리디렉션되었습니다.
나는 이것이 왜 작동하지 않는지 알아내려고 정신이 나갔었습니다. Apache와 CentOS를 사용한 것은 이번이 처음입니다. 나의 능력을 키우는 데 도움이 되는 취미 웹사이트입니다.
제가 하려는 작업은 다음과 같습니다. 서버에 ASP.NET Core 애플리케이션 설정이 있습니다. 파일은 /var/www/myapp
. 이에 대한 서비스 설정이 있고 포트 5000에서 실행 중입니다. 이에 대해 컬링하여 적절한 응답을 얻을 수 있습니다.
curl -H 'Content-Type: application/json' -X POST -d '<json>' http://127.0.0.1:5000/graphql
이제 내 도메인의 역방향 프록시를 통해 이 애플리케이션과 상호 작용할 수 있기를 원합니다. 저는 이에 대한 Microsoft 문서를 따라 시작했습니다.https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1
그것은 나에게 효과가 없었기 때문에 많은 연구를 시작했고 나는 길을 잃었습니다. 뭘 해도 404에러가 뜹니다. 찾을 수 없습니다. 맙소사 난 그게 지겨워 ㅋㅋㅋ. 제가 지금 있는 곳은 바로 여기입니다. myapp.conf
다음 위치에 구성 파일 이름이 있습니다 /etc/apache2/conf.d
.
<VirtualHost *:80>
ServerName <domain>.com
ServerAlias *.<domain>.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ErrorLog /etc/apache2/logs/myapp-error.log
CustomLog /etc/apache2/logs/myapp-access.log common
</VirtualHost>
내 구성 파일이 표시되고 있음을 알고 있습니다.
apachectl -S | grep myapp
*:80 <domain>.com (/etc/apache2/conf.d/myapp.conf:1)
프록시 모듈이 활성화되어 있다는 것을 알고 있습니다.
httpd -M | grep proxy
proxy_module (shared)
proxy_fcgi_module (shared)
proxy_http_module (shared)
proxy_wstunnel_module (shared)
어쨌든 안전을 위해 수동으로 로드하려고 하면 Apache는 해당 기능이 이미 활성화되어 있다고 말하고 건너뜁니다. 내 구성도 괜찮다는 것을 알고 있습니다.
apachectl -t
Syntax OK
나는 사용하고있다불명증역방향 프록시를 테스트합니다. 교환은 다음과 같습니다.
* Preparing request to http://<domain>.com/graphql
* Using libcurl/7.69.1 OpenSSL/1.1.1g zlib/1.2.11 brotli/1.0.7 libidn2/2.1.1 libssh2/1.9.0 nghttp2/1.40.0
* Current time is 2020-06-27T01:22:57.448Z
* Disable timeout
* Enable automatic URL encoding
* Enable SSL validation
* Enable cookie sending with jar of 1 cookie
* Too old connection (488 seconds), disconnect it
* Connection 46 seems to be dead!
* Closing connection 46
* Trying <ip_address>:80...
* Connected to <domain>.com (<ip_address>) port 80 (#47)
> POST /graphql HTTP/1.1
> Host: <domain>.com
> User-Agent: insomnia/2020.2.2
> Content-Type: application/json
> Accept: */*
> Content-Length: 343
| <json>
* upload completely sent off: 343 out of 343 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Date: Sat, 27 Jun 2020 01:22:57 GMT
< Server: Apache
< Content-Length: 315
< Content-Type: text/html; charset=iso-8859-1
* Received 315 B chunk
* Connection #47 to host <domain>.com left intact
내가 읽은 모든 내용에 따르면... 이 404를 받아야 할 이유가 없습니다. 그건 그렇고, 나는 구성 파일의 각 지시어를 구성하는 수십 가지의 다양한 방법을 시도했습니다. 제안 사항이 있으면 기꺼이 다시 모든 작업을 수행하겠습니다.
제가 알아내려고 노력했지만 실패했던 한 가지는 Apache 설정에 대해 요청을 테스트하고 Apache가 요청을 라우팅하는 방법을 확인하는 방법이 있는지 여부입니다. 그러니 아는 사람이 있으면 좋을 것 같아요.
답변1
그래서 많은 시행착오 끝에 내 가상 호스트 정의가 httpd.conf의 기본 정의 이후에 처리되고 있다는 것이 문제라고 생각합니다. 가 아닌 서버의 IP 주소를 수신하도록 가상 호스트 정의를 변경했을 때 *:80
작동했습니다.
<VirtualHost *:80>
...
</VirtualHost>
to
<VirtualHost <my-server-ip-address>:80>
...
</VirtualHost>
*:80이 작동하지 않는 이유를 알아내고 싶지만 아마도 그것은 다른 날에 있을 것입니다.