首页 > 解决方案 > 如何为 Angular 和 django 设置 Nginx 服务器

问题描述

我正在尝试将 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 因为它是一个角度应用程序。角度应用程序运行良好。

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

标签: djangoangularnginxgunicorn

解决方案


这很简单,我不得不像这样修改路径块

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;
 }

推荐阅读