没有基本 URL 的 nginx 反向代理

没有基本 URL 的 nginx 反向代理

我有一个无法配置基本 URL 的应用程序。假设它的 URL 是192.168.1.100:8011

我想配置 nginx,以便我可以输入类似的 url192.168.1.100/myapp然后它转到其他应用程序。

我习惯的配置只有在我有一个基本 URL 时才有效。例如,如果我有一个应用程序192.168.1.100:8011/myapp并且我想使用 nginx 来使用192.168.1.100/myapp,那我没有问题,但其他方式我无法做到。

那可能吗 ?

答案1

您可以使用重写规则:

location /myapp/ {
    rewrite /myapp(.*) /$1 break;
    proxy_pass http://192.168.1.100:8011
}

这会将类似的 URL 发送/myapp/main/到后端/main/

答案2

您可能需要的是:

location /myapp/ {
  proxy_pass http://192.168.1.100:8011/;
}

注意 location 和 proxy_pass 指令尾部的斜杠。

如果使用 URI 指定了 proxy_pass 指令,则在将请求传递到服务器时,与位置匹配的规范化请求 URI 的部分将被指令中指定的 URI 替换

https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

在这种情况下/myapp/被替换为/

答案3

这是我所做的重定向http://example.com/apphttp://192.168.1.24:8080/(example.com/app 是 WAN 地址,192.168.1.24:8080 是 LAN 地址)

location /app/ {
    proxy_pass http://192.168.1.24:8080/;
    proxy_redirect http://192.168.1.24:8080/ http://example.com/app/;


    proxy_set_header Host $host;
    proxy_set_header Referer $http_referer;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
}

答案4

/myapp被(浏览器)夺走可以吗?

这很简单:

location /myapp  { return 303 http://192.168.1.100:8011; }
location /myapp/ { return 303 http://192.168.1.100:8011; }

您想保留更深入的请求吗/myapp/blah.txt

location ~ ^/myapp(?<myslash>/|$)(?<mypath>.*)$
{
    set $myargs $args;  # workaround allowing spaces
    return 303 http://192.168.1.100:8011$myslash$mypath$is_args$myargs;
}

未经测试。

相关内容