Làm thế nào để câu lệnh if / other với nginx conf?


9

Có thể làm một cái gì đó như thế này với nginx?

if ( $http_user_agent = "wget" ){
   server {
      listen      11.11.11.11:1111;
      root        /website1/;
      server_name example.com www.example.com;
else 

   server {
      listen      22.22.22.22:22222;
      root        /website2/;
      server_name example2.com www.example2.com;
}

Bạn có thể muốn xem mô-đun bản đồ .
gf_

2
Bạn đã viết một cái gì đó kỳ lạ và khá vô nghĩa. Hãy thử bắt đầu lại từ đầu, bạn muốn giải quyết vấn đề gì
Alexey Ten

Câu trả lời:


9

Mô-đun viết lại Nginx có ifchỉ thị (xem tài liệu được liên kết để biết ví dụ), nhưng không else. Tương đương với elsesẽ là tất cả những gì không được sửa đổi với mộtif .

Bạn có thể sử dụng ifbên trong server { }nhưng không phải là cách khác. Bạn thậm chí sẽ không có điều kiện so sánh nếu trước một yêu cầu đã cần máy chủ. Ở đó, bạn chỉ có thể phục vụ nội dung khi tác nhân người dùng (hoặc không) wget.

Cũng lưu ý rằng bạn không nên sử dụng ifbên trong locationvì nó có thể không hoạt động như mong muốn (xem If Is Evil ).


3

Trong biểu mẫu đã cho, nó sẽ không hoạt động: kiểm tra tác nhân người dùng HTTP ngụ ý rằng yêu cầu đã được nhận. Điều đó chỉ có thể nếu một số serverkhối đã được xác định. Bạn có thực sự muốn bắt đầu các máy chủ mới tùy thuộc vào chuỗi Tác nhân người dùng của yêu cầu bạn nhận được ở một nơi khác không?

Nếu bạn chỉ muốn phân phát nội dung khác nhau, hãy chuyển hướng đến các đường dẫn khác nhau, v.v. tùy thuộc vào các phần của yêu cầu như Tác nhân người dùng, điều đó là có thể, ví dụ như với http://nginx.org/en/docs/http/ngx_http_rewrite_module. html

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.