クロスドメインの問題を解決するためのNginxの実用的な方法

クロスドメインの問題を解決するためのNginxの実用的な方法

フロントエンドとバックエンドを分離し、nginxを使用してクロスドメインの問題を解決する

フロントエンド: vue.js+nodejs+webpack

舞台裏: SpringBoot

リバースプロキシサーバー: nginx

アイデア: フロントエンド コードをパッケージ化し、nginx が静的リソースを指すようにし、nginx がバックグラウンド リクエストを転送します。

1. フロントエンドコードをパッケージ化します。

npm 実行ビルド

dist フォルダーが生成されます。 index.html ファイルと静的フォルダーが含まれています。パスは、例としてローカルの場所に基づいています。

/ユーザー/xxx/ideaProjects/webtest/dist

2. 開く

/usr/local/etc/nginx ディレクトリの nginx.conf ファイルに、サーバーに次の内容を追加します。

listen 80; #元の8080、競合を避けるため80に変更

  server_name ローカルホスト;

 

  #文字セット koi8-r;

 

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

 

 

  位置 / {

   ルート /Users/xxx/ideaProjects/webtest/dist;

   インデックス index.html;

    

   # これは、Vue、Angular、React が H5 の履歴を使用するときに書き換えの問題を処理するために使用されます。if (!-e $request_filename) {

    最後に ^(.*) /index.html を書き換えます。

    壊す;

   }

  }

 

 

  #プロキシサーバーインターフェースの場所 /api/ {

   proxy_pass http://localhost:8080/;# プロキシインターフェースアドレス}

テスト

フロントエンドはリクエスト http://localhost/test を送信し、vue-router はそれを http://localhost/api/demo/1 にリダイレクトし、実際のアクセスは http://localhost:8080/demo/1 になります。

バックエンドに直接リクエストを送信します。http://localhost/api/demo/1 にアクセスします。実際のアクセスは次のようになります: http://localhost:8080/demo/1

コンテンツ拡張の考え方:

1)。
# プロキシサーバーインターフェース

場所 /api/ {
proxy_pass http://localhost:8080/;# プロキシインターフェースアドレス}

プロキシインターフェースのアドレスは 8080 までしか到達しないので、バックグラウンドプロジェクトの名前が自動的に追加されるのでしょうか? ? ? たとえば、インターフェースは http://148.70.110.87:8080/プロジェクト名/メソッド名です。 。 。

2) リクエストは .js で行われます。Nginx は上記のように設定されていますが、リクエストは http://148.70.110.87/api/index2 404 (Not Found) で失敗します。

axios.post('/api/index2')
.then( (レスポンス) => {
console.log(応答);
})
.catch( (エラー)=> {
コンソール.log(エラー);
});

3). 3 番目のステップであるテストがよくわかりません。関連するコードを提供していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx 構成 クロスドメイン リクエスト Access-Control-Allow-Origin * 詳細な説明
  • Nginx を使用してクロスドメイン Vue 開発環境を処理する方法
  • 無効な Nginx クロスドメイン設定 Access-Control-Allow-Origin の解決策
  • Nginx リバース プロキシを使用してクロスドメイン問題を解決する方法の詳細な説明
  • Nginx を使用してフロントエンドのクロスドメイン問題を解決する方法
  • nginx/apache 静的リソースのクロスドメインアクセスの問題を解決する詳細な説明

<<:  今日と昨日の 0:00 タイムスタンプを取得する MySQL の例

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

推薦する

Msyql トランザクション分離について知っておくべきこと

トランザクションとは何ですか?トランザクションは、データベース管理システムの実行プロセスにおける論理...

nginxリバースプロキシwebSocket設定の詳細な説明

最近、プロジェクトで作業しているときに webSocket プロトコルを使用し、WeChat アプレ...

Windows に MySQL 5.7.18 の解凍バージョンをインストールするチュートリアル

1. インストールプロセスMySQL バージョン: 5.7.18 1. my.ini ファイル(簡易...

ドラッグ効果を実現するための純粋なCSSコード

目次1. ドラッグ効果の例2. CSS実装の原則3. CSS実装の詳細4. CSSレイアウト1. 固...

Vue ローカルコンポーネントデータ共有 Vue.observable() の使用

コンポーネントが詳細になるにつれて、複数のコンポーネントが状態を共有する状況に遭遇するでしょう。Vu...

HTMLウェブページの基本概念の簡単な分析

ウェブページとは何ですか? HTML ドキュメントがブラウザカーネルによってレンダリングされた後に表...

さまざまなターミナルで Mac が SSH 経由でリモート サーバーに接続する方法の説明

Macはシェル(ターミナル)SSHを使用してリモートサーバーに接続します前提条件: 接続する必要があ...

MySQL インデックスの一般的な問題の概要

Q1: データベースにはどのようなインデックスがありますか?メリットとデメリットは何ですか? 1. ...

MySQL で最大接続数を正しく変更する 3 つの方法

MySQL データベースをインストールすると、デフォルトの MySQL データベースの最大接続数が ...

CentOS6.9+Mysql5.7.18 ソースコードのインストール詳細チュートリアル

CentOS6.9+Mysql5.7.18 ソースコードのインストールでは、以下の操作を root ...

JavaScript の Set データ構造の詳細な説明

目次1. セットとは何か2. セットコンストラクタ2.1) 配列2.2) 文字列2.3) 議論2.4...

VirtualBox は CentOS7 仮想マシンと拡張ツールをインストールします (画像とテキスト)

コンピュータシステム: win7この記事は主に写真に基づいており、多くの写真が含まれていますCent...

LinuxシステムにおけるMySQLの一般的な操作コマンド

仕える: # chkconfig --list すべてのシステムサービスを一覧表示する# chkco...

言及すべき8つのMySQLの落とし穴を共有する

MySQL はインストールが簡単で、高速で、豊富な機能を備えています。これはオープンソース運動のベン...

入力ボックスの値を取得する方法のReactの例

入力ボックスの値を取得する複数の方法最初の方法は、制御されていないコンポーネントの取得です2番目の方...