nginx đặt biến ở vị trí


37

Tôi đang cố gắng tối ưu hóa cấu hình nginx của mình, vì vậy có thể đặt một biến và tất cả các đường dẫn vị trí sẽ tự động cập nhật. Tôi có bốn dòng trong câu hỏi:

server_name php.domain.com;
root /srv/web/vhosts/php/web;
error_log /srv/web/vhosts/php/logs/error.log;
access_log /srv/web/vhosts/php/logs/access.log;

Những gì tôi muốn đạt được là đặt một biến (trong trường hợp này là 'php') và đưa nó vào cấu hình.

set $variable "php";
server_name $variable.domain.com;
root /srv/web/vhosts/$variable/web;
error_log /srv/web/vhosts/$variable/logs/error.log;
access_log /srv/web/vhosts/$variable/logs/access.log;

Tuy nhiên, đường nối mà nginx bỏ qua các biến trong cấu hình này. Tôi đang làm gì đó sai hay không thể sử dụng biến trong đường dẫn vị trí?

Câu trả lời:


58

Các biến không thể được khai báo ở bất cứ đâu cũng như không được sử dụng trong bất kỳ lệnh nào.

Như tài liệu của setchỉ thị là:

Syntax:   set $variable value;
Default:  —
Context:  server, location, if

Hậu quả ngay lập tức là bạn không thể sử dụng các biến tùy chỉnh trong một httpkhối.

Cập nhật : sau một cuộc thảo luận và thử nghiệm với AlexeyTen trong phòng chat này .

  • access_logcó thể chứa các biến với các hạn chế. Trong số đó, việc thiếu bộ đệm và thực tế là dấu gạch chéo hàng đầu không được khai báo trong một biến .
  • error_log sẽ không làm việc với các biến ở tất cả.
  • root Chỉ thị có thể chứa các biến.
  • server_namechỉ thị cho phép $hostnamegiá trị nghiêm ngặt như một ký hiệu giống như biến.

1
access_log/ error_loglàm việc với các biến, nhưng với một số hạn chế. server_namekhông thể chứa các biến.
Alexey Ten

@AlexeyTen Đọc lại câu trả lời của tôi. Nó không hoạt động với các biến tùy chỉnh . Tên máy chủ có thể chứa được xây dựng trong biến như $hostname. Cập nhật câu trả lời để làm rõ hành vi đó.
Xavier Lucas

5
Vâng, $hostnamelà biến duy nhất được phép. github.com/nginx/nginx/blob/ Mạnh Trên thực tế, nó giống như một hằng số ma thuật, không phải là một biến thực
Alexey Ten


3
Đây là có lẽ các nghiên cứu tốt nhất SF câu trả lời bao giờ hết. Cảm ơn cả hai bạn / Cc @AlexeyTen
kaiser
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.