2015-08-19 22 views
8

là hai khối máy chủ nginx sau đây theo ngữ nghĩa giống nhau, hoặc có sự khác biệt nào không? Cấu hình dành riêng cho JSON trong ví dụ đầu tiên có kế thừa cài đặt của vị trí "/" không? Liệu nó trong ví dụ thứ hai?Chỉ thị thừa kế trong khối vị trí lồng nhau

server { 
    location/{ 
    # ... 
    location ~* \.json$ { 
      # json-specific settings 
    } 
    } 
} 

server { 
    location/{ 
    # ... 
    } 
    location ~* \.json$ { 
    # json-specific settings 
    } 
} 

Trả lời

11

Thừa kế chỉ thị cấu hình trong Nginx là chỉ thị chỉ có thể được thừa kế từ ngữ cảnh cao hơn cây cấu hình và không bao giờ từ ngữ cảnh trên cùng cấp hoặc thấp hơn.

Vì vậy, khối vị trí không thể kế thừa từ một khối vị trí khác nhưng khối vị trí lồng nhau có thể được kế thừa từ khối vị trí chính.

Tôi nhấn mạnh có thể vì có một số loại chỉ thị khác nhau và hành vi kế thừa có một chút khác biệt đối với mỗi loại.

  1. Có chỉ thị loại tiêu chuẩn chỉ có một giá trị hoặc đặt giá trị được đính kèm. Chúng sẽ được thừa hưởng một cách đơn giản bởi các bối cảnh thấp hơn xuống cây cấu hình hoặc được thay thế trong bối cảnh thấp hơn đó bằng các giá trị mới. Một ví dụ là "chỉ mục".

  2. Loại mảng Chỉ thị chuyển nhiều giá trị riêng biệt trong một mảng . Những điều này sẽ đơn giản được kế thừa bởi các bối cảnh thấp hơn cây cấu hình hoặc được thay thế trong bối cảnh thấp hơn đó bằng các giá trị mới. Lưu ý rằng bạn không thể thêm vào mảng. Thay đổi một phần đang thay thế nó tất cả. Ví dụ là "proxy_param". Vì vậy, nếu bạn định nghĩa proxy_param A và proxy_param B ở cấp máy chủ chẳng hạn, sau đó thử xác định proxy_param C trong ngữ cảnh vị trí, "A" và "B" sẽ bị xóa (đặt thành giá trị mặc định). như định nghĩa "C" có nghĩa là thay thế mảng.

  3. Chỉ thị loại lệnh như "try_files" nói chung không phải là được kế thừa.

Vì vậy, cụ thể cho câu hỏi của bạn, chỉ thị được xác định trong một bối cảnh khối vị trí không thể được kế thừa khác như trong ví dụ thứ hai của bạn.

Chỉ thị loại tiêu chuẩn và loại được xác định trong khối vị trí chính sẽ được kế thừa bởi khối vị trí lồng nhau. Chỉ thị loại lệnh được xác định trong phụ huynh sẽ không được kế thừa nói chung.

+17

'proxy_pass' cũng [không được kế thừa bởi một vị trí lồng nhau] (https://forum.nginx.org/read.php?2,243488,243488). – saaj

+0

'uwsgi_pass' cũng không được kế thừa. – Rockallite

+2

Có bất kỳ bảng tham chiếu damned nào có thể tham khảo để biết chỉ thị nào là hoặc không được kế thừa? Những gì một nỗi đau phải đến SO sau đó bấm vào một liên kết trong một bình luận, chỉ vào một diễn đàn, đọc những người hiểu biết rằng "proxy_pass không được kế thừa" –

Các vấn đề liên quan