apache2 설치 시도 중

안녕하세요,

제목에 적힌 대로 sudo apt install apache2를 실행했습니다.

서버가 시작되지 않으며, 다음과 같은 오류가 발생합니다:

(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
pam_unix(sudo:session): session closed for user root
Control process exited, code=exited status=1
apache2.service: Failed with result 'exit-code'.
Failed to start The Apache HTTP Server.

이 문제를 어떻게 해결할 수 있을까요? 미리 감사드립니다.

해당 포트에서 이미 다른 프로세스가 실행 중입니다. 해당 프로세스를 찾아 중지해야 합니다.

netstat -an | grep :80 명령을 실행하면 무엇인지 확인할 수 있습니다.

tcp6       0      0 :::80                   :::*                    LISTEN

tcp6? 이상하네

그러면 apache2.conf의 포트를 다른 것으로 변경해야 하는 건가요? 이 웹서버에서 실행될 미래의 사이트들에 문제가 생기지는 않을까요?

죄송합니다, 플래그 하나를 빠뜨렸습니다. 프로그램 이름을 표시하려면 netstat -anp를 사용하세요.

왜요? Discourse를 설치했다면 포트 80과 443을 사용하므로 충돌이 발생할 수 있습니다.

기존 Apache 사이트가 있는 서버에서 Discourse 설정 방법을 참고해 주세요.

한번 시도해볼게요, 감사합니다!

그리고 @schleifer 님, 30005/docker-proxy라고 나와요.

그렇기도 하고, 아니기도 합니다. 한 발짝 물러서서 이 문제를 살펴봅시다.

이전에는 Apache를 사용하여 여러 웹사이트를 실행하고 있었던 것으로 보입니다. Apache는 80과 443 포트에서 요청을 수신하고, 이를 "가상 호스트(virtual hosts)"로 "프록시(redirect)"하여 동일한 서버에서 여러 웹사이트를 같은 포트(80과 443)로 실행할 수 있게 했습니다. 이것이 "LAMP 101"이라 불리는 가상 호스트 방식입니다.

이제 공식적인 OOTB(Out Of The Box) 방식으로 Discourse를 설치한다고 가정해 봅시다. OOTB Discourse는 동일한 포트에 바인드(bind)하려고 시도하지만, Apache가 이미 해당 포트를 사용(바인드)하고 있으므로 실패합니다. 선택지는 다음과 같습니다:

  1. Discourse를 유닉스 도메인 소켓(unix domain socket)으로 실행하고, Apache를 설정하여 Discourse 앱을 가상 호스트로 리버스 프록시(reverse proxy)하도록 합니다.

참고: 이 방법은 테스트를 통해 작동하는 것을 확인했습니다. 하지만 이는 Discourse에서 공식적으로(또는 비공식적으로) 지원되지 않습니다.

  1. Apache에서 nginx로 전환하여 모든 웹 서버를 nginx로 실행하고, Discourse-docker 프로덕션 앱을 위한 유닉스 도메인 소켓을 사용하여 Discourse 앱을 가상 호스트로 리버스 프록시합니다.

참고: 이 방법도 Discourse에서 공식적으로 지원되지 않습니다. Apache 사이트를 운영하는 대부분의 사용자는 Apache2의 mod_rewrite 및 인코딩된 geo-ip 모듈 관련 설정을 nginx로 이식하는 것이 다소 까다롭다고 느낄 수 있습니다. 하지만 물론 가능은 합니다. 특히 애플리케이션이 nginx와 Apache2 모두를 지원하도록 구축된 경우라면 더 쉽지만, 여전히 공식적으로 지원되지는 않습니다.

  1. 80과 443이 아닌 다른 포트에 Discourse docker 컨테이너를 노출합니다.

참고: 이 방법도(실제로는) 권장되지 않습니다(다만 기억이 정확하다면 공식적으로는 지원됩니다). 하지만 대부분의 사용자는 https://my-great-discourse-app.org:3334와 같이 포트 번호를 입력해야 하는 웹 앱에 접근하는 것을 원하지 않기 때문에, 프로덕션 환경에서는 이렇게 하지 않는 경우가 많습니다. 개발 환경은 별개의 이야기입니다.

“모든 세부 사항을 알지 못하는” 상태에서, LAMP와 이제 점점 더 많은 Discourse를 사용해 온 사람으로서의 제 추천은, Discourse를 별도의 서버에서 실행하는 것입니다(이것은 Discourse에서 공식적으로 지원됩니다). 하지만 예산이 정말 빠듯하여 모두 같은 서버에서 실행해야 하거나(또는 그저 복잡한 서버 하나를 운영하는 것을 선호한다면), Apache2를 설정하여 유닉스 도메인 소켓을 통해 Discourse 앱으로 리버스 프록시하도록 하는 방법을 배워야 합니다.

이것을 테스트해 보았는데, Apache2를 설정하여 유닉스 도메인 소켓을 사용해 Discourse로 리버스 프록시하는 것은 가능합니다. 하지만 이 솔루션은 공식적으로(전혀) 지원되지 않습니다.

참고: Apache2를 HAProxy와 함께 설정하는 링크는 쉽게 작동하게 만들 수 없었던 솔루션이라서 포기했습니다(HAProxy만 사용할 필요는 없으며, 이를 수행하는 "기존 방식"들이 있습니다). 하지만 대신 이 Discourse 튜토리얼을 따르는 것이 더 나을 수 있습니다.

조금이나마 도움이 되길 바랍니다, @nekodroid

비표준 포트에 게시하는 것은 100% 지원되지 않습니다. 소켓에 바인딩하는 대신 사이트 소유자가 포트를 변경하고 리버스 프록시를 사용하여 80/443으로 다시 매핑하는 몇 가지 주제를 본 적이 있습니다. 그러나 최종 결과가 :port를 필요로 한다면 지원할 수 없습니다.