如何为 angular 和 django 设置 Nginx 服务器

How to setup Nginx server for angular and django

我正在尝试将 Web 应用程序部署到我的服务器。我已将 html 文件放在一个文件夹中,并且在同一台服务器上有一个 django 服务器 运行。我正在使用 nginx 为后端设置反向代理,但由于某种原因我无法路由到后端 url。

这是我的 nginx 配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 301 https://example.com$request_uri;
}
server {
        listen [::]:443 ssl ipv6only=on;
        listen 443 ssl;
        server_name example.com example.com;

    root /var/www/html/;
    index index.html;

        # Let's Encrypt parameters
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        try_files $uri $uri/ = index.html;
    }
        location /api {
          proxy_pass         http://unix:/run/gunicorn.sock;
          proxy_redirect     off;

          proxy_set_header   Host              $http_host;
          proxy_set_header   X-Real-IP         $remote_addr;
          proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
          proxy_set_header   X-Forwarded-Proto https;
        }
}

在第一个块中..我将回退设置为 index.html 因为它是一个 angular 应用程序。 angular 应用运行良好。

但是我无法访问反向代理服务器的路由,每当我使用 /api/something 访问路由时,它会将我带回 angular 应用即 index.html

很简单,我必须像这样修改路径块

location ~^/(admin|api) {
    proxy_pass http://unix:/run/gunicorn.sock;
    proxy_redirect off;

    proxy_set_header   Host              $http_host;
    proxy_set_header   X-Real-IP         $remote_addr;
    proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto https;
 }