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 追加画像)

推薦する

JavaScript 配列 sort() メソッドの基本的な使い方と落とし穴

序文日常のコード開発では、配列のソートに関連する操作が多数あります。JavaScript では、so...

Vueでフォームデータを取得する方法

目次必要データを取得して送信するテンプレートフィルターフィルターの使用シナリオ要約する必要Vue を...

JavaScript イベントの概念の詳細な説明 (静的登録と動的登録の区別)

目次js のイベントイベントタイプ一般的なイベントイベント登録静的および動的登録の例onload 読...

Centos7 に Docker をインストールします (2020 の最新バージョンが利用可能、コピーして貼り付けるだけ)

操作については、こちらの公式ドキュメントを参照してください。インストール1. 古いバージョンの do...

JavaScript関数におけるこのポイントの問題の詳細な説明

このキーワードどのオブジェクトが関数を呼び出しますか? また、関数内の this はどのオブジェクト...

nginx 設定ファイルで環境変数を使用する方法

序文Nginx はパフォーマンスを重視して設計された HTTP サーバーです。Apache や li...

インタラクティブデザインでページングと読み込みのどちらを選択するかについての説明

この記事の著者@子木yoyoが個人ブログに投稿したものです。 Web ページでもモバイル アプリでも...

CSS における XHTML タグの対応する属性と使用法

XHTML CSS を使って Web ページをデザインし始めた頃は、タグの使用経験も少なく、あまり気...

フロントエンドエンジニアが作ったクールなインタラクティブウェブサイトを推薦します

ウェブサイトリンク: http://strml.net/サミュエル・リード著ヒント: 昨日、Mome...

DockerのTLS(SSL)証明書の有効期限の問題を解決する

問題現象: [root@localhost ~]# docker イメージをプル xxx.com.c...

UrlRewriter のキャッシュ問題と関連する一連の調査

ウェブサイト機能を開発する場合、セッション キャッシュを時間内にクリアできません。一連の探索が始まり...

Alibaba Cloud に MySQL データベースをインストールするときに発生する 2002 エラーを解決する方法

データベースのインストール中に次のエラーが発生しました: 解決策は次のとおりです。 1. binディ...

CSS子要素選択親要素の実装

通常、CSS セレクターは上から下に選択し、親要素を介して子要素を選択します。では、子要素を介して親...

MySQLインスタンスが起動できない問題の分析と解決

目次序文シナリオ分析要約する序文数日前、友人がWeChatで私に連絡してきて、マシンがダウンタイムか...

js 属性オブジェクトの hasOwnProperty メソッドの使用

オブジェクトの hasOwnProperty() メソッドは、オブジェクトに特定の独自の (継承され...