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

推薦する

HTML の左右レイアウトのサンプルコード

CS: ...コードをコピーコードは次のとおりです。 html,body{ margin:0px; ...

Docker はクラスター MongoDB 実装手順を構築します

序文会社の業務上のニーズにより、独自の MongoDB サービスを構築する予定です。MongoDB ...

Ubuntuがインターネットに接続できない場合の解決策

問題の説明:デスクトップ コンピューターとキャンパス ネットワークを使用して、有線モードでインターネ...

Linux カーネル デバイス ドライバー カーネル リンク リストの使用上の注意

/******************** * カーネルにおけるリンクリストの応用********...

Vue は携帯電話の認証コードによるログインを実装します

この記事では、携帯電話認証コードログインを実装するためのVueの具体的なコードを参考までに共有します...

Vueでlessを使用する問題を解決する

1. less依存関係をインストールします: npm install less less-loade...

MySQLビューの原理と使用法の詳細な説明

この記事では、例を使用して MySQL ビューの原理と使用方法を説明します。ご参考までに、詳細は以下...

mysql8.0.23 msi インストールの超詳細なチュートリアル

1.MySqlをダウンロードしてインストールする公式ウェブサイトからMySqlデータベースをダウンロ...

HTML タグ sup と sub の応用の紹介

HTML タグ: 上付き文字HTML では、<sup> タグは上付き文字のテキストを定義...

CSS3は水平方向の中央揃え、垂直方向の中央揃え、水平方向と垂直方向の中央揃えのサンプルコードを実装しています。

フロントエンドの担当者であれば、面接でも仕事中でも、「CSS を使用して中央揃えにする」という効果に...

Ubuntu の Python で C/C++ メソッドを呼び出すダイナミック リンク ライブラリの詳細な説明

ブーストをインストールPython から C/C++ を呼び出す方法はたくさんあります。この記事では...

mysqlは2つ以上のフィールドがNULLであるレコードを見つける問題を解決します

コアコード /*-------------------------------- 2つ以上のフィール...

MySQL の昇順および降順データソートの実装

データの昇順、降順ソート1. フィールド名による単一フィールドのソート順機能:どのフィールドを基準に...

HTMLページの文字セットを指定する2つの方法

1. HTMLページの文字セットを指定する2つの方法方法1: <メタ文字セット="u...

Weibo の一括フォロー解除機能を実装する JavaScript コード

Weibo ユーザーのフォローを一括で解除するクールな JavaScript コードWeibo には...