Развернутое приложение Spring Boot на Tomcat создает неверные URL-адреса

#java #spring-boot #nginx #deployment #tomcat8

#java #spring-boot #nginx #развертывание #tomcat8

Вопрос:

У меня есть приложение Spring Boot, и это REST API для мобильного приложения. Так что локально все работает нормально, но после удаления на удаленном сервере tomcat у него возникают проблемы. Итак, вот мое приложение в диспетчере приложений tomcat

введите описание изображения здесь

Вот файл properites

 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
  

И когда
Я пытаюсь отправить запрос api, он выдает ошибку

введите описание изображения здесь

Как вы можете видеть, оно пытается найти в /AibolitBackend/ path Здесь мои свойства NGINX

  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;
    }
  

Что я забыл настроить? Нужно ли мне что-то добавить к хостам Tomcat?? И я не могу сделать это на базе / пути, потому что здесь будет 3 приложения.

Ответ №1:

У вас странное сочетание try_files proxy_pass директив и в одном и том же месте. Это не имеет никакого смысла. Обычно для обслуживания статических файлов с помощью nginx и передачи других запросов на серверную часть вы должны использовать что-то вроде

 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;
}
  

При proxy_pass http://127.0.0.1:8080/AibolitBackend/; этом вы получаете любой запрос, подобный /some/path преобразованному /AibolitBackend/some/path , перед тем, как перейти к серверной части. Я не понял, чего вы хотите достичь с помощью этого /AibolitBackend/ префикса.

Комментарии:

1. Да, я хочу, чтобы tp получил доступ к rest без /AibolitBackend/ . Это должно быть похоже aibolitbackend.unitbeandev.com/public/api ***

2. Чем запросы к REST API отличаются от других? Любой запрос, начинающийся с /public/api , является запросом REST?