访问使用 gunicorn 和 nginx 服务的 django 时出现错误 404
I am getting error 404 when accessing django served with gunicorn and nginx
我有一个 angular 应用程序加载到 https://xxx.xxx.xxx.xxx/ 上,由代理服务器 (Nginx) 提供服务。
在同一台服务器上,我托管了我的后端 (django),当我尝试使用 domain-ip/api/users 访问任何 'API' 服务时,我得到
Page not found (404)
Request Method: GET
Request URL: http://xxx.xx.xx.xxx/api/users/
当我检查 nginx 日志时,没有记录任何最近的日志来突出显示任何错误。
这是我的 /etc/nginx/sites-available/default
服务器{
听 80 default_server;
听 [::]:80 default_server;
#root points to my angular app
root /home/bc_sparrow/bc_s/frontend/dist;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name 138.xx.55.xxx;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.html;
}
location /api/ {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
#proxy_set_header Host $http_host; #adding this line made things worse
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
}
}
使用上面的配置,当我运行这两个命令时我没有得到错误。
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled
sudo nginx -t
另外当我 运行 sudo systemctl status gunicorn 我得到
gunicorn.service - gunicorn daemon
Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2020-05-17 03:31:33 UTC; 29min ago
Main PID: 14011 (gunicorn)
Tasks: 4 (limit: 1151)
CGroup: /system.slice/gunicorn.service
├─14011 /home/bc_sparrow/bc_s/backend/merchant/env/bin/python /home/bc_sparrow/bc_s/backend/merchant/env ├─14033 /home/bc_sparrow/bc_s/backend/merchant/env/bin/python /home/bc_sparrow/bc_s/backend/merchant/env ├─14038 /home/bc_sparrow/bc_s/backend/merchant/env/bin/python /home/bc_sparrow/bc_s/backend/merchant/env └─14039 /home/bc_sparrow/bc_s/backend/merchant/env/bin/python /home/bc_sparrow/bc_s/backend/merchant/env
May 17 03:31:33 SparrowsV1 systemd[1]: Stopped gunicorn daemon.
May 17 03:31:33 SparrowsV1 systemd[1]: Started gunicorn daemon.
May 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14011] [INFO] Starting gunicorn 20.0.4
May 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14011] [INFO] Listening at: unix:/run/guniMay 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14011] [INFO] Using worker: sync
May 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14033] [INFO] Booting worker with pid: 140May 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14038] [INFO] Booting worker with pid: 140May 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14039] [INFO] Booting worker with pid: 140
其他消息来源建议我编辑我的默认 nginx 配置文件,在位置 /api/ 块上不带 (http://)
proxy_pass unix:/run/gunicorn.sock;
此更改引发错误
[emerg] 14127#14127: invalid URL prefix in /etc/nginx/sites-enabled/defaul
我想我已经用尽了解决此问题的所有可能链接,因此欢迎任何帮助。
对于一些 reason/not 这是我的问题。
在开发环境中,我的 Django 端点可以通过
访问
localhost:8000/cars/
这就是我推送到远程服务器的内容。
在我的 nginx 配置文件中,我预计位置块
location /api/ {
...
}
只会从域中获取请求。com/api/ 并将它们发送到我的 Django 应用程序。
但是我的 Django 应用程序返回了域。com/cars/ 而不是 domain/api/cars/。
答案:
我必须将 'api/' 附加到我的网址,以便我的后端服务器 (django) returns/responds 到
localhost:8000/api/resources
而不是
localhost:8000/resources
我有一个 angular 应用程序加载到 https://xxx.xxx.xxx.xxx/ 上,由代理服务器 (Nginx) 提供服务。
在同一台服务器上,我托管了我的后端 (django),当我尝试使用 domain-ip/api/users 访问任何 'API' 服务时,我得到
Page not found (404)
Request Method: GET
Request URL: http://xxx.xx.xx.xxx/api/users/
当我检查 nginx 日志时,没有记录任何最近的日志来突出显示任何错误。
这是我的 /etc/nginx/sites-available/default
服务器{ 听 80 default_server; 听 [::]:80 default_server;
#root points to my angular app root /home/bc_sparrow/bc_s/frontend/dist; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name 138.xx.55.xxx; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /index.html; } location /api/ { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; #proxy_set_header Host $http_host; #adding this line made things worse proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Real-IP $remote_addr; }
}
使用上面的配置,当我运行这两个命令时我没有得到错误。
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled
sudo nginx -t
另外当我 运行 sudo systemctl status gunicorn 我得到
gunicorn.service - gunicorn daemon
Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2020-05-17 03:31:33 UTC; 29min ago
Main PID: 14011 (gunicorn)
Tasks: 4 (limit: 1151)
CGroup: /system.slice/gunicorn.service
├─14011 /home/bc_sparrow/bc_s/backend/merchant/env/bin/python /home/bc_sparrow/bc_s/backend/merchant/env ├─14033 /home/bc_sparrow/bc_s/backend/merchant/env/bin/python /home/bc_sparrow/bc_s/backend/merchant/env ├─14038 /home/bc_sparrow/bc_s/backend/merchant/env/bin/python /home/bc_sparrow/bc_s/backend/merchant/env └─14039 /home/bc_sparrow/bc_s/backend/merchant/env/bin/python /home/bc_sparrow/bc_s/backend/merchant/env
May 17 03:31:33 SparrowsV1 systemd[1]: Stopped gunicorn daemon.
May 17 03:31:33 SparrowsV1 systemd[1]: Started gunicorn daemon.
May 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14011] [INFO] Starting gunicorn 20.0.4
May 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14011] [INFO] Listening at: unix:/run/guniMay 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14011] [INFO] Using worker: sync
May 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14033] [INFO] Booting worker with pid: 140May 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14038] [INFO] Booting worker with pid: 140May 17 03:31:34 SparrowsV1 gunicorn[14011]: [2020-05-17 03:31:34 +0000] [14039] [INFO] Booting worker with pid: 140
其他消息来源建议我编辑我的默认 nginx 配置文件,在位置 /api/ 块上不带 (http://)
proxy_pass unix:/run/gunicorn.sock;
此更改引发错误
[emerg] 14127#14127: invalid URL prefix in /etc/nginx/sites-enabled/defaul
我想我已经用尽了解决此问题的所有可能链接,因此欢迎任何帮助。
对于一些 reason/not 这是我的问题。
在开发环境中,我的 Django 端点可以通过
访问localhost:8000/cars/
这就是我推送到远程服务器的内容。
在我的 nginx 配置文件中,我预计位置块
location /api/ {
...
}
只会从域中获取请求。com/api/ 并将它们发送到我的 Django 应用程序。
但是我的 Django 应用程序返回了域。com/cars/ 而不是 domain/api/cars/。
答案:
我必须将 'api/' 附加到我的网址,以便我的后端服务器 (django) returns/responds 到
localhost:8000/api/resources
而不是
localhost:8000/resources