2013-03-29 14 views
9

Hãy nói rằng tôi có một cấu hình nginx thiết lập cho một tên miền như thế này:báo cáo cấu hình tái sử dụng cho các tên miền trong nginx.conf

server { 

    root /path/to/one; 
    server_name one.example.org; 

    location ~ \.php$ { 
    try_files  $uri =404; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include   fastcgi_params; 
    } 

} 

Bây giờ, nếu tôi muốn thêm tên miền khác với nội dung khác nhau, là có một cách tôi có thể sử dụng lại các câu lệnh tương đương từ miền trước đó hoặc tôi có phải sao chép mọi thứ cho mỗi miền mới mà tôi muốn hỗ trợ không?

server { 

    root /path/to/two; # different 
    server_name two.example.org; # different 

    location ~ \.php$ { 
    try_files  $uri =404; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include   fastcgi_params; 
    } 

} 

tôi đã cố gắng di chuyển chỉ thị location ngoài server đóng cửa, nhưng rõ ràng mọi thứ không làm việc như thế vì tôi đã nhận ra lỗi "vị trí chỉ thị không được phép ở đây" khi khởi động lại nginx.

Trả lời

8

bạn có thể làm:

server_name one.example.org two.example.org; 

nếu cả hai đều exacctly giống hệt nhau ngoại trừ domainname

nếu bạn có locationblocks chỉ tương tự bạn có thể di chuyển những địa điểm vào một tập tin sepperate và sau đó làm một

include /etc/nginx/your-filename; 

để dễ dàng sử dụng trong mỗi máy chủ

16

Đây là một ví dụ tốt để sử dụng mô-đun bản đồ nginx. http://wiki.nginx.org/HttpMapModule

Sau đây là những gì tôi đã thử. Nó hoạt động trong devbox của tôi. Lưu ý

  1. Chỉ thị bản đồ chỉ có thể được đặt trong khối http.
  2. hiệu suất phạt tuyên bố một chỉ thị bản đồ là không đáng kể (xem ở trên liên kết)
  3. bạn có thể có tự do để có thư mục khác thư mục gốc, hoặc số cổng vv

    map $subdomain $root_folder { 
        one /path/to/one; 
        two /path/to/two; 
    } 
    
    map $subdomain $port_number { 
        one 9000; 
        two 9100; 
    } 
    
    server { 
        listen 80; 
        server_name ~^(?P<subdomain>.+?)\.mydomain\.com$; 
        root $root_folder; 
    
        location ~ \.php$ { 
        try_files  $uri =404; 
        fastcgi_pass 127.0.0.1:$port_number; 
        fastcgi_index index.php; 
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        include   fastcgi_params; 
        } 
    } 
    
Các vấn đề liên quan