Nginxでネットワーク分離を解決した実践記録を詳しく解説

Nginxでネットワーク分離を解決した実践記録を詳しく解説

必要

最近、Node オンライン サービスを移行する必要があったため、2 つの新しいオンライン サーバーを申請しました。

サーバーを展開した後、サービスが正常かどうかを確認する必要があります。オフィス環境とオンライン環境のネットワークは分離されており、直接アクセスすることはできませんが、展開サーバーを介してオンラインサーバーにアクセスでき、オフィスネットワークは展開マシンにアクセスできます。

したがって、展開マシンにプロキシを構成し、オフィス環境から展開マシンに要求し、その要求をオンライン サービスにプロキシして、サービスが正常かどうかを確認できます。

ネットワーク全体の構造を下図に示します。

Nginx のインストール

ダウンロード

ダウンロードページ: http://nginx.org/en/download.html バージョンを選択し、右クリックしてリンクアドレスをコピーします

# ダウンロード [work@40-10-14 opt]$ wget http://nginx.org/download/nginx-1.18.0.tar.gz
# ファイルを解凍します [work@40-10-14 opt]$ tar -xvf nginx-1.18.0.tar.gz

インストール

# 1. デフォルトのインストール: ルート権限で解凍したディレクトリに入り、次のコマンドを実行してインストールします [root@40-10-14 nginx-1.18.0]# ./configure && make && make install

# 2. ディレクトリを指定します: 指定された /opt/nginx ディレクトリにインストールします [work@40-10-14 opt]$ mkdir /opt/nginx
[work@40-10-14 nginx-1.18.0]$ ./configure --prefix=/opt/nginx && make && mae install

デフォルトのインストールでは、ルート権限がない場合、次のエラーが報告されます。

mkdir: ディレクトリ `/usr/local/nginx' を作成できません: 権限が拒否されました
make[1]: *** [インストール] エラー1
make[1]: ディレクトリ `/opt/nginx-1.18.0' を離れます
make: *** [インストール] エラー 2

デフォルトのインストール後、nginxのインストールディレクトリを確認すると、/usr/local/nginxディレクトリにインストールされていることがわかります。

[root@40-10-14 opt]# nginxはどこにあるか
nginx: /usr/local/nginx

1. 指定されたディレクトリ方式を使用してインストールすることをお勧めします。インストール時にルート権限に切り替えると、その後の設定ファイルの変更にもルート権限が必要になります。
2. または、ルートインストール後に権限を変更して、一般ユーザーが操作できるようにします。

ソフトリンクを追加

ソフトリンクを追加して、nginxコマンドをグローバルにアクセス可能にします。これにより、実行するたびにインストールディレクトリに切り替える必要がなくなります。

# ソフトリンクを追加 [root@40-10-14 sbin]# ln -s /opt/nginx/sbin/nginx /usr/local/bin/
# バージョンを確認する [root@40-10-14 sbin]# nginx -v
nginx バージョン: nginx/1.18.0

一般的なコマンド

  • 開始: nginx
  • 停止: nginx -s stop
  • 再起動: nginx -s reload
  • ヘルプコマンド: nginx -h

強制停止:

# LinuxプロセスIDを表示する
[root@40-10-14 ~]# ps -ef | grep nginx
誰も 45198 1 0 16:12 ? 00:00:00 nginx: ワーカープロセス
ルート 51261 50692 0 17:00 pts/0 00:00:00 grep nginx
# プロセスを終了する [root@40-10-14 ~]# kill 45198
# 前のプロセスは終了しました [root@40-10-14 ~]# ps -ef | grep nginx
ルート 51277 50692 0 17:00 pts/0 00:00:00 grep nginx

プロキシの設定

