2013-05-11 23 views
7

Với cấu hình này:Tại sao tôi không thể đặt proxy_set_header trong mệnh đề if?

server { 
    listen 8080; 
    location/{ 
     if ($http_cookie ~* "mycookie") { 
      proxy_set_header X-Request $request; 
      proxy_pass http://localhost:8081; 
     } 
    } 
} 

Tôi có lỗi này khi tôi tải lại dịch vụ nginx:

Reloading nginx configuration: nginx: [emerg] "proxy_set_header" directive is not allowed here in /etc/nginx/conf.d/check_cookie.conf:5 
nginx: configuration file /etc/nginx/nginx.conf test failed 

Cấu hình này hoạt động OK, nhưng nó không làm những gì tôi muốn:

server { 
    listen 8080; 
    location/{ 
     proxy_set_header X-Request $request; 
     if ($http_cookie ~* "mycookie") { 
      proxy_pass http://localhost:8081; 
     } 
    } 
} 

Tại sao tôi không thể đặt chỉ thị proxy_set_header bên trong mệnh đề if?

Cảm ơn trước!

+0

Vui lòng không đăng chéo. http://serverfault.com/questions/506972/nginx-why-i-cant-put-proxy-set-header-inside-an-if-clause – ceejayoz

+0

Tôi đã mở một cuộc trò chuyện để thảo luận về điều này. Chúng ta có thể tiếp tục thảo luận ở đó. http://chat.stackexchange.com/rooms/8745/nginx – Neuquino

Trả lời

0

Không giống như proxy_pass, bạn không thể đặt proxy_set_header bên trong khối if. Bạn chỉ có thể đặt nó trong khối http/server/location. Vì vậy, cấu hình thứ 2 của bạn là tốt.

tham khảo: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header

bối cảnh: http, máy chủ, vị trí

Không biết những gì yêu cầu biến $ là. Nó không xuất hiện trong danh sách biến nginx: http://wiki.nginx.org/HttpCoreModule#Variables. Bạn đang cố gắng đạt được điều gì ở đây?

+0

Những gì tôi đang cố gắng làm là: "nếu cookie 'mycookie' được xác định, sau đó đặt URL gốc vào tiêu đề và gửi yêu cầu đến máy chủ khác" – Neuquino

+0

Sau đó, sử dụng $ request_uri thay vì $ request –

+1

Ok, nhưng điều đó không giải quyết được vấn đề. Bạn có biết cách nào để thêm tiêu đề đó không? Tôi cũng đã thử chỉ thị add_header không thành công http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header – Neuquino

0

Bên trong vị trí thử một cái gì đó giống như

// giá trị tiêu đề mặc định này trong một biến

bộ $ ESB mới "$ REMOTE_ADDR, $ host";

// nếu tiêu đề tùy chỉnh của tôi tồn tại

if ($ http_my_header) {

bộ $ ESB "$ http_my_header, $ REMOTE_ADDR, $ host";

}

proxy_set_header my-header $ esb;

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