配置本地运行的nginx,为本地运行docker容器的端口提供服务

配置本地运行的nginx,为本地运行docker容器的端口提供服务

嗨,这可能是一个新手问题。

我正在尝试复制使用 nginx 作为 Web 服务器时出现的 502 bad gateway 错误。我在本地运行 Ubuntu 20.04.6 LTS 虚拟机,并在该虚拟机上使用以下命令新安装了 nginx

sudo apt-get install nginx

然后

nginx -v返回

nginx version: nginx/1.18.0 (Ubuntu)

并通过命令验证它正在运行

systemctl status nginx这表明它正在运行。

然后我用一个简单的Dockerfile创建了一个docker容器:

# Use the official Node.js image with Alpine Linux as the base image
FROM node:14-alpine

# Set the working directory in the container
WORKDIR /usr/src/app

# Copy package.json and package-lock.json to the working directory
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy the rest of the application code to the working directory
COPY . .

# Expose the port that the app will run on
EXPOSE 9000

# Define the command to run your application
CMD ["node", "app.js"]

这是 app.js 文件

// app.js
const express = require('express');
const app = express();
const port = 9000;

app.get('/', (req, res) => {
  res.send('<h1>Hello, Docker World!</h1>');
});

app.listen(port, () => {
  console.log(`App listening at http://localhost:${port}`);
});

当我访问 localhost:9000 时,它会返回网页“Hello, Docker World!”

接下来我想使用 nginx web 服务器为这个 localhost:9000 提供服务。然后我将关闭 docker 容器,以尝试从 nginx web 服务器生成坏网关错误响应。

答案1

首先,打开位于 /etc/nginx/sites-enabled/default 的配置文件。

检查文件的内容;您会很容易找到location /。在文件内添加以下三行代理行location /

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://localhost:9000;
}

然后,重新启动 Nginx 服务,一切就绪了。

systemctl restart nginx

查看有关 Nginx 反向代理的案例研究教程:如何通过示例设置 Nginx 反向代理服务器”

答案2

您需要将docker容器9000端口绑定到您的localhost。使用以下命令进行绑定。

docker run -d -p 9000:9000 <your_container_image> 

答案3

您是否在 nginx 配置中添加了这些行来配置从 9000 到 80 端口的反向代理。

location /some/path/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:8000;
}

如果已经添加了此共享您的nginx -t命令输出并检查您的日志

相关内容