Linux

位置指令的 niginx 配置簡化

  • April 10, 2019

我有以下(為簡單起見而編輯)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行。

其他一切都是一樣的。有沒有一種更簡潔、更易於管理的方式來編寫這個?

Nginx 中的許多指令都可以從周圍的上下文中繼承。您只需要特定塊中的proxy_passand語句。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語句。有關詳細資訊,請參閱此文件

引用自:https://serverfault.com/questions/962467