nginx を使用して同じドメイン名で複数の Vue プロジェクトをデプロイし、リバース プロキシを使用する方法

nginx を使用して同じドメイン名で複数の Vue プロジェクトをデプロイし、リバース プロキシを使用する方法

効果

現在、プロジェクトは2つ(project1、project2)あり、nginxに付属するindex.htmlがあります。サブプロジェクトのルーティングを統一するために、対応するリンクコード(後で貼り付け)を追加しました。

次のような効果が得られると期待しています (IP: localhost、ポート: 8080 と想定)。

http://localhost:8080/ 一番外側のindex.htmlを入力します
http://localhost:8080/project1 プロジェクト1に入る
http://localhost:8080/project2 プロジェクト2に入る

さっそく設定を始めましょう

Vue 構成

私はプロジェクトをビルドするために vue-cli2 を使用しているため、それに応じていくつかの vue 構成パラメータを変更する必要があります。

configフォルダ内のindex.jsはパッケージ化されているので、build.assetsPublicPath内の対応するプロジェクト名を変更する必要があります。例:

//プロジェクト1
モジュール.エクスポート = {
 開発者: {},
 建てる: {
  assetPublicPath: '/project1/' // 先頭と末尾の '/' に注意してください
 }
}

//プロジェクト2
モジュール.エクスポート = {
 開発者: {},
 建てる: {
  assetPublicPath: '/project2/' // 先頭と末尾の '/' に注意してください
 }
}

config フォルダ内の prod.env.js を次のように変更します。

