我有一个无法配置基本 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/app到http://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;
}
未经测试。