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文の最適化の一般的な手順の詳細な説明

推薦する

aタグのname属性とid属性を使用してページ内を移動する方法

以前はaタグのname属性を使ってジャンプする方法しか知らなかったのですが、idも使えることを今日知...

Linux での mysql-5.7.28 インストール チュートリアル

1. 公式ウェブサイトから Linux バージョンをダウンロードします: https://dev.m...

選択タグ内のオプションをクリアする3つの方法

方法1コードをコピーコードは次のとおりです。 document.getElementById(&qu...

ES9の新機能の詳細な説明: 非同期反復

目次非同期トラバーサル非同期反復可能トラバーサル非同期反復生成非同期メソッドと非同期ジェネレーター非...

MySQLのMERGEストレージエンジンの詳細な説明

MERGE ストレージ エンジンは、MyISAM テーブルのグループを論理ユニットとして扱い、同時に...

MySQL 8.0.22.0 のダウンロード、インストール、設定方法のグラフィックチュートリアル

MySQL 8.0.22のダウンロード、インストール、設定方法、参考までに具体的な内容は次のとおりで...

Ubuntu 20.04にvncserverをインストールする方法

Ubuntu 20.04は2020年4月に正式にリリースされました。本日、ミラーシステムを正式にイン...

この記事はJavaScriptの変数とデータ型を理解するのに役立ちます

目次序文:親切なヒント:変数1. 免責事項2. 譲渡3. 2つの小さな文法上の詳細変数の命名規則なぜ...

Vue プロジェクトのパッケージ化と最適化の実装手順

目次Vueプロジェクトのパッケージ化、起動、最適化Vueプロジェクトのパッケージ化プロジェクトホステ...

jsを使用してシンプルな虫眼鏡効果を実現します

この記事では、簡単な虫眼鏡効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な内...

202 無料の高品質 XHTML テンプレート (1)

ここで 123WORDPRESS.COM はこれらのテンプレートの最初の部分を紹介します。各テンプレ...

WHMCS V7.4.2 グラフィカル インストール チュートリアル

1. はじめにWHMCS は、ユーザー管理、請求書の支払い、ヘルプ サービスなど、オンライン ビジネ...

ホストサービスにアクセスするDockerでのサービスの実装

目次1. シナリオ2. 解決策3. 結論4. 参考文献1. シナリオ日常の開発およびテスト作業には ...

3つの主要データベース(Mysql、SqlServer、Oracle)の違いについて簡単に説明します。

マイグレーションアドバンテージ:小型、高速、総所有コストが低い、オープンソース。複数のオペレーティン...

Docker CPU 制限の実装

1. --cpu=<値> 1) コンテナが使用できるCPUリソースの量を指定しますが、コ...