//プロジェクト1
モジュール.エクスポート = {
 NODE_ENV: '"production"'、
 BASE_API: '"/api/pro1"' // これは後で nginx の設定に対応します}

//プロジェクト2
モジュール.エクスポート = {
 NODE_ENV: '"production"'、
 BASE_API: '"/api/pro2"' // これは後で nginx の設定に対応します}

[注] 私のプロジェクトではプロキシプレフィックスとしてBASE_APIを使用しているため、ここにない場合は独自のプロキシ設定を見つける必要があります。

vue-router ファイルの設定は各自で異なるため、ルーターの設定ファイルを見つけて内部的に変更する必要があります。

// 履歴モードを使用しました。ハッシュモードはテストしていませんが、同じ効果があると思います // project1
デフォルトの新しいルーターをエクスポートします({
 base: '/project1/', // サブプロジェクト名を変更することに注意してください。これは build.assetsPublicPath に対応します。
 モード: '履歴'、
 スクロール動作: () => ({ y: 0 }),
 ルート: []
})

//プロジェクト2
デフォルトの新しいルーターをエクスポートします({
 base: '/project2/', // サブプロジェクト名を変更することに注意してください。これは build.assetsPublicPath に対応します。
 モード: '履歴'、
 スクロール動作: () => ({ y: 0 }),
 ルート: []
})

[注意] npm run buildで.tap(*)のようなエラーが出る場合があります。これはパッケージ内のhtml-webpack-pluginのバージョンに問題があるためです。以下の文を実行してください。

# このバージョンは package.json のバージョンですが、このバージョンを再指定する必要があります$ npm i [email protected] -D

Nginx の設定

まず、私のディレクトリは次のようになります。無関係なファイルはすべて次のように表示されます...

。
├─conf
│ ├─... # その他のファイル│ └─nginx.conf
│
├─html # ここだけ見て、他は今のところ使わない│ ├─project1
│ │ └─静的
│ │ ├─css
│ │ ├─フォント
│ │ └─js
│ │ ├─グ
│ │ └─V
│ ├─プロジェクト2
│ │ └─静的
│ │ ├─css
│ │ ├─フォント
│ │ └─js
│ │ ├─グ
│ │ └─V
│ ├─index.html
│ └─50x.html
└─... # その他のファイル

[説明] 私の nginx ディレクトリはネイティブで、html フォルダが含まれています。手間を省くために、これを直接使用します。もちろん、他のディレクトリを指定することもできますが、今のところは私と同じ設定を使用して、後でカスタマイズしてください。

次に、confフォルダ内のnginx.confファイルの設定を開始します。

元のファイルを直接変更し、変更された構成はすべて http モジュール内にあったため、他の不要なコードを次のように置き換えました...

# ...
# リバースプロキシ 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"';

  ファイル送信オン;
  キープアライブタイムアウト65;

  クライアントの最大ボディサイズは20Mです。
  クライアントボディバッファサイズ 10M;
  ラージクライアントヘッダーバッファ 4 128k;
  
  # これはクラスターアップストリームとして使用できます p1_server {
    サーバー localhost:8081;
  }

  # これはクラスターアップストリーム p2_server として使用できます {
    サーバー localhost:8082;
  }

  サーバー{
    8080を聴く;
    server_name ローカルホスト;
    文字セット utf-8;

    プロキシ接続タイムアウト 180;
    プロキシ送信タイムアウト 180;
    プロキシ読み取りタイムアウト 180;
    proxy_set_header ホスト $host;
    proxy_set_header X-Forwarder-For $remote_addr;

    root html; # ここでフォルダーを指定します # プロジェクトのルート全体。私は面倒だったので同じファイルに直接書きました # たくさんある場合は、複数の conf ファイルを設定し、include を使用して関連付けることができます location / {
      try_files $uri $uri/ /index.html; # ここで、htmlフォルダ内のindex.htmlが指定されていることがわかります
    }
    
    #プロジェクト1
    # 以下は、現在の vue プロジェクトの config/index.js の build.assetsPublicPath 構成です。
    # これは、Vueプロジェクトで設定されたルーターのベースでもあります
    場所 ^~ /project1 {
      try_files $uri $uri/ /project1/index.html; # ここでは、htmlフォルダの下のproject1フォルダのindex.htmlが指定されていることがわかります。
    }
    
    #プロジェクト2
    # プロジェクト2の設定場所はここです ^~ /project2 { # 
      try_files $uri $uri/ /project2/index.html; # ここでは、htmlフォルダの下のproject2フォルダのindex.htmlが指定されていることがわかります。
    }
    
    # これは、project1 が構成のために呼び出す必要のあるインターフェースです。場所 /api/pro1 { # これは、vue プロジェクトの prod.env.js の構成 BASE_API です。 
      proxy_redirect オフ;
      proxy_set_header ホスト $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://p1_server; # ここでの p1_server は上記の設定に対応します。upstream p1_server {}、ここでクラスタリングを行うことができますが、必要ないので、単純に設定します}
    
     # これは、project1 が構成場所 /api/pro2 のために呼び出す必要のあるインターフェースです { # これは、vue プロジェクトの prod.env.js の構成 BASE_API です
      proxy_redirect オフ;
      proxy_set_header ホスト $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://p2_server; # ここでの p2_server は上記の設定に対応します。upstream p2_server {}、ここでクラスタリングを行うことができますが、必要ないので、単純に設定します}

    # ...
  }

  # ...
}

最後に、私が修正したindex.htmlのコードを投稿しました

追記なので追記したコードはそのまま掲載し、他は…

...
<p><em>nginx をご利用いただきありがとうございます。</em></p> <!-- 表示場所 -->

<!-- 開始: 追加 -->
<時間>
<a href="/project1" rel="external nofollow" >プロジェクト 1</a> | <a href="/project2" rel="external nofollow" >プロジェクト 2</a>
<!-- 終了: 追加 -->

</body> <!-- 表示目的のため -->

最終デバッグ

すべての設定が完了したら、nginx を起動できます。方法がわからない場合は、自分で解決してください。

起動は成功しました。ブラウザに http://localhost:8080 と入力すると確認できます。

プロジェクト1をクリックすると、リンクがhttp://localhost:8080/project1になることがわかります。

