У меня есть следующая (отредактированная для простоты) конфигурация 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
заявление. Видеть этот документ для подробностей.