- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试解决这个问题,但不幸的是我无法弄明白。
我在尝试什么?
我正在尝试将一个位置重定向到 Jersey 2 (JAX-RS 2) Web 应用程序,它可以像往常一样与请求交互,但不同的是,其中包含 url 的其他部分。Jersey 2 的 Java 应用程序在 tomcat docker 镜像上运行。
让我尝试这样更好地解释它:
这就是我所有请求的工作方式:
[IP-address]:8888/myJersey2App/something/function
最近我还添加了 SSL,以便我的服务器与 https 交互。
假设我网站的 url 是:
所以请求现在应该是这样的:
https://my.example.com/myJersey2App/something/function
Nginx 配置:
events{
}
http{
server{
listen 80;
listen [::]:80;
server_name my.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name my.example.com;
###
# ssl configuration ...
###
location / {
proxy_pass http://localhost:8888;
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_set_header X-Forwarded-Proto $scheme;
}
}
}
这行得通,因为 Jersey 2 仍然获取 /myJersey2App/something/function
与代码中的路径相同。
Web.xml配置:
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/myJersey2App/*</url-pattern>
</servlet-mapping>
这是 Jersey 2 如何与请求交互的示例:
@Path("something")
public class JavaClass {
@GET
@Path("/function")
@Produces(MediaType.TEXT_PLAIN)
public Response myFunction() {
return Response.ok().entity("MyFunction!").build();
}
我想要什么?
现在,我必须启动多个 docker,使用相同的应用程序,但使用不同的端口和 url。
这就是请求的方式:
在端口 7777 上运行:
https://my.example.com/docker1/myJersey2App/something/function
在端口 8888 上运行:
https://my.example.com/docker2/myJersey2App/something/function
在端口 9999 上运行:
https://my.example.com/docker3/myJersey2App/something/function
其实是一样的,不同的是dockerX在URL中。
我认为 Nginx 配置应该是这样的:
...
server {
listen 443 ssl http2;
server_name my.example.com;
###
# ssl configuration ...
###
location /docker1 {
proxy_pass http://localhost:7777;
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_set_header X-Forwarded-Proto $scheme;
}
location /docker2 {
proxy_pass http://localhost:8888;
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_set_header X-Forwarded-Proto $scheme;
}
location /docker3 {
proxy_pass http://localhost:9999;
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_set_header X-Forwarded-Proto $scheme;
}
}
...
不幸的是,我的 Jersey2 应用程序将不再识别该 url,因为 dockerX 在 url 内,当然,因为 dockerX 没有在代码中提及(这不应该被提及!)
是否可以配置 Nginx,以便我的 Jersey 应用程序仍然可以识别它,即使 url 看起来像这样:
https://my.example.com/docker1/abc/def/ghi/myJersey2App/something/function
我的 Jersey 应用程序应该仍然认识到它只需要以 /myJersey2App/
开头
我在想类似“用户仍然看到 dockerX URL,但在后台它被这样对待:
http://localhost:8888/myJersey2App/something/function
因此,用户会看到:
https://my.example.com/docker2/myJersey2App/something/function
但是背后是这样处理的:
http://localhost:8888/myJersey2App/something/function
是否可以配置 Nginx,使其像这样工作?
我希望你能帮我解决这个问题。
最佳答案
我自己想出来的。
nginx 配置应该是这样的:
...
location /docker1 {
rewrite /docker1/(.*) /$1 break;
proxy_pass http://localhost:7777;
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_set_header X-Forwarded-Proto $scheme;
}
location /docker2 {
rewrite /docker2/(.*) /$1 break;
proxy_pass http://localhost:8888;
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_set_header X-Forwarded-Proto $scheme;
}
location /docker3 {
rewrite /docker3/(.*) /$1 break;
proxy_pass http://localhost:9999;
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_set_header X-Forwarded-Proto $scheme;
}
...
当你发出请求时,你仍然会看到 dockerX 部分,但在它后面被视为好像 dockerX 部分不存在,因为重写删除了这部分。并且 Jersey Java 应用程序可以正常工作,而无需更改实际的 Jersey 2 应用程序。
关于java - Nginx 代理 : How do I configure nginx so that Jersey 2 (JAX-RS 2) still can interact with additional URL parts in it properly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48791759/
我刚刚将我的 Ember 插件从 3.0 版升级到了 3.8 版,现在我收到了这个警告: Interaction added to non-interactive element no-invalid
我正在尝试使用git add --interactive有选择地向我的索引添加一些更改,但我不断收到“您编辑的大块不适用。再次编辑...”消息。即使我选择 e 选项,我也会收到此消息,并立即保存/关闭
我正在尝试将 SelectedDateChanged 绑定(bind)到一个命令,这样我就可以将它放在我的 ViewModel 中,但无论如何它都不会接受此代码 http://pastebin.com
有时我的应用程序 UI 中有两个共享按钮(取决于状态)。它们可以共享相同的数据,但位于 UI 的不同部分。我们想要分析从哪个按钮(UI 的一部分)执行了共享。我希望使用 fieldsObject这部分
我发现了一些这样的代码, 1 (require 'cl-lib) 2 (require 'company) 3 4 (defun company-sample-backend (command
背景 gbm 包 的引用手册指出,interact.gbm 函数计算 Friedman 的 H 统计量以评估变量相互作用的强度。 H 统计量的范围为 [0-1]。 dismo 包的引用手册没有引用任何
免责声明:我知道它不是有效的 HTML。我想了解为什么不允许这样做? W3C 建议使用像 button 这样的交互元素。或 a不得包含其他交互元素。 我可以找到很多提到这条规则和一些变通办法的资源,还
在我的网络应用程序中, map 最初设置为非交互式(用户无法在 map 上移动): var map = new mapboxgl.Map({ container: 'map', sty
我正在尝试设置它,以便当我使用 applescript 打开我的插画文件时没有用户交互,但标准是: tell application id "com.adobe.Illustrator" activa
我已经在几个项目中使用了 System.Windows.Interactivity DLL,没有任何问题。现在在我最新的项目中我无法让它工作。我总是收到以下错误: 命名空间“http://schema
Presto 网站(和其他文档)讨论了 Presto 上的“交互式查询”。什么是“交互式查询”?来自 Presto 网站:“Facebook 使用 Presto 对多个内部数据存储进行交互式查询,包括
当我尝试执行 mvn release: Perform 时,出现此错误 [ERROR] Provider message: [ERROR] The svn command failed. [ERROR
我正在尝试使用 C# Interactive 尝试一些 mongodb 驱动程序,但是一旦我尝试创建一个 MongoClient我收到以下异常: > var client = new MongoCli
我想使用IB Api,但无法弄清楚我们如何请求完整的符号列表和信息。 在我找到的文档中:reqScannerParameters()-但不清楚如何获取例如纳斯达克股票的 list ? 有没有更好的办法
我已经开始将 IB 与 IBridgePy 结合使用,我想知道是否有可能以某种方式执行任何回溯测试,有没有人如何做到这一点? 最佳答案 IB 没有现成的回测/重放工具。基本上,您必须下载历史数据并通过
我是否编译 Racket 程序似乎对运行时性能没有影响。 通过编译改进的只是最初加载文件吗?换句话说,是否正在运行 racket src.rkt即时进行 jit 编译,这就是为什么我认为编译与交互式没
在解决一些练习时,我发现了 2 个重复出现的 IO 模式。第一个模式已经被方便的interact覆盖了。第二种模式类似,但按行处理输入。 如何编写 interactLinewise 方法? 最佳答案
我正在尝试使用来自 Fsi 的 F# 程序集,但似乎无法找到一种方法来获取模块中定义的方法列表以便调用它们。 这是我尝试使用的示例文件。在关注 "exposing methods that are c
我正在开发一个基本的 Haskell 程序,其中包含这行代码: interact (unwords . (map pigLatin . words) ) 但是,在将字符串数组传递给我的 pigLati
我不确定我的措辞是否正确。当一个元素被放入放置区时,我需要知道该元素相对于它所在的放置区的 x/y 位置。 非常感谢任何见解。谢谢! 最佳答案 这绝对应该由图书馆提供,但既然不是,我就是这样完成的:
我是一名优秀的程序员,十分优秀!