django - 为 DRF、Django 和 React 前端配置 Nginx 和 Gunicorn
问题描述
我有一个应用程序,其前端在 React 中,后端在 Django 中,前端使用 DRF 开发的 API。现在我将 Nginx 与 Gunicorn 一起用作 Web 服务器。以下是我在可用站点中的 Nginx conf 文件:
server {
listen 8000;
server_name localhost;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/nokia-ui/build/;
}
location /nokia-sdn/api/v1/ {
proxy_pass http://127.0.0.1:8000/nokia-sdn/api/v1/;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://unix:/home/nokia-sdn/nokia.sock;
}
}
现在当我访问http://localhost:8000/时,我得到了登录页面,但是我无法向后端发出任何 api 请求。我们是否需要在 nginx 文件中定义 API 的路径,如果那么格式是什么?
解决方案
我怀疑问题是由于标头不匹配,Django 拒绝了带有 400 响应的 API 请求Host
。这些 ajax 请求可能127.0.0.1
用于它们的Host
标头,而您正在使用localhost
.
您应该告诉 Nginx 在位置配置中设置标头/nokia-sdn/api/v1/
- 例如:
location /nokia-sdn/api/v1/ {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8000/nokia-sdn/api/v1/;
}
推荐阅读
- python - 数据框单列的规范化
- cpanel - cPanel 登录名/密码
- javascript - 如何将url解析为数组?
- ios - 搜索结果未显示正确的单词
- r - 将损坏的 xls 文件加载到 r 中而无需手动更改文件类型
- python - 使用 Biopython 将多序列 fasta 蛋白质文件拆分为多个文件
- jquery - 在 Safari 视频播放器中,仅在全屏播放时显示黑屏 IOS 14 & > 版本
- google-sheets - 如何根据已导入数据的行将复选框放在某些行中?
- c++ - 使用在“if”内部声明的类/结构成员,外部有条件
- ibm-cloud - Watson Studio:不处理图像