英文:
Deploed Spring Boot application on Tomcat create bad URLS
问题
这是我的应用程序属性文件:
server.forward-headers-strategy=framework
spring.freemarker.expose-request-attributes=true
spring.freemarker.suffix= .ftl
spring.data.mongodb.authentication-database=aibolitDB
spring.data.mongodb.username=admin
spring.data.mongodb.password=admin
spring.data.mongodb.database=aibolitDB
spring.data.mongodb.port=27017
spring.data.mongodb.host=localhost
springdoc.swagger-ui.path=/swagger-ui-aibolit.html
spring.servlet.multipart.max-file-size=256MB
spring.servlet.multipart.max-request-size=256MB
spring.servlet.multipart.enabled=true
app.url.base=http://aibolitbackend.unitbeandev.com/
ub.vet.jwtSecret= bezKoderSecretKey
ub.vet.jwtExpirationMs= 86400000
logging.level.org.springframework.web = trace
logging.level.org.apache = trace
在尝试发送 API 请求时,我收到了以下错误:
如您所见,它试图在 /AibolitBackend/ 路径中查找。这是我的 NGINX 配置属性:
location / {
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://127.0.0.1:8080/AibolitBackend/;
}
我忘记设置了什么?我需要在 Tomcat 主机上添加一些内容吗?我不能在基本路径上进行设置,因为这里将有3个应用程序。
英文:
I have Spring Boot application& It is REST API for mobile app. So it works ok localy, but after deply on tomcat remote server, it have problems.
So, here my app in tomcat application manager
Here is properites file
server.forward-headers-strategy=framework
spring.freemarker.expose-request-attributes=true
spring.freemarker.suffix= .ftl
# location of the swagger json
spring.data.mongodb.authentication-database=aibolitDB
spring.data.mongodb.username=admin
spring.data.mongodb.password=admin
spring.data.mongodb.database=aibolitDB
spring.data.mongodb.port=27017
spring.data.mongodb.host=localhost
springdoc.swagger-ui.path=/swagger-ui-aibolit.html
spring.servlet.multipart.max-file-size=256MB
spring.servlet.multipart.max-request-size=256MB
spring.servlet.multipart.enabled=true
app.url.base=http://aibolitbackend.unitbeandev.com/
ub.vet.jwtSecret= bezKoderSecretKey
ub.vet.jwtExpirationMs= 86400000
logging.level.org.springframework.web = trace
logging.level.org.apache = trace
And When
I try to send api request, it gives me an error
As you can see, it try to find in /AibolitBackend/ path
Here my NGINX properties
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
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://127.0.0.1:8080/AibolitBackend/;
# try_files $uri $uri/ =404;
}
What I forgot to set up? Need I add some thing to Tomcat hosts?? And I cant to make it on Base / path, because here will by 3 apps.
答案1
得分: 1
你在同一个位置使用了try_files
和proxy_pass
指令,这没有任何意义。通常在nginx中,为了提供静态文件并将其他请求传递到后端,你应该使用类似以下的配置:
location /
# 首先尝试提供静态文件请求,然后将请求传递到后端
root <设置正确的静态文件根目录!>;
try_files $uri @tomcat;
}
location @tomcat {
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://127.0.0.1:8080;
}
使用proxy_pass http://127.0.0.1:8080/AibolitBackend/;
会将像/some/path
这样的任何请求转换为在传递到后端之前变为/AibolitBackend/some/path
。我不理解你想通过/AibolitBackend/
前缀实现什么目的。
英文:
You have a weird mix of try_files
and proxy_pass
directives in the same location. That doesn't make any sense. Usually to serve static files with nginx and pass other requests to the backend you should use something like
location /
# First attempt to serve request as static file, then pass request to the backend
root <set_correct_root_for_your_static_files_here!>;
try_files $uri @tomcat;
}
location @tomcat {
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://127.0.0.1:8080;
}
With proxy_pass http://127.0.0.1:8080/AibolitBackend/;
you get any request like /some/path
transformed to /AibolitBackend/some/path
before going to the backend. I didn't understand what do you want to achieve with this /AibolitBackend/
prefix.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论