プロジェクト 2 をクリックすると、リンクが http://localhost:8080/project2 に変わります。これはまさに予想どおりであり、成功です。

【形而上学の強引な説明】その日も設定はしたのですが、起動するとすぐにエラーが出たので結局諦めました。しかし、翌日、確認する準備ができたとき、起動したときにはすべて問題ありませんでした。私はとても混乱しました! 私と同じ問題に遭遇した場合は、そのまま放置してください。翌日には解決されるかもしれません。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue プロジェクトを nginx にデプロイする方法 (履歴モード)
  • nginx で Vue プロジェクトをデプロイする方法
  • nginx で vue プロジェクトをデプロイするときに js css ファイルが見つからない問題の解決策
  • Vue プロジェクト nginx を非ルート ディレクトリにデプロイするときに空白が更新される問題を解決する
  • vue プロジェクトを nginx/tomcat サーバーにデプロイする実装
  • Vue.js プロジェクト nginx デプロイメント チュートリアル
  • Vue をパッケージ化して Nginx にデプロイすると CSS スタイルが有効にならない問題を解決する方法
  • サーバーはNginxを使用してVueプロジェクトをデプロイします

<<:  CocosCreatorプロジェクト構造の仕組みの詳細な説明

>>:  SQL文の最適化の一般的な手順の詳細な説明

推薦する

Javascript 文字列メソッドの詳細な説明

目次文字列の長さ: 長さcharAt() charCodeAt()文字列に値が含まれているかどうかを...

Docker nginx + https サブドメイン設定の詳細なチュートリアル

今日はたまたま友人のサーバーの移転を手伝うことになり、サーバーの基本的な設備の設定を行ったのですが、...

Win10 での MySQL 8.0.16 のインストールと設定のチュートリアル

1. MySQL 8.0.16を解凍する次の図に示すように、解凍後にdadaフォルダとmy.ini構...

Vuexの役割についての深い理解

目次概要コンポーネント間でデータを共有する方法Vuex の原則の紹介Vuexはコンポーネントのグロー...

MySQLにおけるテーブルインデックスの定義方法と導入

概要インデックスは、テーブル内の 1 つ以上の列に基づいて DBMS によって特定の順序で作成される...

MySQL 8.0.17 をインストールしてリモート アクセスを構成する方法

1. インストール前の準備データベースのバージョンを確認するコマンド: mysql --versio...

Linux システムファイル共有 samba 設定チュートリアル

目次sambaをアンインストールしてインストールする新しい共有パスを作成し、権限を設定するSamba...

Vueの7つの値転送メソッドの詳細な説明

1. 父から息子へ子コンポーネントにpropsフィールドを定義し、その型は配列です (フィールド値の...

vue.js パッケージ化プロジェクトの後の空白ページの解決策

Vueに触れたばかりのパートナーの多くは、開発環境ではVueプロジェクトは正常であるが、パッケージ化...

Spark SQL の 4 つの一般的なデータ ソースの詳細な説明

汎用ロード/書き込みメソッドオプションを手動で指定するSpark SQL の DataFrame イ...

1つの記事でJavaScriptのクロージャ関数について学ぶ

目次変数のスコープ閉鎖の概念クロージャの使用クロージャのデメリット最後に、クロージャのメリットとデメ...

テキストスクロール後の自動停止効果の例

効果は非常にシンプルで、次のコードを自分のページにコピーして実行するだけです。コードをコピーコードは...

HTMLでvueとel​​ement-uiを直接参照する方法

コードは次のようになります。 <!DOCTYPE html> <html> ...

JavaScript で charAt() を使用して、最も頻繁に出現する文字とその出現回数をカウントする方法を教えます。

前回は、JavaScript の charAt() メソッドの使い方を紹介しました。今日は、最も多く...

div+css3 を使用して背景グラデーション ボタンを実装するためのサンプル コード

フロントエンド ページの需要が増加し続けるにつれて、一部のシーンではグラデーションの背景要素が必要に...