問題タブ [upstream]
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.
variables - アップストリームのホストが見つからない場合に nginx がクラッシュするのを防ぐために、proxy_pass の変数を使用する
proxy_pass の変数を使用して、アップストリームが見つからない場合に nginx がクラッシュするのを防ごうとしました (このスタックオーバーフロー スレッドで説明されているように):
そうすれば、nginx はクラッシュせずに起動しますが、アップストリームに接続すると、リソースの代わりに空の html ページが返されます。
Firefox は次のエラーを返します。
このファイルは次の代わりに返されるためjquery.min.js
:
nginx のログは次のとおりです。
ノート
この構成は完全に機能しますが、nginx を開始する前にアップストリームを起動する必要があります。
何が欠けているのかわかりません。
git - 反復的なアップストリームでの開発における Git リベース
私にとってGitrebase
は、線形の履歴を取得するための良い方法ですが、最近、その動作について少し混乱しました。状況は、ローカル リポジトリ、GitLab のオリジン リポジトリ、およびコースの読み取り専用アップストリーム リポジトリを持っているということです。
基本的に、TA はアップストリーム リポジトリでドキュメントとコードをリリースします。私はそれを取得して自分のリポジトリにマージし、ラボを終了します。これは繰り返しのプロセスです。lab2 は、lab1 を終了してオリジンにプッシュした後にリリースされます。この反復では、混乱することが起こります。
lab3 がリリースされた後、master
(lab1 と lab2 のコードを含む) を にリベースしましupstream/master
たが、コミットがすべて git 履歴の最新の場所にまとめられていることがわかりました。
lab1-TA-release -> lab2-TA-release -> lab3-TA-release -> lab1-my-code (リベース時間あり) -> lab2-my-code (リベース時間あり)
私の仕事の軌跡を示すのはコミット時間だと思うので、私が見たいのは次のような線形の履歴です:
lab1-TA-release -> lab1-my-code -> lab2-TA-release -> lab2-my-code -> lab3-TA-release
私の願いを叶える方法はありますか?
- - -アップデート - - -
たとえば、lab2 が終了し、lab3 が にリリースされましたupstream/master
。lab3-TA-release
はローカル マスターにありません (そのため、単純に使用rebase
して自分の をリゾートすることはできませんmaster
)。私はgit rebase upstream/master
最初にする必要があります。ここmy lab2-my-code
にlab1-my-code
集まって、新しい時間でリフレッシュしました。そのため、実際のコミット時間 (仕事を終えたとき) が消えてしまい、混乱してしまいました。
コミットの元の時間 (リアルタイムを意味する) を自動的に予約して線形にする方法はありますか?
ssl - アップストリーム プロキシと CA の構成
別のドメインのアップストリーム プロキシと連携するように mitmproxy を構成しようとしています。
より明確に言うと、独自のドメイン (mydomain.com など) を持つプラットフォームがあり、interne にアクセスするには、独自のドメイン (company.com など) でも会社のプロキシを経由する必要があります。
mitmproxy の証明書を生成し、証明書の生成に使用される CA とキーを持っています。それらの名前を mitmproxy-ca.pem (キー + ca) および mitmproxy-ca-cert.pem (証明書) に変更し、それらを .mitmproxy フォルダーに入れます。完全にテストできなくても、うまくいくようです。
しかし、上流のプロキシ ssl 構成では、会社の CA を .mitmproxy フォルダーに入れ、名前を付けます (mycompany-ca.pem)。ssl_verify_upstream_trusted_ca: "/home/mitmproxy/.mitmproxy/mycompany-ca.pem" で config.yaml ファイルを構成しました。
しかし、mitproxy を使用してhttps://www.google.comをカールしようとすると、次のエラーが発生します。
ブラウザに会社のプロキシを使用すると、証明書の件名は google ですが、発行者は会社のプロキシ情報であることがわかります。
さらに、会社のプロキシ CA はキーのない証明書のみであり (通常のようです)、docker の mitmproxy を使用しています。もちろん、 --ssl_insecure オプションを使用すると機能しますが、上流のプロキシ証明書の検証をバイパスしたくありません (許可されていません)。
アップストリームの SSL 証明書制御を構成する方法を教えてください。
nginx - アップストリームのnginxは時々正確に1分遅れます
内部システム
ハードウェア: Xeon E-2236 x 32GB x 1TB SSD ) と 4 台のサーバー。ロード バランシングのみ、実行用x 2ea 、db CRUD用
ソフトウェア: centos 7、nginx 1.18、ノード v12.22.1
サーバーへの外部接続時、負荷分散サーバーはリバースプロキシ(実行サーバー)に送信して計算します。計算が完了したら、それをdb-serverに送信して記録します。それ
この作業は低パフォーマンスを必要とするため、常にCPU 使用率は 0~2%、RAM 使用率は 3~7%、IO WAIT は 0% です。
問題は
外部からのリクエストがロードサーバーに到着すると、リクエストはランダムに完全に 1 分間遅延 され、リバース プロキシ サーバーに送信されます。リクエストの 1 分間の遅延中に、load-server の nginx を再起動する ( systemctl restart nginx ) リクエストはエラーなしですぐに完了します。それはうまく処理されました。
不思議なことに、この問題は完全に 1 分遅れます(1 分 0.02 秒 ~ 1 分 0.1 秒かかります)。1分後には正常に見えますが(サーバー時間50ミリ秒で応答)、同じデバイスからのリクエストでは5分ごとに1分遅れます
しかし、外部 http 接続の完全なコピー x 5000 リクエストは、それを load-server から load-server に curl で送信します。
load-server send to perform-server および perform-server to db-server の消費は平均 50msよりも低い すべての nginx からリバース プロキシへのポートと応答をチェックしたところ、平均 50msよりも低くなっています。
nuxt-serverとapi- serverで同じです。それらは perform-server から実行されています - 各 localhost:3000、localhost:3001 ~ 3012
ロード-nginx.conf :
nginx - アップストリームが 404 を送信した場合でも、NGINX はアップストリームへの TCP 接続を開いたままにできますか?
コンテンツを検索するために複数のサーバーをローテーションする NGINX アップストリーム定義があります。要求されたコンテンツはこれらのサーバーの 1 つにしかないため、コンテンツが見つかるまで「試行」し続けるか、すべてのアップストリームを使い果たした後に終了します。これはうまく機能しますが、TCP のオーバーヘッドが原因で、正しいサーバーを見つけるためのコンテンツを持たないアップストリーム サーバーを "フィッシング スルー" する際に遅延が発生します。
コンテンツが見つかったサーバーは、キープアライブ / HTTP 1.1 メソッドを使用して正常に接続を確立しました。
私が抱えている問題は、NGINX が 404 を返すアップストリーム サーバーへの TCP 接続を閉じることです。したがって、次回は、別の 404 を取得して (正しい) Web サーバーに移動する前に、TCP 接続を確立する必要があります。
200 フルーツを保持する正しいアップストリーム サーバーとの接続が確立されると、キープアライブを使用してそのアップストリーム接続が正常に確立され、コンテンツに対する後続の試行は、この確立された接続を介して期待どおりに実行されます。これは良いことです。パケット キャプチャと netstats は、後続の複数の HTTP 要求に対するこの接続の寿命を示しています。
私の問題は、(悪い)サーバーのリストをより迅速に実行し、別のTCP接続が毎回「試行」されるのを待つ必要がないことです。
ダウンストリーム NGINX サーバーは、アップストリームではなく、FIN ACK で TCP 接続の閉鎖を開始するサーバーです。
ダウンストリーム構成:
アップストリーム サーバーでさえ、この接続を開いたままにしておくことを望んでいますが、NGINX ダウンストリームは関係なく TCP 接続を終了します。