Có hai cách để đạt được điều này. Bạn có thể làm mọi thứ theo địa chỉ IP, với các vị trí thư mục con hoặc bạn sẽ cần mua một tên miền và sau đó có nhiều tên miền phụ trên tên miền đó (tên miền phụ không nên tốn bất kỳ chi phí nào, nếu bạn mua tên miền, nhưng hãy kiểm tra với nhà đăng ký của bạn).
Tôi không khuyên phương thức địa chỉ IP nếu chỉ vì nhớ địa chỉ IP rất tệ và nếu bạn cố gắng chia sẻ thông tin cho người khác, bạn cũng gặp vấn đề tương tự người khác phải nhớ địa chỉ IP.
Cách tiếp cận một IP, nhiều thư mục con, không có tên miền
ĐỂ Ý! Chúng tôi không có bất kỳ thông tin nào về các dự án của bạn mà bạn đang thực hiện. Chúng tôi cần biết thêm để xác định xem bạn có thể thực hiện phương pháp này hay không, vì nhiều khung web sẽ không hoạt động nếu không có tên miền thực được gắn với nó.
CẢNH BÁO : Trong quá trình thử nghiệm liên tục các ví dụ này, người ta đã phát hiện ra rằng phương pháp "Một tên miền, nhiều thư mục con" không lấy dữ liệu ủy quyền ngược cho phụ trợ, vì URI được yêu cầu sẽ bao gồm các thư mục con trong URI; điều này có thể làm cho các máy chủ phụ trợ có vấn đề hành xử đúng.
Về nginx
phía chúng ta, chúng ta cần thực hiện một cách tiếp cận 'ác' đối với điều này - một địa chỉ IP, nhiều địa điểm thư mục và thư mục con. Đây là một cách tiếp cận rất xấu xa và có thể gây ra nhiều vấn đề với một số khung web.
Giả sử nginx
cài đặt mặc định làm cơ sở từ kho lưu trữ, thì chúng ta phải tạo cấu hình trang để xử lý từng yêu cầu thư mục con dự án. Sau đó, chúng ta phải liên kết nó ở đúng vị trí.
Tạo /etc/nginx/sites-available/my-projects
bằng cách sau (sử dụng làm mẫu / hướng dẫn - nó giả định ba dự án với HTML tĩnh và không có ứng dụng web động trong PHP hoặc python hoặc tương tự, và bạn có thể sao chép các khối vị trí riêng lẻ và tạo vị trí mới phù hợp; IP máy chủ là 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
}
}
Bây giờ chúng tôi thay thế cấu hình mặc định (loại bỏ nó) và thêm chúng tôi:
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled
Và sau đó khởi động lại nginx
dịch vụ:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.10 or newer, use this:
sudo systemctl restart nginx
Cách tiếp cận một tên miền, nhiều tên miền phụ.
Phần câu trả lời này giả sử bạn có một tên miền và nhiều tên miền phụ trong đó. Nếu bạn không có điều này, xin vui lòng làm rõ điều này trong câu hỏi của bạn
Với mỗi nginx
server {}
khối trong cấu hình, bạn sẽ cần xác định tên máy chủ và có thể đặt khối máy chủ thứ tư là 'bắt tất cả' cho các yêu cầu khác.
Ví dụ: Tôi có ba dự án, proj1
, proj2
, proj3
. Tôi có một tên miền được gọi evil-projects.net
(LƯU Ý: Không thực sự tồn tại). Tôi muốn ba tên miền phụ khác nhau, một tên miền cho mỗi nginx
cấu hình sẽ trỏ đến một dự án mỗi tên miền . Máy chủ của tôi cư trú tại 1.2.3.4 và nó sẽ phục vụ tất cả các trang web.
Với kịch bản trên, chúng tôi có hai phần: tên miền và tên miền phụ và cấu hình máy chủ.
(1): Cấu hình DNS
Thiết lập DNS của bạn tại máy chủ của bạn sao cho đúng như sau với các bản ghi 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
(2): Cấu hình NGINX tại máy chủ (1.2.3.4)
Bây giờ cho nginx
cấu hình của bạn . Tôi giả sử rằng bạn sẽ có các thiết lập nginx mặc định và các gói từ Kho lưu trữ (Tôi sẽ sử dụng 14.04 làm ví dụ cơ bản). Đầu tiên chúng ta sẽ có bốn tệp cấu hình /etc/nginx/sites-available
. Bạn có thể cần sử dụng sudo
khi tạo các tệp này, vì thư mục trong câu hỏi được sở hữu bởi root
.
/etc/nginx/sites-available/catch-all
- đây sẽ là 'bắt tất cả' cho bất kỳ miền không có giá trị nào. Tôi thích trả lại mã lỗi http 410 (Gone).
server {
listen 80 default_server;
server_name _;
return 410;
}
Tiếp theo, chúng tôi thiết lập cấu hình cho các trang web / dự án của bạn. Mặc dù vậy, tôi sẽ cho rằng chúng là tất cả các tệp tĩnh. Mỗi trong số này ngụ ý rằng bạn cũng có các thư mục web khác nhau cho từng dự án trên máy chủ (các 'tài liệu gốc' khác nhau).
/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;
}
}
Sau đó, chúng tôi phải xóa cấu hình 'mặc định' khỏi /etc/nginx/sites-enabled
và thêm cấu hình của chúng tôi. Một lần nữa, sudo
là cần thiết ở đây.
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/
Và sau đó chúng tôi khởi động lại nginx
quá trình:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.04 or newer, use this:
sudo systemctl restart nginx
Khi DNS lan truyền, các trang web sẽ hoạt động như bình thường.
X.Y.Z.W/foo
,X.Y.Z.W/bar
)? Tại sao bạn không thể có được tên miền cho họ? (Bạn có thể gán cùng một IP cho nhiều tên miền)?