nginxは同じドメイン名で、2つのnodejsプロジェクトを共存させます.

4448 ワード

プロジェクトの背景:
1、公式サイトは改版が必要で、nodejs nuxtフレームを使って再構築します.
2、公式サイトの改版は全部完成していませんが、オンラインのトップページが必要です.
 
プロジェクトの需要:
1、トップページの内容を新しい項目として表示させる
2、古い公式サイトの内容を訪問することができます.
3、トップページのドメイン名はwww.n.comでなければなりません.
 
このようにすれば、いくつかの問題を引き出します.例えば、私のnginx配置の後端は現在7100ポートですが、新しいプロジェクトのポートは3000です.もし私が直接にlocation/port:3000を交替すれば、きっと古い公式サイトのプロジェクト404に変えられます.
旧公式サイトのnginxの設定は以下の通りです.
server {
    listen  80;
    listen  443 ssl;
    server_name www.n.com 
    include      ssl/niu.com;
    include      error/40x;
    include      error/50x;
    location / {
        proxy_pass http://127.0.0.1:7100;
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
  
解決プロセス:
nginxから始めて、最初に試したのはもう一つのレイヤーを書くことです.locatin=/   prot=3000    location/port=7100
このように解決するのは比較的に便利な解決策で、まず3000ポートにマッチングし、3000ポートがマッチングしないと7100ポートに行きます.配置ファイルは以下の通りです.
server {
    listen  80;
    listen  443 ssl;
    server_name www.n.com 
    include      ssl/niu.com;
    include      error/40x;
    include      error/50x;
    location = / {
        proxy_pass http://127.0.0.1:3000;
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    location / {
        proxy_pass http://127.0.0.1:7100;
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}  
でも!このような解決策は配置に成功しましたが、私の先端はnuxtフレームを使っていますので、このフレームには比較的穴のあるaxiosプラグインがあります.
このプラグインはデッドドメインを書く必要があります.私が書いたのはwww.n.comです.彼はdnsでwww.n.comがあるかどうか検索してみます.見つけたら、自分のnodeプロセスにもマッチして、やっとアクセスできます.そうでなければ、エラーを報告します.
 
したがって、このようなLocation優先度の設定に基づいて、私がLocation=/port=3000というモードを書いたら、バックエンドのnodeが直接に切られます.つまり、会報404はページにアクセスできません.
このような方法はnuxtフレームでは実現できません.
 
この時は第二の解決策が必要です.
inxが404にマッチングすると、自動的に古い公式サイトで検索します.もし検索されたら、結果が返ってきます.
以下のように設定します
    location / {
        proxy_pass http://127.0.0.1:3000;
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        #     ,       2019.06.02
        error_page 404 = @old_niu;
    }
    #     ,       2019.06.02
    location @old_niu{
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:7100;
        #             

     }
このように、まず新しい公式サイトに行ってマッチングして、404を間違えたら古い公式サイトに行っても解決策を計算します.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
def ver_keys=''bash'-','curl'http://oss.niu.local/tar/prod/shop-api/sydney/sydney.list |head-n 20']ver_keys.execute().text.tokenize(')
 
転載先:https://www.cnblogs.com/howtobuildjenkins/p/10978875.html