記事ディレクトリ
1。概要
最近では、Nginx + (Nginx + PHP7) の技術生態に基づいて負荷分散が行われています。PHP フレームワークには ThinkPHP5 が使用され、決済ビジネスには WeChat 決済が使用されています。ロジックは 1 つです。現在リクエストされているドメイン名とコールバックを取得します。 WeChat 支払いのアドレス\think\Request::instance()->domain()
。アプレット側は https プロトコルにアクセスします。負荷分散後、プログラムで取得した http プロトコルにより、WeChat 支払いが正しくコールバックできず、注文ステータスが変化しません。したがって、プロトコルは Nginx 負荷分散構成で透過的に送信される必要があります。インターネット上の多くの記事を確認したところ、ほとんどの記事は透過的な送信によって IP を要求しているだけであり、プロトコルは関与していませんでしたので、この記事にまとめます。
2.proxy_set_headerコマンド
2.1 機能説明
リクエストヘッダーを再定義するか、バックエンドサーバーに追加します。
2.2 文法
2.2.1 ルール
proxy_set_header field value;
2.2.2 コンテキスト
http, server, location
2.2.3 デフォルト値
$class 変数は、Nginx のリクエスト セッションで使用できる変数です。
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
2.3 共通オプションの説明
オプション | 価値 | 説明する |
---|---|---|
ホスト | $proxy_host | サーバーによって提供されるドメイン名/ホスト アドレス |
X-Forwarded-For | $proxy_add_x_forwarded_for | HTTP プロキシまたはロード バランサ経由でオリジン IP を識別するために使用されます。 |
X-Real-IP | $remote_addr | クライアントIP |
X-Forwarded-Proto | $スキーム | 負荷分散されたhttpsプロトコルをバックエンドに透過的に送信します。 |
X-リアルポート | $remote_port | クライアントまたは上位レベルのポート |
ユーザーエージェント | $http_user_agent | クライアントのUA |
さらに、ダウンストリームへのリクエストの透過的な送信をカスタマイズ/計算することもできます。
3. まとめ
支払いなどのコア ビジネス シナリオでは、ドメイン名を動的に取得してコールバック アドレスを設定することはお勧めできません。設定ファイルに固定値を記述することができるため、デプロイメントアーキテクチャの調整によって重大な業務事故が発生することを防ぎます。また、導入アーキテクチャを調整するには、実稼働環境に直接置き換えるのではなく、一連のミラーリング環境を導入し、コアプロセスのテストに合格した後、一部のトラフィックを切り替えて検証し、最後に全体を切り替えます。問題はない。