我有一个在端口 5000 上本地运行的 Flask(带有 Flask-restplus)应用程序。当我在本地启动应用程序并转到 URL 下方时,我可以看到 Swagger UI。
http://localhost:5000/api/#
但是当我在 NGINX 后面运行它时,gunicorn 并转到
http://localhost:81/api/#
我得到以下错误
Can't read from server. It may not have the appropriate access-control-origin settings.
当我查看 chrome 错误时,我看到向http://localhost/api/swagger.json发出请求,这是因为 NGINX 容器在端口 81 上运行时出现的问题?
$(function () {
window.swaggerUi = new SwaggerUi({
url: "http://localhost/api/swagger.json",
validatorUrl: "" || null,
dom_id: "swagger-ui-container",
supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
onComplete: function(swaggerApi, swaggerUi){
},
onFailure: function(data) {
log("Unable to Load SwaggerUI"); // <<<-- This is where it breaks
},
});
window.swaggerUi.load();
但是我可以通过http://localhost:81/api/centres/1向我发出邮递员请求,并且我得到了预期的数据
在过去三天谷歌搜索后,选项是:
- 在响应中发送 CORS 标头。我不喜欢这个,因为它是一个安全风险。
- 配置 NGINX 以将请求重定向到正确的 url ( http://flask.pocoo.org/snippets/35/ )
这就是我的服务器配置的样子
server {
listen 81;
charset utf-8;
# Configure NGINX to reverse proxy HTTP requests to the upstream server
(Gunicorn (WSGI server))
location / {
# Define the location of the proxy server to send the request to
proxy_pass http://web:8000;
proxy_redirect http://localhost/api http://localhost:81/api;
# Redefine the header fields that NGINX sends to the upstream server
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
}
}
它仍然没有向我展示招摇的用户界面。我是这个 Docker、Nginx 和 gunicorn 世界的新手。如何解决这个问题?