Windows で Nginx を使用して https サーバーとリバース プロキシを構成する際の問題

Windows で Nginx を使用して https サーバーとリバース プロキシを構成する際の問題

リクエストロジック

フロントエンド --> https経由でnginxをリクエスト
nginx --> http経由でバックエンドサービスをリクエストする

OpenSSLをインストールする

ダウンロード

ここに画像の説明を挿入

次に、環境変数を設定します。システム環境変数に環境変数を追加します。

変数名: OPENSSL_HOME

変数値: F:\OpenSSL-Win64\bin;

(変数値はOPENSSLのインストール場所の下のbinディレクトリです)

証明書を生成する

コマンドラインを使用してディレクトリをランダムに開き、次のコマンドを使用して証明書を生成します。

# 秘密鍵を作成# ファイル名は test と自由に付けることができます。このコマンドは rsa パスワードを 2 回設定するように要求します。パスワードは後で必要になるので覚えておいてください。コマンドを実行すると、現在のディレクトリに test.key ファイルが生成されます openssl genrsa -des3 -out test.key 1024     

# csr 証明書を作成します。ここで使用する test.key は、前のコマンドで生成されたものです。このコマンドを実行した後、一連の情報を入力する必要があります。入力する最も重要な情報は Common Name です。ここで入力するドメイン名は、https を使用してアクセスするドメイン名です。たとえば、localhost と入力しました。残りの内容はお好みに応じて入力してください。上記の手順を完了すると、sslフォルダにtest.csrとtest.keyの2つのファイルが表示されます。
openssl req -new -key test.key -out test.csr

# パスワードを削除します # SSL サポート付きの Nginx をロードし、上記の秘密キーを使用する場合は、必要なパスワードを削除します。そうしないと、nginx を起動するときにパスワードを入力する必要があります。
# test.key をコピーして、test.copy.key に名前を変更します
# コマンドラインで以下のコマンドを実行してパスワードを削除します (このとき、上記の秘密鍵の作成時に入力したパスワードを入力する必要があります)。
openssl rsa -in テスト.コピー.キー -out テスト.キー

# CRT 証明書を生成します。証明書の生成が完了しました。 ssl フォルダーに合計 4 つのファイルが生成されていることがわかりました。次に、https サーバーを構成するときに、test.crt と test.key の 2 つのファイルを使用する必要があります。
openssl x509 -req -days 365 -in test.csr -signkey test.key -out test.crt 

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

nginxをダウンロードしてインストールし、nginxの設定を変更します

生成されたtest.keytest.crt $NGINX_ROOT/confディレクトリに移動します。

#ユーザーnobody;
ワーカープロセス 1;

#error_log ログ/error.log;
#error_log ログ/error.log 通知;
#error_log ログ/error.log 情報;

#pid ログ/nginx.pid;


イベント {
    ワーカー接続 1024;
}


