Назад | Перейти на главную страницу

Упрощение конфигурации nginx директив местоположения

У меня есть следующая (отредактированная для простоты) конфигурация nginx:

server{
        location ~ /saml/ {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout 300;
            proxy_send_timeout 300;
            proxy_read_timeout 300;
            send_timeout 300;
            proxy_pass https://acme.com;
        }

        location / {
            try_files $uri $uri/ /index.html;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout 300;
            proxy_send_timeout 300;
            proxy_read_timeout 300;
            send_timeout 300;
            proxy_pass https://acme.com;
        }
}

Как видите, у меня определены два местоположения. Единственная разница между ними заключается в том, что любой URL-адрес, содержащий / SAML / *, не получит try_files линия.

В остальном все то же самое. Есть ли более чистый и управляемый способ написать это?

Многие директивы в Nginx могут быть унаследованы из окружающего контекста. Вам нужен только proxy_pass и try_files заявления в рамках конкретных location блоки.

Например:

server{
    root ...;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
    proxy_read_timeout 300;
    send_timeout 300;

    location ~ /saml/ {
        proxy_pass https://acme.com;
    }
    location / {
        try_files $uri $uri/ /index.html;
        proxy_pass https://acme.com;
    }
}

Или же поместите общие операторы в отдельный файл и используйте include заявление. Видеть этот документ для подробностей.