2 台のマシン間でのリクエスト転送を構成するには、nginx インストール ディレクトリの nginx/conf/nginx.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 オン;

  # リクエストは次の2台のマシンに転送され、トラフィックが均等に分割される必要があります。IPとポートを指定しますupstream zpserver {
       サーバーxx.xx.xx.22:10001;
       サーバーxx.xx.xx.23:10001;
  }

  サーバー{
    # nginxサービスポートは80です
    聞く 80;
    server_name ローカルホスト;

    #文字セット koi8-r;

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

    # /user ルートパスへのリクエストのみが転送されます location /user {
      ルートhtml;
      インデックス index.html index.htm;
      proxy_pass http://zpserver;
    }

    #エラーページ 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 {
    # すべて拒否;
    #}
  }


  # IP、名前、ポートベースの設定を組み合わせた別の仮想ホスト
  #
  #サーバー{
  # 8000を聴く;
  # somename:8080 をリッスンします。
  # server_name somename alias another.alias;

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


  # HTTPS サーバー
  #
  #サーバー{
  # 443 ssl をリッスンします。
  # サーバー名 localhost;

  # ssl_certificate cert.pem;
  # ssl_certificate_key cert.key;

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

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

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

}

注意: nginx設定ファイルを変更した後は、nginx -s reloadを実行して変更を有効にする必要があります。

確認する

多くのオンライン サービスではログインが必要なため、Cookie はドメイン名にバインドされているため、IP ではなくドメイン名を使用してアクセスする必要があります。

この問題の解決は非常に簡単です。ローカル ホストを構成するだけです。

#IPはNginxサーバーのIPです
xx.xx.xx.14 xxx.daojia.com

上記の構成では、ローカル ブラウザーで xxx.daojia.com を要求することで、デプロイメント マシン上の Nginx を介してオンライン サービスに間接的にアクセスし、イントラネット内でサービスが正しいかどうかをテストできます。サービスが正常になったら、オンライン トラフィックを切断できます。

Nginx によるネットワーク分離の実践の詳細な記録に関するこの記事はこれで終わりです。より関連性の高い Nginx ネットワーク分離コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 簡単な傍受のための nginx 組み込み変数の詳細な説明と分離

<<:  ページにデータを表示するReactメソッド

>>:  MySQLの累積集計原理と使用例の分析

推薦する

Linux環境でIPV6接続をサポートするようにmysql5.6を設定する方法

導入:この記事では主に、Linux システムで IPV6 接続をサポートするように MySQL を構...

win10にmysql 8.0.18-winx64をインストールする詳細な手順

1. まず公式ウェブサイトにアクセスしてMySQLインストールパッケージをダウンロードします参考: ...

jsプロジェクトでの双方向データバインディングの簡単な実装方法

目次序文パブリッシュ・サブスクライバ・パターン結果電話要約する序文双方向データ バインディングとは、...

better-scrollプラグインのスライドできないバグについて(2021年プラグインで解決)

より良いスクロールの原則親コンテナーであるため、ラッパーの高さはコンテンツのサイズに応じて増加します...

Linuxコマンドunzipの詳しい説明

目次1. 解凍コマンド1.1 構文1.2 オプション2. 例1. 解凍コマンドunzip コマンドは...

Centos6.5 で MySQL 5.7.19 をインストールして設定する方法

Centos6.5にmysql5.7.19をインストールするための詳細な手順は次のとおりです。 1....

Tomcat のセッションと Cookie の詳細な説明

序文HTTP はステートレスな通信プロトコルです。各リクエストは互いに独立しており、サーバーは以前の...

InnoDB がシリアル化分離レベルを実装する方法

シリアル化の実装InnoDB は 2 つの方法でシリアル化を実装します。まず、SELECT 文が明示...

jQuery を使用してカルーセル効果を実装する

この記事では、jQueryでカルーセルチャートを実装するための具体的なコードを参考までに共有します。...

Vue プロジェクトで mock を使用する方法をご存知ですか?

目次最初のステップ: 2 番目のステップは、request.js で関連する構成を行うことです。re...

JavaScript でシンプルな Web 時計を実装する

JavaScript を使用して Web ページ クロックを実装します。効果は次の図に示されています...

CSS scroll-snap スクロールイベント停止と要素位置検出の実装

1. スクロールスナップはフロントエンド開発者にとって必須のスキルですCSS スクロール スナップは...

XHTML 入門チュートリアル: フォーム タグ

<br />フォームはユーザーが情報を送信するための重要なチャネルです。このセクションで...

MySQL における ESCAPE キーワードの使用法の詳細な説明

MySQL エスケープエスケープとは、エスケープ文字の本来の意味を意味します。エスケープ文字の目的は...