如何配置nginx规则,以便在失败时使用另一个规则来处理请求

时间:2013-09-09 06:05:21

标签: nginx

注意,此问题已从superuser

移至stackoverflow

我得到了以下nginx conf:

server {
    listen 80;
    listen 443 ssl;
    ...

    # specific rule to serve versioned js resources
    location ~ ^/js/([0-9\.]+)/(.*)$ {
      alias /opt/x/public/deploy/js/$1/$2;
    }

    location / {
        add_header P3P 'CP="CAO PSA OUR"';
        proxy_pass http://127.0.0.1:8088;
        set $ssl off;
        if ($scheme = https) {
            set $ssl on;
        }
        proxy_set_header X-Forwarded-Ssl $ssl;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

它按预期工作。但是,如果已部署的目录中不存在某个版本化的js资源,例如/opt/x/public/deployed/js/1.1/,则它将返回404。我想要的是在这种情况下,nginx应将请求传递给在8088端口运行的后端服务,而不是返回404。这甚至可行吗?

谢谢! 绿色

1 个答案:

答案 0 :(得分:1)

http://wiki.nginx.org/HttpCoreModule#try_files

try_files是你的朋友,在这里你可以做你想要尝试文件的顺序,并最终在上游使用proxypass。