niginx 配置简化位置指令

niginx 配置简化位置指令

我有以下(为简单起见已删除) 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;
        }
}

如您所见,我定义了两个位置。两者之间的唯一区别是任何包含 /SAML/* 的 URL 都不会获取该try_files行。

其余一切都相同。有没有更简洁、更易于管理的方式来编写这个?

答案1

Nginx 中的许多指令都可以从周围上下文中继承。您只需要在特定块内使用proxy_passand语句。try_fileslocation

例如:

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。请参阅这个文件了解详情。

相关内容