Как я могу оптимизировать конфигурацию nginx

#nginx

Вопрос:

У меня есть файл nginx .conf, как показано ниже; Мне интересно, можно ли его написать проще:

по умолчанию.conf

 upstream docsapp {
    server app:8000;
}

server {

    listen 80;

    location / {
        alias /usr/share/nginx/html/;
    }

    location /admin/ {
        proxy_pass http://docsapp/admin/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /api/ {
        proxy_pass http://docsapp/api/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /api-token-auth/ {
        proxy_pass http://docsapp/api-token-auth/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /docs/ {
        proxy_pass http://docsapp/docs/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /media/ {
        add_header Access-Control-Allow-Origin *;
        alias /usr/local/src/app/media/;
        internal;
    }

    location /static/ {
        alias /usr/local/src/app/static/;
    }

    client_max_body_size 8M;

}
 

Местоположение находится Vue.js приложение, оставшееся-это фреймворк Django REST. Я некоторое время искал в Интернете, но ни одно из найденных решений не подошло мне.

Еще одна проблема возникла при попытке разделить этот файл на два:

vue.conf

 server {

    listen 80;

    location / {
        alias /usr/share/nginx/html/;
    }

}
 

и

drf.conf

 upstream docsapp {
    server app:8000;
}

server {

    listen 80;

    location /admin/ {
        proxy_pass http://docsapp/admin/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /api/ {
        proxy_pass http://docsapp/api/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /api-token-auth/ {
        proxy_pass http://docsapp/api-token-auth/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /docs/ {
        proxy_pass http://docsapp/docs/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /media/ {
        add_header Access-Control-Allow-Origin *;
        alias /usr/local/src/app/media/;
        internal;
    }

    location /static/ {
        alias /usr/local/src/app/static/;
    }

    client_max_body_size 8M;

}
 

Это тоже не сработало. Любая помощь будет признательна.

Ответ №1:

Я думаю, что, поскольку вы не меняете URI запроса при отправке прокси-запросов в docsapp вышестоящий поток, вы можете заменить четыре location блока, в которых proxy_pass используется директива, следующим:

 location ~ ^/(?:admin|api|api-token-auth|docs)/ {
    proxy_pass http://docsapp;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_redirect off;
}
 

Вы не можете разделить свой server блок на две части, только один из них будет работать в качестве сервера по умолчанию (см. Документацию).