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_log
和 error_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 问题。
我使用 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_log
和 error_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 问题。