Nuke Olaf - Log Store
웹개발 - 프론트엔드와 백엔드 분리하기 본문
내 아파치 웹 서버에는 프론트엔드와 백엔드 파일들이 혼재되어있다.
프론트엔드와 백엔드를 완전히 분리하기 위해 서버를 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 경로에 있는 파일을 열게 된다.
81번 포트로 접속했을때, Forbidden 이 뜨면서, 권한문제로 접근할 수 없다고 뜬다.
찾아보니 VirtualHost 의 Directory 설정이 잘못되어있었다.
이렇게 고쳐주니, 제대로 동작한다.
참고 사이트 >>>
https://doitnow-man.tistory.com/58
https://pshcode.tistory.com/88
https://linuxize.com/post/how-to-set-up-apache-virtual-hosts-on-debian-9/
'Language > [PHP]' 카테고리의 다른 글
Uncaught SyntaxError: Unexpected token (0) | 2020.02.08 |
---|---|
blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource (0) | 2020.02.08 |
HTML - <a> 태그란> (0) | 2020.02.04 |
HTML5 - 블록 태그, 인라인 태그란? (1) | 2020.02.04 |
PHP - file_put_contents 가 실행되지 않음 (0) | 2020.02.03 |