Nginx 有条件地重写 uri

标签 nginx nginx-location nginx-reverse-proxy

我使用 nginx 作为多个 Rails 应用程序的反向代理(使用 Nixy)。如果缺少,我需要重写一些请求以在 url 前面注入(inject)一个字符串。

例如: 如果我有 http://proxy_ip/app_name/some/root 我不想修改任何东西,但是如果我有 http://proxy_ip/some/root我想在 http://proxy_ip/app_name/some/root

中转换

我试过 rewrite ^/app_name/$uri; 但它不起作用,我不知道如何有条件地进行重写。

最佳答案

您可以使用映射来检测缺少的应用名称,然后返回 301 以及缺少的应用名称。

map $uri $prepend_app_name {
    ~^/some/root(/.*)?$ app_name;
}

server {
    if ($prepend_app_name) {
        return 301 /$prepend_app_name$uri;
    }
    # ...
}

关于Nginx 有条件地重写 uri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46729785/

相关文章:

angular - Nginx 反向代理 + Nginx 服务的 Angular

node.js - NGINX 服务器上的 POST 响应正文为空

regex - 如何匹配斜杠后的所有内容以用作 nginx 重写?

nginx Content-Security-Policy Header 仍然阻塞 bootstrapcdn

php - 无法通过 HTTPS 访问 SOAP Web 服务

nginx - docker + Nginx : Getting proxy_pass to work

php - nginx 从 https 排除路径

docker - "If you' 重新看到此 Grafana 未能加载其应用程序文件”反向代理后面的 Docker Grafana 部署错误

docker - 在 jwilder/nginx-proxy Docker 容器中重写 URL

Ubuntu 12.04.3 x32 的 nginx VPS 上的 phpmyadmin 错误