Express apiインターフェイスはすべて404ですが、/ *と一致する可能性があります(nginx構成の問題)

expressによって記述されたフロントエンドインターフェイス、要求パスが正しい、または404が返されます。

シナリオ:Tencent Cloudサーバーcentosのポート2020(任意のポート)でexpressによって記述されたフロントエンドインターフェイスを実行しており、WeChat公式アカウント(またはアップルト)が呼び出すために、サーバーnginxを介してこのポートをポート443にリバースプロキシしたいと考えています。

問題:エクスプレスインターフェイスは完全に正常ですが、構成が完了すると、リクエストインターフェイスは404を返しますが、app.get( '/ *'、(req、res)=> {res.json({code :400、データ: 'hahahahahahaha'})})、リクエストインターフェイスは 'hahaha'を返し、他のインターフェイスは404です

エクスプレスインターフェースファイル:

const express = require('express')
const app = express()

app.get('/api/getname', (req, res) => {
  console.log('aaaaaa')

  res.json({
    code: 200,
    data: 'aaaaaaaaa',
  })
})

app.post('/api/get', (req, res) => {
  console.log('post====get')

  res.json({
    code: 200,
    data: 'namenannnaaa',
  })
})

app.get('/*', (req, res) => {
  console.log('get*///')

  res.json({
    code: 400,
    data: '哈哈哈哈哈',
  })
})

app.listen(2020, () => {
  console.log('Server has started.port on 2020')
})

Nginx構成:

server {
    listen       443 ssl;
    server_name  program.test.com;

    # ....省略配置

    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
    }
    location /program/ { # 微信公众平台接口测试
        proxy_pass http://127.0.0.1:2020; # !!!重点,就是这里导致出了问题!!!
        proxy_redirect off;
    }
}

上で構成したように、ブラウザーにhttps://program.test.com/program/api/getnameと入力  すると、インターフェイス構成で/ *のコンテンツのみが返されますが、/ api / getnameのコンテンツと正しく一致することはできません。

この問題は土曜日全体を悩ませました、そして私は以下を試みました:

1.最初は、エクスプレスインターフェイスファイルが間違って書かれていると思いました。何度も確認した後、公式ウェブサイトからデモを試しましたが、すべて404でした。この原因を取り除きます。

2.コアフレームワークに変更してインターフェイスを記述します。これは機能しません。インターフェイスも404allを返します。これは、/ *との照合後にのみ、/ *のコンテンツを返し、フレームワークの問題を解消します。

3.ポートを開き、2020ポートを直接使用し、nginxプロキシを使用しないでください。ここでは、サーバーファイアウォールで2020ポートを解放し、サーバーコンソールのセキュリティグループで2020ポートを開く必要があります。構成後、http:/を直接使用し ます。 /program.test.com:2020 / program / api / getname、直接アクセスできないことが判明しました。

ははは、この時点でパスが間違っているので、赤でマークされたプログラムhttp://program.test.com:2020/api/getnameを削除するだけです。ここで、ようやくデータにアクセスして正常に戻りました。 aaaaaa '、それはapiが完全に大丈夫であることを意味します、そして問題はnginx構成でなければなりません(私はエクスプレスを非難しました)

4.問題を解決します

nginxの構成をもう一度確認したところ、手がかりが見つかりました。上記のnginxの構成を確認してください。

ここでは、proxy_pass http://127.0.0.1:2020の後に/を追加する必要があります。理由については、ここを参照してください。  

に:

location /program/ { # 微信公众平台接口测试
    proxy_pass http://127.0.0.1:2020/; # 以 / 结尾,就不会匹配接口文件中以 /program/ 开头
    proxy_redirect off;
}

このように、nginx -sreloadを実行してnginxを再起動することを忘れないでください

次に、https:   //program.test.com/program/api/getnameを介して 最終的に「aaaaaa」を正常に返すことができます。

おすすめ

転載: blog.csdn.net/RedaTao/article/details/108305853