微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

连接到上游时 Nginx connect() 失败111:连接被拒绝

如何解决连接到上游时 Nginx connect() 失败111:连接被拒绝

我正在尝试使用 Nginx 将 MERN 应用程序部署到 DigitalOcean Droplet(我已使用连接字符串连接到 MongoDB 图集实例)。前端静态文件似乎成功运行,但在后端(Nodejs/express 应用程序)方面我面临两个问题。 首先,对于从前端到后端的每个请求,我都会收到 connect() 失败(111:连接被拒绝)

2021/07/12 23:54:32 [error] 5101#5101: *394 connect() Failed (111: Connection refused) while 
connecting to upstream,client: "My Ip",server: "example.com",request: "GET 
/api/images HTTP/1.1",upstream: "http://127.0.0.1:5000/images",host: "example.com",referrer: "https://example.com/"

其次,我在尝试通过 Postman 检查路由时遇到 404 Not Found Nginx/1.14.0 (Ubuntu) 错误。 不确定这两个是同一个问题。

这是我在 /etc/Nginx/sites-available/default 中的 Nginx 配置:

server {
    root var/www/html;
    index index.html index.htm index.Nginx-debian.html;
    server_name example.com www.example.com;

    location /api/ {
        proxy_pass http://localhost:5000/;
    }

    location / {
        root /home/${my_non_root_user}/frontend/deploy;
        try_files $uri /index.html;
    }

    listen [::]:443 SSL ipv6only=on; #managed by Certbot
    listen 443 SSL; #managed by Certbot
    ssl_certificate /etc/letsencrypt/live/${example.com}/fullchain.pem; #managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/${example.com}/privkey.pem; #managed by Certbot
    include /etc/letsencrypt/options-ssl-Nginx.conf; #managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; #managed by Certbot
}

server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } #managed by Certbot

    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } #managed by Certbot

        listen 80 default_server;
        listen [::]:80 default_server;

        server_name example.com www.example.com;
    return 404; #managed by Certbot
}

这是我的后端 server.js 的样子:

import express from 'express'
import path from 'path'
import dotenv from 'dotenv'
import connectDB from './config/db.js'

import memberRoutes from './routes/memberRoutes.js'
import messageRoutes from './routes/messageRoutes.js'
import fileRoutes from './routes/fileRoutes.js'

dotenv.config()

connectDB()

const app = express()

app.use(express.json())

// routes
app.use('/api/members',memberRoutes)
app.use('/api/messages',messageRoutes)
app.use('/api/files',fileRoutes)

const __dirname = path.resolve()
app.use('/files',express.static(path.join(__dirname,'/files')))

const PORT = process.env.PORT || 5000

app.listen(
  PORT,console.log(`Server running in ${process.env.NODE_ENV} mode on port 
  ${PORT}`)
)

当我在 Postman 中向 {{URL}}/messages 发出请求时(与 GET 或 POST 没有区别),其中 {{URL}} 是 THE_IP_TO_DROPLET,我得到了这个输出

<HTML>

  <head>
    <title>404 Not Found</title>
  </head>

  <body bgcolor="white">
    <center>
      <h1>404 Not Found</h1>
    </center>
    <hr>
    <center>Nginx/1.14.0 (Ubuntu)</center>
  </body>

</html>

你有什么建议吗?整个周末都被困在这里

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。