메뉴 건너뛰기

XEDITION

Server

https://qa.apthow.com/archives/21231


사용자가 FTP로 액세스 할 수있는 자체 웹 사이트가있는 서버 (예 : 호스팅 회사와 같은)를 관리하고 LAMP 스택 프로세스를 분리하는 대신 Docker를 구현하고 웹 사이트 당 이미지를 사용할 수 있는지 궁금합니다.

내가 이해 한 바에 따르면 포트를 통해 Docker 인스턴스를 노출 할 수 있으므로 동일한 서버에서 두 개의 docker 인스턴스를 실행하면 두 개의 다른 포트를 노출해야합니다.

그러나 포트가 아닌 서버 이름을 내보낼 수 있습니다. 

  • www.somewebsite.com : Docker 인스턴스 1
  • www.otherwebsite.com : Docker 인스턴스 2
  • www.etc.com : 도커 인스턴스 …

그리고 그것은 같은 서버에 있습니다.

서버에 Apache 만 설치하는 것에 대해 생각했습니다. 서버 이름을 기반으로 요청을 전용 Docker 인스턴스로 리디렉션하지만 모든 Docker 인스턴스에 Apache (다시!)와 MySQL을 설치해야합니다.

이것이 가능하고 또한 성능 측면에서 흥미 롭습니까?

도와 주셔서 감사합니다.

 

 



답변

네 가능합니다. 당신이해야 할 일은 몇 개의 80 포트를 제공하는 것입니다. 각 URL마다 하나씩입니다. 예를 들어 Docker 호스트 서버에서 실행되는 Apache의 Virtual Host를 사용 하여이 작업을 수행 할 수 있습니다.

  1. DNS CNAME을 설정하십시오.
  2. 도커 인스턴스를 실행하고 포트 80을 도커 호스트의 12345 ~ 12347 포트에 매핑합니다.
  3. docker 호스트에서 Apache 서버를 실행하고 각 URL에 가상 호스트를 설정하고 ProxyPass 및 ProxyPassReverse를 docker 인스턴스 중 하나 인 localhost : 12345로 설정하십시오.

아파치 설정 파일은 다음과 같습니다 :

<VirtualHost *:80>
ServerName www.somewebsite.com
  <Proxy *>
    Allow from localhost
  </Proxy>
  ProxyPass        / http://local.hostname.ofDockerHost:12345/
  ProxyPassReverse / http://local.hostname.ofDockerHost:12345/
</VirtualHost>

 


답변

것이 가능하다. 각 컨테이너의 아파치 포트로 리다이렉션하기 위해 메인 서버에서 아파치 (또는 더 좋은 방법으로, haproxy, nginx 또는 varnish, 그 리디렉션 작업보다 아파치보다 효율적일 수 있음)를 사용할 수 있습니다.

그러나 실행하는 사이트 (및 해당 아파치 구성)에 따라, 특히 많은 RAM이 필요한 모듈 (예 : PHP)이있는 경우 가상 호스트에 단일 중앙 아파치를 사용하는 것보다 훨씬 더 많은 메모리가 필요할 수 있습니다.

 


답변

나는 이것이 이미 대답되었다는 것을 알고 있지만 한 단계 더 나아가서 더 완전한 대답을 제공하기 위해 어떻게 할 수 있는지에 대한 예를 보여주고 싶었습니다.

사용 방법에 대한 지침과 함께 내 docker 이미지를 참조하십시오.이 사이트는 두 사이트를 구성하는 방법을 보여줍니다 https://hub.docker.com/r/vect0r/httpd-proxy/

jihun이 말했듯이 vhost 구성이 설정되어 있는지 확인해야합니다. 내 예제는 포트 80을 사용하여 테스트 사이트 example.com을 표시하고 81을 사용하여 테스트 사이트 example2.com을 표시합니다. 또한 Dockerfile에 컨텐츠를 지정하고 필요한 포트를 노출시켜야합니다.

FROM centos:latest
Maintainer vect0r
LABEL Vendor="CentOS"

RUN yum -y update && yum clean all
RUN yum -y install httpd && yum clean all

EXPOSE 80 81

#Simple startup script to aviod some issues observed with container restart
ADD run-httpd.sh /run-httpd.sh
RUN chmod -v +x /run-httpd.sh

#Copy config file across
COPY ./httpd.conf /etc/httpd/conf/httpd.conf
COPY ./example.com /var/www/example.com
COPY ./example2.com /var/www/example2.com
COPY ./sites-available /etc/httpd/sites-available
COPY ./sites-enabled /etc/httpd/sites-enabled

CMD ["/run-httpd.sh"]

이것이 프로세스를 조금 더 설명하는 데 도움이되기를 바랍니다. 이에 대해 더 궁금한 점이 있으면 언제든지 문의 해주세요.

문안 인사,

V

 


답변

