問題タブ [openresty]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nginx - NGINX : バックエンド サーバーに対して 2 つの非同期呼び出しを行う
NGINXモジュールを使用して次のことを行いたい:Nginxはリクエストを受け取り、キャッシュ内のリクエストをデコードするためのキーを持っているかどうかを確認します(カスタム)
- YES の場合、リクエストをデコードし、そこから ID を取得し、キー値ストアにこの ID に対する値があるかどうかを (非同期で) チェックし、レスポンスで返します。
- NO の場合、キー値ストアから (非同期で) 新しいキーを取得し、このキーをキャッシュに格納して、それを使用してリクエストをデコードします。ID を取得し、キー値ストアにこの ID に対する値があるかどうかを確認し (非同期に)、応答で送信します。
ステップ 1 の実行方法を理解できたので、 githubから openresty の nginx モジュールを参照してアップストリーム モジュールを作成しました。ステップ 2 の機能を実現するために、最初のアップストリーム呼び出し (ストアからキーを取得する) の process_header() 関数で新しいアップストリーム リクエストを作成しようとしましたが、うまくいきませんでした。これを達成する方法は?
前もって感謝します。
postgresql - nginx.confの場所で^と$は何をしますか?
上記のコード スニペットは、https://github.com/FRiCKLE/ngx_postgres/issues/4から取得したものです。
誰かが私に ^ と $ の機能を説明できますか? それを説明するドキュメントが見つかりません。https://github.com/FRiCKLE/ngx_postgresとhttp://nginx.org/en/docs/http/ngx_http_core_module.html#locationを既に確認しました。
nginx - OpenResty rewrite_by_lua と rewrite_by_lua_file - 構文エラー
私は OpenResty Nginx を使用しており、Nginx conf に Lua スクリプトのスニペットがあります。(以下のサンプルですが、簡潔にするために切り捨てられています)。nginx.conf ファイルにある場合、これは正常に機能します。
ただし、このスクリプトをファイルに抽出memcached.lua
して nginx 構成に含めると、nginxrewrite_by_lua_file
を再起動できず、次のような構文エラーに関する通知を受け取ることができません。
unexpected "," in /etc/nginx/sites-enabled/memcached.lua
unknown directive "--" in /etc/nginx/sites-enabled/memcached.lua
ngx.log 行を完全に削除すると、構文エラーは消えます。
nginx conf では構文が有効であるのに、別のファイルに抽出すると無効になるのはなぜですか? バイトコードについてどこかで読んだことがありますが、それが関連しているかどうかわかりませんか?
編集
.lua ファイルの完全な出力を次に示します。この正確なコードは、nginx.conf ファイルに直接埋め込まれている場合に機能します。rewrite_by_lua
cat /etc/nginx/sites-enabled/memcached.lua
解決
TL:DR - .lua ファイルを Nginx 構成ディレクトリの外に置きます。
正確なエラー メッセージを投稿するよう求められた後、問題を再現する必要がありました。参照および Google 検索者向けに、エラー メッセージは次のようになります。
2015/12/17 10:04:02 [emerg] 6903#0: unexpected "," in /etc/nginx/sites-enabled/memcached.lua:18
今回は nginx.conf から Lua のコードをコピーして というファイルに入れmemcached.lua
、プロジェクト ディレクトリに保存しました。次に、Lua スクリプトの代わりに、nginx.conf に次のインクルードを追加しました。
rewrite_by_lua_file /path/to/my/project/memcached.lua;
すぐにそれは働き始めます!
以前は、プロジェクト ディレクトリから にシンボリック リンクして/etc/nginx/sites-enabled/memcached.lua
(それを含む .conf と一緒に実際に存在する方がよいと仮定して) それをインクルードしrewrite_by_lua_file memcached.lua;
、.conf ファイルに対して相対的に使用していました。
だから私は最初、rewrite_by_lua_file
関数がシンボリックリンクなどをたどることができなかったのではないかと思っていましたが、Luaのインクルードステートメントとは何の関係もないことに気づきましたが、シンボリックリンクが含まれている/etc/nginx/sites-enabled
ため、Nginxは明らかに(今!)通常のNginx構成ファイルであるかのように、ファイルを自動的にロードしようとします。
これは、Nginx (Ubuntu/Linux Mint 上) が/etc/nginx/sites-enabled/*
メイン構成へのパスを使用してすべての構成ファイルをインポートするように構成されているためです。
私がこの単純なエラーを作成した理由は、Apache を使用した後のバージョンの Ubuntu で同様のプロセスが発生するためだと思いますが、Apache (私ははるかに慣れています) ではインクルード パスがあります。/etc/nginx/sites-enabled/*.conf
つまり、具体的には .conf ファイルが必要です。これが、Nginx が私の .lua ファイルをインクルードしようとしないと誤って想定した理由です。
unit-testing - docker 単体テストのセットアップ
製品の単体テスト環境をセットアップしたいと考えています。mysql と redis を使用する Lua の nginx でビルドされた Web アプリケーションがあります。docker は初めてですが、これには docker が適していると思います。私のアプリケーションは、centos サーバー (運用サーバー) で実行されます。
mysql、redis、webapp 用に別のコンテナーをセットアップし、UT アプリケーション (Busted フレームワークを使用した Lua の単体テスト) を mac (私の開発マシンは MAC) または VM に記述してテストする予定です。UT アプリケーションは docker コンテナー nginx と通信し、nginx はコンテナー mysql と redis を使用します。これでいいですか?はいの場合、誰かがこれを行う方法を教えてもらえますか? 多分いくつかの良いリンク?いいえの場合、より良い方法は何ですか。私はすでに vagrant を使用してみましたが、私の UT の場合ではないはずの時間がかかりすぎました。
cookies - Openresty Lua で動的に名前が付けられた複数の Cookie を削除する
以下のコードは Openresty lua で正常に動作します
ただし、Cookie 名を動的にしようとしても機能しません。
table.insert を使用してみました:
への変数の割り当てに問題があるようですngx.header["Set-Cookie"]
nginx - nginx が私の「rewrite」ステートメントに終端セミコロンがないと主張するのはなぜですか?
Cookie が存在する場合にのみ、URL を (uwsgi 経由で) Django プラットフォームにリダイレクトしたいと考えています。content_by_lua
それができない場合は、実行をプラグインに任せる必要があります。
以下は、そのようなロジックでの私の試みです。
Nginx は、次のログ メッセージで私の知性を侮辱することが必要かつ適切であると判断しました。
おそらく、私は nginx が考えているほど密集していますが、何を見逃したのでしょうか?
おまけの質問:私の一般的なアプローチは安全で正気ですか? 私の目標を達成するためのより良い方法はありますか?
nginx - nginx の「rewrite」ディレクティブがリダイレクト ループを引き起こしているのはなぜですか?
次の http ブロックを指定すると、nginx は期待どおりに動作します。つまり、http://localhost/3ba48599-8be8-4326-8bd0-1ac6591c2041/
toなどの URL を書き換えhttp://localhost/modif/3ba48599-8be8-4326-8bd0-1ac6591c2041/
て uwsgi サーバーに渡します。
しかし、下に表示されている方法で別のブロックを追加するlocation
と、物事が崩壊し、ERR_TOO_MANY_REDIRECTS
.
ここで何が起こっているのですか?どうすればこれを修正できますか?