gpt4 book ai didi

nginx - 如何配置 Nginx 在 404ing 之前尝试两个上游?

转载 作者:行者123 更新时间:2023-12-02 18:18:59 26 4
gpt4 key购买 nike

给定 Nginx 配置大致如下:

upstream A {
server aa:8080;
}

upstream B {
server bb:8080;
}

server {
listen 80;

location @backendA {
proxy_pass http://A/;
}

location @backendB {
proxy_pass http://B/;
}

location / {
# This doesn't work. :)
try_files @backendA @backendB =404;
}
}

基本上,我希望 Nginx 尝试上游 A,如果 A 返回 404,则尝试上游 B,如果失败,则向客户端返回 404。 try_files 对文件系统位置执行此操作,然后可以回退到指定位置,但它不适用于多个指定位置。有什么东西可以发挥作用吗?

背景:我有一个 Django Web 应用程序(上游 A)和一个 Apache/Wordpress 实例(上游 B),我希望将它们共存于同一个 URL 命名空间中,以获得更简单的 Wordpress URL:mysite.com/hello-world/ 而不是 mysite.com/blog/hello-world/

可以在Nginx位置复制我的Django URL并使用wordpress作为包罗万象:

location /something-django-handles/ {
proxy_pass http://A/;
}

location /something-else-django-handles/ {
proxy_pass http://A/;
}

location / {
proxy_pass http://B/;
}

但这违反了 DRY 原则,所以我想尽可能避免它。 :) 有解决办法吗?

最佳答案

经过进一步谷歌搜索,我发现了 this solution :

location / {
# Send 404s to B
error_page 404 = @backendB;
proxy_intercept_errors on;
log_not_found off;

# Try the proxy like normal
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://A;
}

location @backendB {
# If A didn't work, let's try B.
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://B;

# Any 404s here are handled normally.
}

关于nginx - 如何配置 Nginx 在 404ing 之前尝试两个上游?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28332001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com