nginx逆エージェントはドメインをまたぐ問題を処理する.


原文のリンク:https://ssshooter.com/2019-05...
逆エージェントは何ですか?
二つの神図を置いて、写真はここから来ます.
これはプロキシです
これは逆プロキシです
  • 順エージェントはあなたが要求を出す時にプロキシを経由します.
  • リバースプロキシは「ターゲットサーバのプロキシ」です.ターゲットサーバのプロキシを要求して、いくつかの処理をしてから本当に要求します.
  • この記事では、逆エージェントがドメイン間問題を処理するために使用されます.
    テスト環境のクロスドメイン
    module.exports = {
      publicPath: '/',
      devServer: {
        proxy: {
          '/wiki': {
            target: 'http://xxx.com.cn', //         
            pathRewrite: { '^/wiki': '' }, //       
            ws: true, //      websockets
            changeOrigin: true,
          },
        },
      },
    }
    私達の不思議なwebpackにはテストのクロスドメインを実現するためのプラグインがあります.みんながよく知っていると信じています.本質的にはこのプラグインの機能はhttp-proxy-middlewareから来ています.
    *change Originについて:このオプションの役割は本当に分かりません.コードを見るとheadersのhostフィールドを変えたようですが、実際にはtrueとfalseテストに変更されました.要求ヘッドは変わっていないようです.しかし、以前のプロジェクトの中では、このオプションをtrueに設定しないと正常にクロスできない場合がありますので、念のためにtrueを設定します.この問題はとりあえず置いてください.あるいは皆さんが知っているなら、コメントエリアでOTLを指導してください.
    //    
    if (options.changeOrigin) {
      outgoing.headers.host =
        required(outgoing.port, options[forward || 'target'].protocol) &&
        !hasPort(outgoing.host)
          ? outgoing.host + ':' + outgoing.port
          : outgoing.host
    }
    上記の構成に従って試験環境を起動した後、直接ブラウザ入力http://localhost/wiki/rest/api/2/user/pickerはアクセスhttp://xxx.com.cn/rest/api/2/user/pickerに等しい.
    インテンxで設定
    前の普通アドレスの設定を連動させてください.
    今回の配置では前回の相対位置の理解が難しくないです.書き方はすべてnodeの配置と同じです.二つだけ必要です.
    location /wiki/ {
        rewrite ^/wiki/(.*)$ /$1 break;
        proxy_pass http://xxx.com.cn;
    }
    rewriteの文法は(文書から):rewrite regex replaccement[flags]です.
    したがって、上記の効果は、^/wiki/(.*)$に一致し、次いで、/に一致する括弧の後の部分ブロックに置換される.
    上記の構成によれば、nginx ./nginx -s reloadが再開され、直接ブラウザ入力http://localhost/wiki/rest/api/2/user/pickerがアクセスhttp://xxx.com.cn/rest/api/2/user/pickerに等しいです.
    付加的正則小知識
    実は$1はJavaScriptの正則でも使えます.
    let reg = /^\/wiki\/(.*)$/
    '/wiki/2111edqd'.replace(reg, '$1')
    // => 2111edqd
    ここでは、括弧の役割はブロックをマッチングさせることです.比較としてもう一つ例を挙げます.
    let reg = /^\/wiki\/(.*)$/
    let reg2 = /^\/wiki\/.*$/
    //                     
    //     match           
    '/wiki/2111edqd'.match(reg)
    //    ["/wiki/2111edqd", "2111edqd", index: 0, input: "/wiki/2111edqd", groups: undefined]
    '/wiki/2111edqd'.match(reg2)
    //    ["/wiki/2111edqd", index: 0, input: "/wiki/2111edqd", groups: undefined]
    reg出力の配列の2番目のパラメータは、いわゆる$1であり、後に他の括弧パケットがあると$2$3がありますが、括弧をつけないと存在しません.
    さようなら