У меня есть веб-приложение на основе ReactJS, которое обслуживает nginx на /. Это веб-приложение связывается с веб-службой, работающей на Tomcat, которая работает на порту 8443 на том же компьютере. Я настроил proxy_pass на nginx для передачи любого запроса, полученного на / APIServer, на сервер Tomcat.
Пропуск прокси успешно отправляет запросы на / APIServer серверу Tomcat. Но проблема в том, что Tomcat предоставляет новый JSESSIONID
значение для каждого запроса из веб-приложения. Каждый ответ от Tomcat содержит Set-Cookie
заголовок с новым JSESSIONID
пока нет Cookie
заголовок, отправляемый клиентом для каждого запроса после первого.
Моя конфигурация nginx выглядит следующим образом:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/analytics-ui;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ /index.html;
}
location /APIServer/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header Access-Control-Allow-Origin *;
proxy_redirect off;
proxy_pass https://127.0.0.1:8443/;
}
}
Я добавил заголовки прокси после исследования, как решить эту проблему, но пока ни одно из решений не помогло. Tomcat по-прежнему предоставляет новые JSESSIONID
s для каждого запроса из веб-приложения. Это вызывает проблемы в веб-приложении с такими функциями, как вход в систему и авторизация.
API на сервере Tomcat работает, если я вызываю его напрямую с помощью Postman или веб-браузера.
Есть ли что-то, что я упускаю из виду, или требуется дополнительная настройка, чтобы заставить это работать?
Спасибо.
Хорошо, я неуклюжий.
Причина, по которой это не сработало, заключалась в том, что я не использовал SSL на nginx, в то время как Tomcat использовал SSL. Я установил SSL в nginx, и теперь он работает как положено.