zk spring 在代理 ( nginx ) 后面启动

zk spring boot behind a proxy ( nginx )

我使用 zk spring boot starter 创建了 zk 应用程序。一切正常。

SpringBootApplication.java:

@SpringBootApplication
@Controller
public class SpringBootApplication {
    @GetMapping("${application.base-path:}/{page}")
    public String view(@PathVariable String page) {
        return page;
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringBootBesGuiApplication.class, args);
    }
}

项目结构:

.....................
src/main/resources
 |
  -- web
      js
        - script1.js
        - script2.js
      - page1.zul
      - page2.zul
.....................

page1.zul:

...................
<?script src="~./js/script1.js"?>
...................

http://my-server:8081/page1 显示正确。

然后我尝试 运行 它在代理 ( nginx ) 后面。并且该页面没有显示任何内容。浏览器控制台中存在错误:

GET http://my-server/zkau/web/162740bd/_zkiju-sapphire/zul/css/zk.wcs net::ERR_ABORTED 502 (Bad Gateway)    
........................................................................................
GET http://my-server/zkau/web/162740bd/js/script1.js net::ERR_ABORTED 502 (Bad Gateway)
........................................................................................

似乎为 *.wcs、*.wpd 和我的 *.js 文件生成了错误的 url。 我究竟做错了什么?我该如何修复它?

nginx.conf:

server {
listen 80;
server_name my-server;

........................................
    
location / {
proxy_pass http://my-server:8080;
fastcgi_read_timeout 300;
}
    
location /app {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://my-server:8081;
fastcgi_read_timeout 300;
}
.............................................
}

application.properties:

application.base-path=/app

将其与其他教程(例如 https://clouding.io/hc/en-us/articles/360010806999-How-to-Deploy-Spring-Boot-Application-with-Nginx-on-Ubuntu-18-04)进行比较,

似乎至少缺少尾随的“/”
proxy_pass http://my-server:8081

proxy_pass http://my-server:8081/

希望nginx高手能证实一下,或者说详细点。从 ZK 方面来看,在网络应用程序周围使用代理时,您 can/have 无需配置任何内容。

您可以尝试打开 access_logerror_log,如果出现 proxy_pass 上游错误,您应该能够识别出来。

根据您提供的配置,您可以尝试使用@cor3000 的答案。 您当前的配置会将 /zkau/web/* 路由到端口 8080,因此请确保您可以从该 springboot 实例获取这些数据。

我通过更改配置解决了这个问题:

application.properties

server.servlet.context-path=/app

nginx.conf

..........
proxy_pass http://my-server:8081/app;
..........

谢谢@cor3000 和@protonchang。是的,这不是 ZK 问题。