【发布时间】:2018-08-23 05:07:24
【问题描述】:
我在一组 Docker 容器中运行一个基于 Django 的 Web 应用程序,我试图同时包含一个 REST API(使用 django-REST-framework)以及使用它的 ReactJS 应用程序。我所有的其他应用程序都通过 HTTPS 提供服务,但是当 React 应用程序访问 Docker 网络内的 REST API 时,我遇到了Mixed Active Content。 React 应用程序托管在我的 NGINX 容器中,并作为静态站点提供服务。
这是我的 Nginx 容器的相关配置:
# SSL Website
server {
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
server_name *.domain.com;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/nginx/ssl/my_cert.crt;
ssl_certificate_key /etc/nginx/ssl/my_key.key;
ssl_stapling on;
ssl_stapling_verify on;
access_log /home/logs/error.log;
error_log /home/logs/access.log;
upstream django {
server web:9000;
}
location /
{
include uwsgi_params;
# Proxy settings
proxy_pass http://django;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# REACT APPLICATION
location /faqs {
autoindex on;
sendfile on;
alias /usr/share/nginx/html/faqs;
}
}
在开发过程中,React 应用程序从网络外部访问我的 REST API,因此资源调用使用 https,如下所示:axios.get(https://myapp.domain.com/api/)
除了偶尔出现的 CORS 错误之外,一切都相对顺利进行。
但是,现在 React 和 API 都在 Docker 网络中运行,NGINX 不参与容器之间的通信,并且路由如下所示:
axios.get(http://web:9000/api)
这给了我更严重的混合活动内容错误。
我见过多个类似的问题,但大多数问题要么不使用 Docker 容器,要么使用我已经在我的配置文件中获得的一些 NGINX 指令。鉴于 Docker 在此类松散耦合应用程序中的流行,我想此类问题的解决方案比比皆是。遗憾的是我没有遇到任何问题,因此,任何建议都将不胜感激。
【问题讨论】:
-
我做过很多次这样的事情。我不确定你的问题到底是什么,如果你能澄清一些事情,帮助会更容易:为什么反应请求通过http? react 应用程序由同一个 docker 网络提供服务这一事实并没有改变客户端浏览器(网络外)正在调用您的应用程序这一事实。
-
我的麻烦是我的 React 应用程序对
http://web:9000/api的请求得到了Mixed Content Error。如何让与我的应用交互的浏览器相信所有内容都是安全的?据我了解,容器之间的流量不需要加密,我不知道有什么方法可以这样做。
标签: reactjs docker nginx django-rest-framework