http {
    mime.types を含めます。
    デフォルトタイプ アプリケーション/オクテットストリーム;

    #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    # '$status $body_bytes_sent "$http_referer" '
    # '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log ログ/access.log メイン;

    ファイル送信オン;
    #tcp_nopush オン;

    #キープアライブタイムアウト 0;
    キープアライブタイムアウト65;

    #gzip オン;

    サーバー{
        聞く 80;
        server_name ローカルホスト;

        #文字セット koi8-r;

        #access_log ログ/host.access.log メイン;

        位置 / {
            ルート D:/local-site;
            インデックス index.html index.htm;
        }

        #エラーページ 404 /404.html;

        # サーバーのエラーページを静的ページ /50x.html にリダイレクトします
        #
        エラーページ 500 502 503 504 /50x.html;
        場所 = /50x.html {
            ルートhtml;
        }

        # PHP スクリプトを 127.0.0.1:80 で listen している Apache にプロキシします
        #
        #場所 ~ \.php$ {
        # プロキシパス http://127.0.0.1;
        #}

        # PHP スクリプトを 127.0.0.1:9000 で待機している FastCGI サーバーに渡します
        #
        #場所 ~ \.php$ {
        #ルートhtml;
        #fastcgi_pass 127.0.0.1:9000;
        # fastcgi_index インデックス.php;
        # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
        #fastcgi_params を含めます。
        #}

        # Apacheのドキュメントルートが.htaccessファイルへのアクセスを拒否する
        # nginxのものと一致します
        #
        #場所 ~ /\.ht {
        # すべて拒否;
        #}
    }

    サーバー{
       聞く 8086;
       ローカルホスト:8086 をリッスンします。
       server_name ローカルホスト;
       gzip オン;
       gzip_バッファ 4 16k;
       gzip_comp_レベル6;
       gzip_vary オン;
       gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript;

       位置 / {
           ルート D:/local-site/good-test;
           インデックス index.html index.htm;
       }

       場所 ^~/api/ { 
           ^~/api/(.*)$ /$1 を書き換えて、break;
           proxy_pass http://localhost:8080/; #プロキシIP:ポート}
    }

    # ここでは、HTTPS サーバー構成、リバース プロキシ、およびクロスドメイン サポートが使用されます。nginx とバックエンド サービスに注意してください。クロスドメインは nginx でのみ設定する必要があります。バックエンド サービスに対してクロスドメインを有効にしないでください。両側でクロスドメインを有効にすると、問題が発生します。#
    サーバー{
       443 ssl を聴く;
       server_name ローカルホスト;

       ssl_certificate テスト.crt;
       ssl_certificate_key テストキー;

       ssl_session_cache 共有:SSL:1m;
       ssl_session_timeout 5分;

       ssl_ciphers HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers をオン;

    # 位置 / {
    #ルートhtml;
    # インデックス index.html index.htm;
    # }

       位置 / { 
        # 書き換え ^~/api/(.*)$ /$1 break;
            # add_header アクセス制御許可オリジン *;
            # クライアント要求メソッドを許可する add_header 'Access-Control-Allow-Methods' 'GET、POST、OPTIONS、DELETE、PUT';
            # クライアントによって送信されたリクエスト ヘッダーを許可する add_header 'Access-Control-Allow-Headers' 'Origin、x-requested-with、Content-Type、Accept、Authorization';
            # クライアントがクッキーを送信できるようにする
            add_header 'Access-Control-Allow-Credentials' 'true';
            # クライアントが応答ヘッダーにアクセスできるようにする add_header 'Access-Control-Expose-Headers' 'Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma';

            プロキシパス http://10.114.119.61:8080;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;

            proxy_set_header ホスト $host;
            proxy_set_header X-Real-IP $remote_addr;
       }
    }

    サーバー{
       8443 ssl を聴く;
       server_name ローカルホスト;

       ssl_certificate テスト.crt;
       ssl_certificate_key テストキー;

       ssl_session_cache 共有:SSL:1m;
       ssl_session_timeout 5分;

       ssl_ciphers HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers をオン;

    # 位置 / {
    #ルートhtml;
    # インデックス index.html index.htm;
    # }

       位置 / { 
        # 書き換え ^~/api/(.*)$ /$1 break;
            # add_header アクセス制御許可オリジン $http_origin;
            # クライアント要求メソッドを許可する add_header 'Access-Control-Allow-Methods' 'GET、POST、OPTIONS、DELETE、PUT';
            # クライアントによって送信されたリクエスト ヘッダーを許可する add_header 'Access-Control-Allow-Headers' 'Origin、x-requested-with、Content-Type、Accept、Authorization';
            # クライアントがクッキーを送信できるようにする
            add_header 'Access-Control-Allow-Credentials' 'true';
            # クライアントが応答ヘッダーにアクセスできるようにする add_header 'Access-Control-Expose-Headers' 'Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma';

            # これは、プロキシ proxy_pass http://10.114.119.61:7001 を必要とするサービスを構成するためのものです。
            # プロキシパス https://172.16.46.38:8443;
            # プロキシパス http://10.114.119.61:8866;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;

            proxy_set_header ホスト $host;
            proxy_set_header X-Real-IP $remote_addr;
       }
    }

}

重啟nginx

ローカルドメイン名の設定

C:\Windows\System32\drivers\etc\hostsファイルを開く

設定を追加します:

10.114.119.61 パンテスト
10.114.119.61 パン.uat.com

Windows で Nginx を使用して https サーバーとリバース プロキシを構成する方法については、これで終わりです。Nginx による https サーバーの構成に関する関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 複数のドメイン名に対する Nginx リバース プロキシを使用した HTTP および HTTPS サービスの実装
  • nginx httpsリバースプロキシtomcatを実装する2つの方法
  • Nginx サーバーの https 設定方法の例
  • nginx サーバーの http を https にリダイレクトする正しい方法の詳細な説明
  • Nginx による https サーバー構築チュートリアル
  • Alibaba Cloud LINUXサーバーでのHTTPS(NGINX)設定の詳細な説明
  • Nginx で HTTPS サーバーを構築し、HTTPS アクセスを強制する方法

<<:  LinuxサーバーにVueプロジェクトをデプロイする

>>:  HTML 挿入画像の例 (HTML 追加画像)

推薦する

mysqldump を使用して MySQL データをバックアップする方法

1. mysqldump の紹介mysqldump は、MySQL に付属する論理バックアップ ツー...

Webデザインチュートリアル(8):Webページの階層と空間デザイン

<br />前回の記事:Webデザイン講座(7):Webページ制作の効率化1:必要な小言...

Typescriptを使用してWeChatミニプログラムでプロジェクトを作成する方法

プロジェクトを作成するWeChat開発者ツールでプロジェクトを作成し、言語でTypeScriptを選...

HTTP および HTTP コラボレーション Web サーバー アクセス フロー図

Web サーバーは、独立したドメイン名を持つ複数の Web サイトを構築できるほか、通信経路上のトラ...

nginx を使用して正規表現で指定された URL リクエストを傍受する方法

nginx サーバーnginx は、静的ファイルの処理に非常に効率的な優れた Web サーバーです。...

JavaScript で配列遅延評価ライブラリを実装する方法

目次概要達成方法具体的な実装評価関数の終了を決定する生成関数の範囲変換関数マップフィルター割り込み機...

MySQLがサブクエリと結合の使用を推奨しない理由

ページ分割されたクエリを実行するには: 1. MySQL の場合、サブクエリと結合の使用は推奨されま...

HTMLテキスト内のすべてのタグを置き換える方法

(?i) は大文字と小文字を区別しないことを意味します。大文字と小文字をすべて置き換えます。 htm...

Vueはドラッグ可能なツリー構造図を実装します

目次Vue 再帰コンポーネントドラッグイベント最近、Vue を使用して、ドラッグ可能なツリー構造図と...

MySQL マルチバージョン同時実行制御 MVCC の実装

目次MVCCとはMVCC 実装MVCC はファントム リードを解決しますか? MVCCとはMVCC ...

nginx での書き換えジャンプの実装

1. 新旧ドメイン名のジャンプ適用シナリオ: ドメイン名ベースのリダイレクト。会社の古いドメイン名は...

MySql の集計関数に条件式を追加する方法

MySQL のフィルタリングのタイミングは、集計関数で使用される where 条件と having ...

SQL 文で OR と AND を混在させる場合のヒント

現在、このような要件があります。ログインした人がカスタマー サービス担当者である場合、注文は「このカ...

Docker を使用して Nginx+Flask+Mongo アプリケーションをデプロイする

サーバーにはNginx、データベースサポートにはMongo、Python言語のWebフレームワークに...