У меня есть два контейнера-докера, у которых есть разделенные интерфейсная часть и фоновая часть моего приложения.
В первом контейнере я уже собрал кодactjs и веб-сервер nginx.Вот файл Docker,
FROM nginx:1.15.2-alpine
COPY ./build /var/www
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
ENTRYPOINT ["nginx","-g","daemon off;"]
Это мой файл nginx.conf,
worker_processes 1;
events {
worker_connections 1024;
}
http {
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream server {
server 172.20.58.236:8080;
}
upstream client {
server 172.19.59.36;
}
server {
listen 80;
root /var/www;
index index.html index.htm;
add_header 'Access-Control-Allow-Origin' 'http://172.19.59.36';
add_header 'Access-Control-Allow_Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';
location /api {
proxy_pass http://server;
}
location ~* \.(?:manifest|appcache|html?|xml|json)$ {
expires -1;
}
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}
location ~* \.(?:css|js)$ {
try_files $uri =404;
expires 1y;
access_log off;
add_header Cache-Control "public";
}
location ~ ^.+\..+$ {
try_files $uri =404;
}
location /static/ {
root /var/www;
}
}
}
Я упомянул это & это дляфайл конфигурации.
Мой Dockerfile для серверной части,
FROM openjdk:8-jdk-alpine
ADD target/dependency-graph-service.jar dependency-graph-service.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "./dependency-graph-service.jar"]
Вот пример маршрута в моей серверной части Spring Boot,
@CrossOrigin(origins = "*")
@RequestMapping(
value = "/api/greet",
method = RequestMethod.GET
)
public String getHealthCheck(){
String greet = "Get Works!!";
return greet;
}
Типичныйзапрос от переднего плана реагирования будет выглядеть так:
sendRequest = () => {
axios.get(`http://127.0.0.1/api/greet`)
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
};
Как уже упоминалось, ip-адреса для моих ресурсов следующие, клиент - 172.19.59.36, сервер - 172.20.58.236
из браузера Iможет общаться с внутренним сервером через клиентское приложение.Этот маршрут работает,
http://172.19.59.36/api/greet
Скриншот браузера
И, как и ожидалось, я могу попасть внутрь контейнера и получить тот же URL, и он работает.
Снимок экрана терминала
Проблема в том, что при отправке одного и того же запроса из приложения реагирования или скомпилированного фрагмента javascript возникает ошибка CORS,как он создается внутри контейнера, я думаю.Этот запрос не попадает на сервер.
Снимок экрана с ошибкой
В index.html по тегу script я добавил библиотеку, и браузер делаетне загружайте это также.
Библиотека в сценарии 404 по URL-адресу библиотеки
Пожалуйста, помогите мне исправить эту проблему, я попробовал некоторые конфигурации nginx для разрешения блока CORSно ничего не помогло.
При запуске контейнеров отображения портов выглядят следующим образом:
client(172.19.59.36) - 80:80
server(172.20.58.236) - 8080:8080
Я также сослался на этот .
Заранее спасибо,