필자의 경우 도커 컨테이너에서 SSL을 활성화하려고했기 때문에 SSLProxyEngine On , ProxyPreserveHost On 및  RequestHeader를 프론트 엔드 HTTPs를 “on” 으로 설정해야했습니다. [정보 local.hostname.ofDockerHost , 내 경우에는 고정 표시기 컨테이너를 실행하는 호스트 서버의 이름이었다 루카스 , 그리고 고정 표시기 컨테이너의 포트 443에 매핑 포트이었다 1443 포트 443 호스트에서 아파치에서 이미 사용했기 때문에 ( 서버), 그래서 그 줄은 이런 식으로 끝났습니다 https : // lucas : 1443 /

이것은 최종 설정이며 제대로 작동합니다!

<VirtualHost *:443> # Change to *:80 if no https required
    ServerName www.somewebsite.com
    <Proxy *>
        Allow from localhost
    </Proxy>
    SSLProxyEngine On # Comment this out if no https required
    RequestHeader set Front-End-Https "On" # Comment this out if no https required
    ProxyPreserveHost    On
    ProxyPass        / http://local.hostname.ofDockerHost:12345/
    ProxyPassReverse / http://local.hostname.ofDockerHost:12345/
</VirtualHost>

마지막으로 도커 컨테이너에서 프록시 SSL 헤더를 설정해야했습니다. 필자의 경우 컨테이너는 nginx와 루비 앱을 설정하기 위해 omnibus 라는 것을 실행 했습니다. 나는 이것이 nginx 설정 파일에서도 설정할 수 있다고 생각합니다. 누군가가 도움이되는 경우를 대비하여 적어 두십시오.

nginx['redirect_http_to_https'] = true
nginx['proxy_set_headers'] = {
    "Host" => "$http_host",
    "X-Real-IP" => "$remote_addr",
    "X-Forwarded-For" => "$proxy_add_x_forwarded_for",
    "X-Forwarded-Proto" => "https",
    "X-Forwarded-Ssl" => "on"
}
nginx['real_ip_trusted_addresses'] = ['10.0.0.77'] # IP for lucas host
nginx['real_ip_header'] = 'X-Real-IP'
nginx['real_ip_recursive'] = 'on'

아파치, ISP 구성, Ubuntu 서버 16.04에 대한 전체 안내서는 https://www.howtoforge.com/community/threads/subdomain-or-subfolder-route-requests-to-running-docker-image.73845/#post-347744

 

 


 


 

첫번째 답변 사용 시 정상 작동 확인함

    Gitlab의 WebIDE에서 문제 발생 확인

나머지는 확인하지 않음

 

 

번호 제목 글쓴이 날짜 조회 수
30 Proxy로 Gitlab Container의 웹IDE에서 브런치를 못 불러오는 문제 해결 방법 proin 2022.04.28 2
» Docker를 사용하여 사용자를 위해 웹 사이트를 분리 할 수 ​​있습니까? 수있는 자체 웹 사이트가있는 서버 (예 : proin 2022.02.24 1
28 docker 가 우분투 ufw 같이 사용시 방화벽룰 무시하는 문제 해결하기 proin 2021.08.19 1
27 Ubuntu KERNEL Upgrade, Downgrade, Remove , Hold 18.04 proin 2021.06.07 2
26 GNU Tar를 이용한 증분 백업과 복원의 개념 이해 proin 2021.05.13 3
25 [UNIX / Linux] 특수 권한(setuid, setgid, sticky bit) file proin 2021.04.27 1
24 Apache2 웹서버에 https 적용하기 (Let's Encrypt SSL Certificate) file proin 2021.04.19 9
23 [LINUX] 기본 명령어로 메인보드, 씨피유, 메모리, 디스크, 네트워크 모델명 및 정보 확인하기 proin 2021.04.16 1
22 [Ubuntu] 우분투 방화벽(UFW) 설정 proin 2021.03.25 3
21 실행중인 컨테이너의 hostname 변경..? proin 2021.02.25 3
20 ubuntu APM 자동 설치하기(php 5.6, php 7.0) proin 2021.01.14 9
19 How To View CPU Temperature On Linux proin 2020.11.10 1
18 CPU/MEM STRESS TEST IN UBUNTU 18.04 proin 2020.11.10 2
17 UBUNTU에서 GPU 모니터링 더 멋지게 하기 proin 2020.11.10 5
16 UBUNTU에서 GPU 모니터링 하는 4가지 방법 proin 2020.11.10 3
15 리눅스 stress 툴을 통해 CPU, Memory 스트레스 부하 주는 방법 proin 2020.11.10 1
14 메모리,하드,cpu 스트레스 테스트 proin 2020.11.10 2
13 Ubuntu SVN 추천 :: RabbitVCS 설치하기 proin 2020.09.11 1
12 [기본.1] Linux 서버에 SVN 구축(설치)하기 proin 2020.09.11 2
11 sudo 설정하기 proin 2020.09.09 1
위로