nginx: Tại sao tôi không thể đặt proxy_set_header trong mệnh đề if?


9

Với cấu hình này:

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

Tôi gặp lỗi này khi 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 tốt, 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 lệnh proxy_set_header bên trong mệnh đề if?



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 cuộc thảo luận ở đó: chat.stackexchange.com/rooms/8745/nginx
Neuquino

Câu trả lời:


10

Giả sử bạn thực sự muốn hỏi, 'làm thế nào tôi có thể làm việc này', làm thế nào về việc viết lại để tiêu đề luôn được thông qua, nhưng nó có được đặt thành một giá trị bị bỏ qua nếu bạn không muốn đặt nó.

server {
    listen 8080;    
    location / {
        set $xheader "someignoredvalue";

        if ($http_cookie ~* "mycookie") {
            set $xheader $request;
        }

        proxy_set_header X-Request $xheader;

        if ($http_cookie ~* "mycookie") {
            proxy_pass http://localhost:8081;
        }
    }

Ý bạn là ""đúng không?
Michael Hampton

2
Cá nhân tôi thích đặt mọi thứ rõ ràng không phải là một giá trị thực, hơn là có khả năng quên rằng bản hack này đã được sử dụng, và sau đó tự hỏi tại sao tiêu đề lại trống rỗng. Nếu nó được đặt thành "X-Header-not-set-by-nginx" thì bạn sẽ không bao giờ bị nhầm lẫn.
Danack

Theo bài viết này: nginx.com/resource/wiki/start/topics/depth/ifisevil . Những điều an toàn 100% duy nhất có thể được thực hiện bên trong nếu trong bối cảnh vị trí được trả lại và viết lại. Tôi nghi ngờ proxy_pass trong nếu khối sẽ luôn hoạt động.
Châu Chee Yang

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.