Nuke Olaf - Log Store

웹개발 - 프론트엔드와 백엔드 분리하기 본문

Language/[PHP]

웹개발 - 프론트엔드와 백엔드 분리하기

NukeOlaf 2020. 2. 7. 16:22

내 아파치 웹 서버에는 프론트엔드와 백엔드 파일들이 혼재되어있다.
프론트엔드와 백엔드를 완전히 분리하기 위해 서버를 2개로 분리할 것이다.

아파치의 httpd.conf 에 들어가보면 server root 가 /usr/local/apache2.4 로 되어있다.

서버 루트를 두개 만들어놓고, 두 루트에 각각 프론트엔드와 백엔드 파일들을 위치시킬 것이다.

 

검색어는 multiple document root

검색하다보니, Apache Virtual Host 를 사용하여 단일 컴퓨터에서 둘 이상의 도메인을 호스팅할 수 있다고 한다.

Web Server 에는 기본적으로 존재하는 Host가 있는데, 이를 Main Host 라고 한다.
(여기서 host 란 인터넷을 통해 다른 컴퓨터들과 쌍방향 통신이 가능한 컴퓨터)
하나의 Web Server 에는 Main Host 외에 별도의 디렉토리를 가진 여러개의 Host 를 설정할 수 있다.
이를 Virtual Host 라고 한다. Virtual Host 설정을 통해 1개의 서버에서 여러개의 웹사이트를 운영할 수 있는 것이다.

즉, 가상 호스트를 사용하면 각 도메인, 또는 하위 도메인에 대해 다른 document root(웹 사이트 파일을 포함하는 디렉토리) 를 지정하고, 별도의 보안정책을 작성하거나 다른 SSL 인증서등을 사용할 수 있다는 것이다.

document root 는 도메인 이름에 대한 웹 사이트 파일이 요청에 응답하여 저장되고 제공되는 디렉토리이다.

1. VirtualHost 설정하기

가상 호스트를 설정하기 위해서는 보통 httpd-vhosts.conf 에 가상 호스트를 설정하고, httpd.conf 파일 마지막에
Include conf/extra/httpd-vhosts.conf 를 추가해주는 방식을 사용한다.

가상호스트를 추가하는 방법에는 여러가지가 있다.

(1) IP 기반 가상 호스트

- 한 장비에 여러개의 IP를 할당받고 IP별로 가상호스트를 사용하는 방법이다.

- IP추가를 위해 네트워크 카드 추가 및 네트워크 설정 등이 필요하다.

Listen 192.168.111.100:80

Listen 192.168.111.200:80

<VirtualHost 192.168.111.100:80>

  DocumentRoot /var/www/site1

  ServerName site1.example.com

</VirtualHost>

 

<VirtualHost 192.168.111.200:80>

  DocumentRoot /var/www/site2

  ServerName site2.example.com

</VirtualHost>

 

(2) 포트 기반 가상 호스트

- 포트를 기반으로 가상 호스트를 설정한다. Listen 포트에 사용할 포트를 여러개 설정한 후 VirtualHost를 해당 포트로 설정하면 된다.

- 하지만, 포트를 인식하고 사용자들이 웹서비스에 접근하는 것은 불편하므로 일반적인 방법은 아니다.

Listen 80

Listen 90



<VirtualHost 192.168.111.100:80>

  DocumentRoot /var/www/port_80

</VirtualHost>



<VirtualHost 192.168.111.100:90>

  DocumentRoot /var/www/port_90

</VirtualHost>

 

(3) 이름 기반 가상 호스트

- 한 장비에 여러개의 도메인 이름을 부여하고 도메인 이름별로 가상 호스트를 사용하는 방법이다.

- 이름 기반 가상 호스트는 클라이언트 요청시 전송하는 헤더중 Host 헤더정보를 사용하여 가상 호스트 설정에 따라 웹 서비스를 하게 된다.

NameVirtualHost *:80



<VirtualHost *:80>

  ServerName site1.example.com

  ServerAlias site1.co.kr

  ServerAlias site.kr

  DocumentRoot /var/www/site1

</VirtualHost>





<VirtualHost *:80>

  ServerName site2.example.com

  DocumentRoot /var/www/site2

</VirtualHost>

1) NameVirtualHost 설정

 - 80 포트에서 이름 기반 가상 호스트를 사용하겠다는 의미로 반드시 적어줘야 한다.
 - 만약 설정되지 않는 호스트명을 보냈을 경우 기본 처리할 가상호스트로 지정하려면 <VirtualHost _default_:80>으로 지정하도록 한다. 만약 이 설정이 없다면 첫번째 가상 호스트 설정으로 동작하게 된다.
 - 하지만 아파치 웹서버 2.4 이후부터는 이름 기반 가상 호스트가 Default이므로, 2.4 이후 버전에서는 없어졌다.

2) ServerAlias

 - 웹서비스가 여러개의 도메인을 사용할 경우 지정해준다. 여러개 지정해줘도 무방하다.

 

==> 나는 포트를 기반으로 호스트를 설정할 것이다. 사용자가 접근하는 것이 아닌,
내 프론트엔드 웹서버에서 백엔드 웹서버에 접근할 때 사용하기 위해 가상 호스트를 만드려고 하는 것이기 때문이다.

81번 포트에서 서비스되는 가상 호스트를 하나 더 만들었다.

 

2. httpd.conf 수정하기

나는 htdocs-back 디렉토리에 81번 포트로 접근할 것이므로, Listen 81 을 추가해준다.

 

DocumentRoot 디렉토리의 권한설정을 주석처리해준다.
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
부분을 주석처리해주고, <Directory "/usr/local/apache2.4/htdocs">태그로 감싸진 부분도 주석처리

 

Virtual Host 설정 파일의 주석을 해제해준다.

 

httpd.conf 파일을 수정한 뒤에는 웹서버를 꼭 재시작 해주어야 한다.

service httpd restart // 재시작

 

3. 81번 포트가 잘 열렸는지 확인하기

netstat -an | grep "LISTEN " // 포트 확인

이제 domain:80 을 접속했을 때는 /usr/local/apache2.4/htdocs 경로에 있는 파일을 열게되고,
domain:81 을 접속했을 때는 /usr/local/apache2.4/htdocs-back 경로에 있는 파일을 열게 된다.

domain:80 으로 접속
domain:81 로 접속

81번 포트로 접속했을때, Forbidden 이 뜨면서, 권한문제로 접근할 수 없다고 뜬다.
찾아보니 VirtualHost 의 Directory 설정이 잘못되어있었다. 

이렇게 고쳐주니, 제대로 동작한다.

 

 

참고 사이트 >>>

https://doitnow-man.tistory.com/58

https://mygumi.tistory.com/64

https://jg-seo.tistory.com/36

https://pshcode.tistory.com/88

https://linuxize.com/post/how-to-set-up-apache-virtual-hosts-on-debian-9/

 

Comments