nginx - 使用 nginx 重定向具有固定路径的应用程序
问题描述
我的服务器位于我们大学的反向代理后面。我得到了域 myuniverse.org/mysubdomain/。
不幸的是,我要使用的应用程序总是更改路径:myuniverse.org/mysubdomain/ 自动变为 myuniverse.org/myappname/ 并且该域不可访问。如果我从大学网络通过 IP 访问我的服务器,一切都很好,因为 myIP/myappname 有效。
有没有办法用 nginx 重定向这种行为?
server {
listen 80;
server_name myServerName;
location / {
proxy_pass http://10.11.0.3:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
解决方案
您正试图让您的应用程序认为它在一条实际上并非如此的路径上。这可以通过重写目标来完成proxy_pass
:
location ~ ^/mysubdomain(/.*)?$ {
proxy_pass http://10.11.0.3:8080/myappname$1$is_args$args;
# this example does not include proxy_set_header for simplicity but you may need it
}
但是,在大多数情况下,我不建议您这样做。以上将帮助您获得对初始请求的响应,但由于您的应用程序会认为它位于不同的路径上,因此如果其中包含链接,则后续请求(对静态文件或子页面)可能会被破坏/myappname
。NGINX 可以在代理响应中重写 URL,但它是另一个有其缺点的 hack。
您真正需要的是将应用程序的基本 URI 从 更改/myappname
为/mysubdomain
. 这将使它在不涉及黑客的情况下工作。
推荐阅读
- python - python代码在函数外工作,但不在函数内工作
- python - 如何在等号之前修复分号处的语法错误
- apache-kafka - 如何复制或配置kafka connect插件文件?
- python - 在 Python 中使用 Selenium 输入货币格式文本
- javascript - 如何在es6中过滤嵌套对象并返回父对象
- django - 无法登录管理员:自定义用户模型
- android - 为什么当应用程序后台运行时 handler.postDelayed 停止运行但 rxjava2 的 Observable.interval 没有?
- python-3.x - 双 lambda - 内部函数 - *args **kwargs 太复杂
- kentico - 通过 kentico api 删除 webpart 区域
- angular - Netlify “未找到 ng 命令”