我有以下(为简单起见已删除) 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_pass
and语句。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
。请参阅这个文件了解详情。