그래서 저는 디지털 오션과 nginx를 사용하고 있습니다. 여러 웹 사이트 (내 프로젝트)를 호스팅하고 싶지만 각 웹 사이트에 도메인을 구매하고 싶지 않습니다.
하나의 IP를 사용하여 웹 사이트에 액세스하면서 nginx 및 디지털 오션에서 여러 웹 사이트를 호스팅하는 방법이 있습니까?
그래서 저는 디지털 오션과 nginx를 사용하고 있습니다. 여러 웹 사이트 (내 프로젝트)를 호스팅하고 싶지만 각 웹 사이트에 도메인을 구매하고 싶지 않습니다.
하나의 IP를 사용하여 웹 사이트에 액세스하면서 nginx 및 디지털 오션에서 여러 웹 사이트를 호스팅하는 방법이 있습니까?
답변:
이를 달성하는 데는 두 가지 방법이 있습니다. 하위 폴더 위치를 사용하여 IP 주소별로 모든 작업을 수행하거나 하나의 도메인 을 구입 한 다음 해당 도메인에 여러 개의 하위 도메인이 있어야합니다 (도메인을 구매하는 경우 하위 도메인은 비용이 들지 않지만 등록 기관에 확인).
IP 주소를 기억해야하는 것이 매우 악의적 인 경우에만 IP 주소 방법을 권하지 않으며, 다른 사람과 정보를 공유하려고하면 다른 사람이 IP 주소를 기억해야하는 것과 같은 문제가 있습니다.
주의! 현재 진행중인 프로젝트에 대한 정보가 없습니다. 많은 웹 프레임 워크가 실제 도메인 이름과 연결되어 있지 않으면 작동하지 않기때문에이 방법을 사용할 수 있는지 여부를 결정하기 위해 더 많은 정보가 필요합니다.
경고 : 이러한 예제를 지속적으로 테스트 할 때 요청 된 URI에 URI 내의 하위 디렉토리가 포함되므로 "하나의 도메인, 많은 하위 디렉토리"접근 방식이 백엔드로 데이터를 역 프록시하는 데 친절하지 않은 것으로 나타났습니다. 이로 인해 백엔드 서버가 올바르게 동작하는 데 문제가 발생할 수 있습니다.
한편, nginx
하나의 IP 주소, 많은 docroot 및 하위 폴더 위치에 대해 '악한'접근 방식을 수행해야합니다. 이것은 매우 사악한 접근 방식이며 일부 웹 프레임 워크에서 많은 문제를 일으킬 수 있습니다.
nginx
저장소에서 기본 설치를 기본으로 가정하면 각 프로젝트 서브 디렉토리 요청을 처리 할 사이트 구성을 작성해야합니다. 그런 다음 올바른 위치에 심볼릭 링크를 연결해야합니다.
다음 /etc/nginx/sites-available/my-projects
과 같이 생성하십시오 (템플릿 / 가이드로 사용하십시오-정적 HTML을 사용하고 PHP 또는 Python 또는 이와 유사한 동적 웹 응용 프로그램을 사용하지 않는 세 개의 프로젝트를 가정하고 개별 위치 블록을 복사하고 그에 따라 새 위치를 만들 수 있음) 서버 IP는 1.2.3.4
)입니다.
server {
listen 80 default_server;
server_name 1.2.3.4;
location / {
return 410; # Default root of site won't exist.
}
location /proj1/ {
alias /var/www/proj1;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj2/ {
alias /var/www/proj2;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj3/ {
alias /var/www/proj3;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
}
이제 우리는 기본 설정을 바꾸고 제거하고 다음을 추가합니다 :
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled
그런 다음 nginx
서비스 를 다시 시작하십시오 .
# If on 14.04, use this:
sudo service nginx restart
# If on 15.10 or newer, use this:
sudo systemctl restart nginx
이 답변 섹션에는 하나의 도메인과 여러 개의 하위 도메인이 있다고 가정합니다. 당신이 이것을 가지고 있지 않다면, 당신의 질문에 이것을 명확히하십시오
nginx
server {}
구성의 각 블록 마다 서버 이름을 정의하고 다른 요청에 대한 네 번째 서버 블록을 '모두 포획'으로 설정해야합니다.
예 : 나는 세 가지 프로젝트를 가지고,
proj1
,proj2
,proj3
. 도메인이 있습니다evil-projects.net
(참고 : 실제로 존재하지 않습니다). 각각nginx
하나의 프로젝트를 가리키는 각 구성 마다 하나씩 세 개의 다른 하위 도메인을 원합니다 . 내 서버는 1.2.3.4에 있으며 모든 사이트에 서비스를 제공합니다.
위 시나리오에서 도메인과 하위 도메인, 서버 구성의 두 부분이 있습니다.
호스트에서 DNS 레코드를 설정하여 DNS 레코드가 다음과 일치하도록 DNS를 설정하십시오.
evil-projects.net IN A 1.2.3.4
proj1.evil-projects.net IN A 1.2.3.4
proj2.evil-projects.net IN A 1.2.3.4
proj3.evil-projects.net IN A 1.2.3.4
이제 nginx
구성하십시오. 기본 nginx 설정과 리포지토리의 패키지가 있다고 가정합니다 (기본 예제로 14.04를 사용하겠습니다). /etc/nginx/sites-available
먼저 네 개의 구성 파일을 넣습니다 . 해당 폴더가의 소유이므로이 파일을 만들 때 사용해야 sudo
할 수도 있습니다 root
.
/etc/nginx/sites-available/catch-all
-유효하지 않은 도메인의 경우 '모두 잡기'가됩니다. http 오류 코드 410 (GONE)을 반환하는 것이 좋습니다.
server {
listen 80 default_server;
server_name _;
return 410;
}
다음으로 사이트 / 프로젝트에 대한 구성을 설정합니다. 그래도 모두 정적 파일이라고 가정하겠습니다. 이들 각각은 서버의 각 프로젝트마다 다른 웹 디렉토리가 있음을 의미합니다 (서로 다른 '문서 루트').
/etc/nginx/sites-available/proj1.evil-projects.net
:
server {
listen 80;
server_name proj1.evil-projects.net;
root /var/www/proj1;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj2.evil-projects.net
:
server {
listen 80;
server_name proj2.evil-projects.net;
root /var/www/proj2;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj3.evil-projects.net
:
server {
listen 80;
server_name proj3.evil-projects.net;
root /var/www/proj3;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
그런 다음에서 '기본'구성을 제거 /etc/nginx/sites-enabled
하고 자체 구성을 추가해야합니다. 다시 sudo
여기에 필요합니다.
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/proj1.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj2.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj3.evil-projects.net /etc/nginx/sites-enabled/
그런 다음 nginx
프로세스를 다시 시작하십시오 .
# If on 14.04, use this:
sudo service nginx restart
# If on 15.04 or newer, use this:
sudo systemctl restart nginx
DNS가 전파되면 사이트가 정상적으로 작동합니다.
X.Y.Z.W/foo
,X.Y.Z.W/bar
) 에 호스팅 하시겠습니까? 왜 도메인을 얻을 수 없습니까? (동일한 IP를 여러 도메인에 할당 할 수 있습니까?)