私はnginxを主にいくつかのgunicon / mod_wsgiアプリケーションの前で、そしてもちろん静的ファイルをサーバーするためのリバースキャッシングプロキシとして使用しています。
私はすぐに私のnginx confsを維持することが不可能になることに気付きました。問題は、似ている(または同一の)パターンがいくつかありますが、それを何とかきれいにすることはできません。
私が抱えている最大の問題の1つは、名前付きの場所を使用して、confのセットをグループ化する方法として使用したいことです。
location @django_modwsgi {
include proxy.conf;
proxy_pass http://127.0.0.1:8080;
}
location @django_gunicorn {
include proxy.conf; # this could also be included directly in the server {} block?
proxy_pass http://gunicorn_builder;
}
NB。 問題は、gunicornとwsgiの両方がないことです。それはほんの一例です。もう一つは:
location @namedlocation_1 {
some cache settings;
some cache_key settings;
ignore some headers;
expires;
proxy_pass
}
location @namedlocation_2 {
other cache settings;
other cache_key settings;
ignore some headers;
expires;
proxy_pass
}
しかし、私が見つけた唯一の方法は、名前付きの場所を呼び出すことです:
location /somelocation {
try_files $uri @named_location;
}
これは既に正しくないと感じています。nginxが静的ファイルを探しに行きたくないので、指定された場所に直接行きたいです。名前付きの場所を直接「呼び出す」方法はありますか?!
私がドライに行けると思った別の方法は、たくさんのinclude
...
location /somelocation {
include django_unicorn.conf;
}
しかし、これはそれを行う良い方法ですか?非常に一般的な設定(プロキシ設定など)では問題ないように見えますが、完全なconfを取得するために別のファイルを開く必要があるのはあまり読みにくいです。
また、場合によっては、いくつかの場所を正規表現でグループ化できますが、同じブロックに共通の設定を配置できるだけでなく、それらが論理的に関連している場合にのみグループ化するのが好きです。
質問
適切なDRY nginx構成を記述するための「公式の」ベストプラクティスはありますか?
次のようなパターンを見つけたいです。
location / {
common confs
try_files $uri @name_location
}
**しかし、異なる場所に特定のケースを書くにはどうすればよいですか?**
confの一般的でない部分と@named_locationの一般的な部分を使用して、単純にいくつかの場所を追加できますか?
location /1/ {
some cache expire settings;
NOTHING ELSE;
}
location /2/ {
some other cache expire settings;
NOTHING ELSE;
}
location / {
common settings
try_files
}
location @named_location {
other common settings for this named location only
proxy_pass
}
同じリソースを指す別のURLがある場合、単純に書き換えることはできますか?
location /1/ {
rewrite ^ /3/ last;
}
location /2/ {
rewrite ^ /4/ last;
}
location / {
common settings
try_files
}
location @named_location {
other common settings for this named location only
proxy_pass
}
またはそれらをすべて1つの場所にグループ化する必要がありますか?
location / {
rewrite ^/1/$ /3/ last;
rewrite ^/2/$ /4/ last;
common settings
try_files
}
location @named_location {
other common settings for this named location only
proxy_pass
}
関連する
メーリングリストにはあまり見当たりませんでしたが、Wikiにはあまり見当たりませんでした。
これは質問NGinx Best Practicesと同じではないことに注意してください-これは非常に一般的な質問です。
このもう1つはより関連性が高い:このNginx構成をどのように乾燥させるのですか?
map
-または、少なくともこのように使用できることに気づき、思っていませんでした...これについてもう少し考えて、追加の質問/コメントがあるかどうかを確認してください!