Điểm:1

Ngăn quy tắc regex Nginx ghi đè quy tắc khác

lá cờ hm

Tôi có một máy chủ Nginx hoạt động như một proxy ngược cho một vài dịch vụ, cấu hình tương tự như cái này

vị trí /phụ trợ/dịch vụ1 {
        proxy_pass http://pathto/service1;
}

địa điểm / {
        thư mục gốc /a/
}

vị trí ~* (\.js|\.css)$
        hết hạn 8d;

        gốc/nhà/tệp/abc/bcd;
}

Vấn đề của tôi ở đây là gần đây, dịch vụ1 từ chương trình phụ trợ phải phục vụ một vài tệp tĩnh như /backend/service1/something/file1.js hoặc /backend/service1/something/style.css và vị trí thứ hai, vì đó là quy tắc vị trí biểu thức chính quy, sẽ ghi đè vị trí đầu tiên

Tất cả các tệp tĩnh do backend/service1 cung cấp đều có một tiền tố nhất định (thứ gì đó), vì vậy tôi đã cố gắng cải thiện biểu thức chính quy từ vị trí thứ hai để có giao diện nhìn trước/nhìn sau tiêu cực, nhưng có vẻ như nó không hoạt động, có thể do mẫu chính phải có độ dài cố định (đây là điều tôi đã thử mà không gặp may)

vị trí /phụ trợ/dịch vụ1 {
        proxy_pass http://pathto/service1;
}

địa điểm / {
        thư mục gốc /a/
}

vị trí ~* (?<!something)(.*)(\.js|\.css)$
        hết hạn 8d;

        gốc/nhà/tệp/abc/bcd;
}

Làm thế nào tôi có thể đạt được điều này?

lá cờ jp
https://nginx.org/en/docs/http/ngx_http_core_module.html#location
RabidTunes avatar
lá cờ hm
Tôi đã kiểm tra tài liệu, nhưng sau khi kiểm tra lần thứ ba, tôi đã tìm ra giải pháp, hãy xem câu trả lời của tôi bên dưới, vì vậy tôi đoán vậy, cảm ơn
Điểm:3
lá cờ jp

Nếu "cái gì đó" ngay lập tức theo sau /phụ trợ/dịch vụ1, bạn có thể thêm cái khác cụ thể hơn địa điểm được ưu tiên hơn các vị trí regex:

vị trí /phụ trợ/dịch vụ1 {
    proxy_pass http://pathto/service1;
}  
vị trí ^~ /backend/service1/something/ {
    proxy_pass http://pathto/service1/something/;
}  
vị trí ~* \.(js|css)$ { ... }

Nếu "thứ gì đó" được nhúng ở bất kỳ đâu trong URL, bạn sẽ cần sử dụng cụm từ thông dụng, có thể bằng khét tiếng cái nhìn tiêu cực. Bằng cách thử và sai, tôi đã tìm thấy một biểu thức hoạt động:

vị trí ~* ^(?!.*something).*\.(js|css)$ { ... }
Điểm:0
lá cờ hm

Tôi đã chấp nhận câu trả lời khác, nhưng điều gì đó cũng phù hợp với trường hợp của tôi là lồng vào vị trí có biểu thức chính quy. Một cái gì đó như thế này

vị trí /phụ trợ/dịch vụ1 {
        proxy_pass http://pathto/service1;
}

địa điểm / {
        địa điểm / {
            thư mục gốc /a/
        }

        vị trí ~* (\.js|\.css)$
            hết hạn 8d;

            gốc/nhà/tệp/abc/bcd;
        }
}

Bằng cách này, nếu URI đích có tiền tố là /backend/service1, vị trí đầu tiên sẽ kích hoạt, đối với bất kỳ vị trí nào khác, vị trí / sẽ kích hoạt và sau đó biểu thức chính quy có thể có hiệu lực

Richard Smith avatar
lá cờ jp
Giải pháp này không trả lời câu hỏi của bạn. Và cũng giống như sử dụng `location ^~ /backend/service1`
RabidTunes avatar
lá cờ hm
Tại sao bạn nói rằng nó không trả lời câu hỏi của tôi? Tôi đã khắc phục sự cố của mình khi làm điều này, nó có sai không? Sẽ cho tôi các vấn đề trong tương lai?
RabidTunes avatar
lá cờ hm
Tôi sẽ thử giải pháp của bạn sau vì nó đơn giản hơn và nếu nó hoạt động, tôi sẽ chấp nhận câu trả lời của bạn có lợi cho tôi, nhưng tôi thực sự đã khắc phục vấn đề của mình bằng cách tiếp cận của mình, vì vậy tôi không hiểu nhận xét của bạn
Richard Smith avatar
lá cờ jp
Tôi không nói rằng nó không giải quyết được vấn đề của bạn và thật tốt khi bạn đã tìm ra giải pháp phù hợp với mình. Nhưng câu hỏi bạn đã đăng lên SF đã hỏi cụ thể về một tiền tố "cái gì đó" nhất định và câu trả lời này không giải quyết được vấn đề đó.
RabidTunes avatar
lá cờ hm
Giải pháp của bạn hoạt động và đơn giản hơn nên tôi đã chấp nhận giải pháp đó và tôi đã chỉnh sửa giải pháp này, cảm ơn!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.