Các vhost ký tự đại diện trên Nginx


25

Tôi vừa cài đặt Nginx trên máy chủ của mình và vô cùng hài lòng với kết quả, tuy nhiên tôi vẫn không thể tìm ra cách chèn máy chủ ảo ký tự đại diện.

Đây là cấu trúc [thư mục] tôi muốn:

-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)

Tuy nhiên, như bạn có thể thấy nó khá cơ bản, tôi muốn có khả năng thêm tên miền bằng cách thêm một bản ghi A cho một tên miền phụ mới, nó sẽ ngay lập tức trỏ đến thư mục con cùng tên dưới public_html.

Có nhiều thứ trên web, tuy nhiên tôi không bắt gặp thứ gì đó chính xác như thế này.

Mọi sự trợ giúp sẽ rất được trân trọng.


Tôi không chắc ý của bạn là "thư mục con cùng tên" khi ví dụ của bạn có hai tên khác nhau: subdomain 1/ x.example.com- bạn có thể làm rõ không?
nickgrim

Đúng, không rõ lắm xin lỗi. Hãy nói rằng tôi có tên miền phụ x.example.com, thư mục của nó sẽ là / public_html / x, tuy nhiên tôi cần cả example.com và www.example.com để trỏ đến / public_html /
rorygilchrist 21/03

Câu trả lời:


39

Tôi sẽ chỉ cho bạn.

Các tập tin cấu hình

server {
  server_name example.com www.example.com;
  root www/pub;
}

server {
  server_name ~^(.*)\.example\.com$ ;
  root www/pub/$1;
}

Kiểm tra hồ sơ

Chúng tôi có hai tệp thử nghiệm:

$ cat www/pub/index.html 
COMMON

$ cat www/pub/t/index.html 
T

Kiểm tra

Tên máy chủ tĩnh:

$ curl -i -H 'Host: example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:42 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

$ curl -i -H 'Host: www.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:48 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

Và tên máy chủ regrec:

$ curl -i -H 'Host: t.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:54 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Wed, 23 Mar 2011 07:56:40 GMT
Connection: keep-alive
Accept-Ranges: bytes

T

Không làm việc không may. Tất cả các tên miền phụ chỉ trỏ đến public_html. Đây là cấu hình máy chủ thứ hai:server{ listen 80; server_name ~^(.*)\.example\.com$ ; location / { root /var/www/public_html/$1; index index.html index.htm index.php; } location ~ \.php$ { root $1; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/public_html/$1$fastcgi_script_name; include fastcgi_params; } }
rorygilchrist

4
"không làm việc không may" không có chi tiết đáng tiếc. Luôn luôn nhìn vào nginx error.log để biết chi tiết. Tôi đã cập nhật câu trả lời của mình để cho bạn thấy cách cấu hình này hoạt động. Bạn có thể thấy phiên bản Nginx của tôi là 0,8,54
Alexander Azarov

Làm việc hoàn hảo cho tôi ngay bây giờ.
Claire Furney

5

Tệp cấu hình Nginx dưới đây cho phép các tên máy chủ ký tự đại diện tự động định tuyến đến thư mục tương ứng trong /var/www/vhost/khi cũng tự động tạo các tệp nhật ký tương ứng.

http://test1.wildcard.com/var/www/vhost/test1
                                                   /var/log/nginx/test1.wildcard.com-access.log                                                    /var/log/nginx/test1.wildcard.com-error.log

http://test2.wildcard.com/var/www/vhost/test2
                                                   /var/log/nginx/test2.wildcard.com-access.log                                                    /var/log/nginx/test2.wildcard.com-error.log

ký tự đại diện

server {
  listen 80;
  listen [::]:80;

  #  Match everything except dot and store in $subdomain variable
  #  Matches test1.wildcard.com, test1-demo.wildcard.com
  #  Ignores sub2.test1.wildcard.com
  server_name ~^(?<subdomain>[^.]+).wildcard.com;

  root /var/www/vhost/$subdomain;

  access_log /var/log/nginx/$host-access.log;
  error_log  /var/log/nginx/$host-error.log;
}

Hãy giải thích giải pháp của bạn.
Andrew Schulman

Điều này dường như gần giống với một câu trả lời hiện có. Điều này thêm gì?
Michael Hampton

1
Cung cấp một chút cụ thể hơn. Hy vọng nó sẽ giúp tất cả mọi người.
AnthumChris

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.