2012-06-14 21 views
9

Tôi đang cố gắng tạo tệp conf nginx có ít sự lặp lại trong đó. Tôi đang sử dụng nginx để phục vụ các tập tin tĩnh, và nó ủy nhiệm 404s hoặc nội dung php đến vị trí @varnish tên:Cách có nhiều khối vị trí sử dụng cùng một tên @location

location @varnish { 
    proxy_redirect off; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_pass_header Set-Cookie; 
    proxy_pass http://localhost:6081; 
    proxy_set_header Request-URI $request_uri; 
} 

Đối với tình hình "chuẩn" theo đó nginx nên kiểm tra để xem nếu nó có một tập tin và sau đó vượt qua thông qua vào backend, sau hoạt động tốt:

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { 
    access_log  off; 
    add_header  Pragma public; 
    add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
    expires   max; 
    open_file_cache_valid 120m; 
    try_files $uri @varnish; 
} 

Tuy nhiên, đối với PHP, tôi thậm chí không muốn nó thử tập tin, nó sẽ chỉ ngay lập tức chuyển hướng yêu cầu để @varnish:

location ~ \.php$ { 
    rewrite . @varnish last; 
} 

Tuy nhiên, điều này dường như không hoạt động. Có vẻ như một nỗi đau có hai khối gần giống hệt nhau (một cho @backend và một cho php) cả hai tham chiếu cùng một proxy, và là loại vấn đề mà con người có thể quên đặt một cái gì đó trong một và không phải là khác.

Trả lời

12

Nếu bạn đặt cài đặt proxy vào ngữ cảnh của máy chủ và để cho các vị trí kế thừa chúng, thì sẽ không có nhiều trùng lặp. Bạn cũng có thể thiết lập một khối ngược dòng để dễ dàng thay đổi mục tiêu proxy nếu bạn cần:

upstream _varnish { 
    server localhost:6081; 
} 

server { 
    proxy_redirect off; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Request-URI $request_uri; 
    proxy_pass_header Set-Cookie; 

    location @varnish { 
    proxy_pass http://_varnish; 
    } 

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { 
    access_log off; 
    add_header Pragma public; 
    add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
    expires max; 
    open_file_cache_valid 120m; 
    try_files $uri @varnish; 
    } 

    location ~ \.php$ { 
    proxy_pass http://_varnish; 
    } 
} 
+0

Làm việc như một sự quyến rũ! – shrikeh

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