外部ソースからnginxでリダイレクトを維持する


15

私は、マーケティング部門が独自にリダイレクトを維持する機会を与える状況にあります。今まで、彼らは情報をIT部門に渡し、私たちは彼らのためにそれを維持しましたnginx.conf

これらの人の中には、IISまたはApacheのリダイレクトにも精通している人もいますが、nginx構成に直接アクセスするオプションはありません。

私は、.htaccess私がアクセスできるファイルに対するnginxのサポートがなく、またnginxが含むconfファイルへの書き込みアクセスを許可しないことを好みます。私たちのマーケティングは数時間以内にnginxの設定を壊してしまうと思います...

ロードバランサーの中心にアクセスすることなく、安全な可能性はありますか?

回答:


24

そのような書き換え構成を適切に分離する方法は組み込まれていません。あなたが取ることができる3つのアプローチがあります。

マップモジュールが含まれます

マップモジュールを使用すると、別のファイルからのマッピングを含めることができます。ファイルを変更した後もNginxをリロードする必要があり、マッピングファイルは構文的に正しい必要がありますが、実行できる内容が制限されます。

nginx.conf

map $uri $new {
    include /etc/nginx/marketing.map;
}

server {
    ...
    if ($new) {
        rewrite ^ $new redirect;
    }
    ...
}

marketing.map

/about  /company/about-us;
~^/people/(?<person>.*)$    /company/people/$person;

前処理の構成

最初の方法は、定義したフォーマットからリダイレクトをnginx構成に変換するスクリプトを作成することです。たとえば、スペースで区切られたリダイレクトのリストが与えられた場合:

/foo/(.*) /bar/$1

およびスクリプト:

#!/bin/sh
while read SOURCE DEST; do
    echo "rewrite $SOURCE $DEST permanent;"
done < redirects.txt > redirects.conf

次の構成を形成します。

rewrite /foo/(.*) /bar/$1 permanent;

次にnginx -t、構成全体を実行して、再ロードする前に構成が有効であることを確認します。

オンザフライ処理

2番目のオプションは、ngx_luangx_perlまたはngx_jsを使用して、nginx自体でリダイレクト設定の読み取りと処理を実装することです。たとえば、rewrite_by_luaディレクティブを使用すると、Luaコードを実行して書き換えを作成できます。ただし、リクエストごとにコードを解釈するため、パフォーマンスに注意する必要があります。


1
マップモジュールは、リダイレクトを構成するためのわずかに制限された方法を提供します。
mgorven

1
mapメソッドは非常に有望に見えます!そのため、マップファイルを管理するための簡単なWebサイトの作成を開始します。ありがとうございました!
サシャ

2
悲しいことに、この時点(2014年秋)で、ngx_jsプロジェクトは2年以上前に最後に触れられました。ただし、ngx_luaは非常にアクティブであり、適切に管理されています。
ヴィル14

jsのサブセットを使用できるnginScript(アルファ品質)が利用可能になりました。
lifeisfoo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.