首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker将nginx配置设置为在端口8000上广播

问Docker将nginx配置设置为在端口8000上广播
EN

Stack Overflow用户
提问于 2020-10-08 07:51:39
回答 1查看 3.4K关注 0票数 1

我在一个项目的末尾,我在一个docker容器中有一个Nginx作为路由器,它与端口8000上的测试节点应用程序一起工作,但我需要它指向另一个Nginx Docker组合容器,该容器被设置为运行Django应用程序。我不认为第二个Nginx被配置为在端口8000上运行应用程序,我正在寻求任何建议。

基本上,我一直在遵循两个不同的教程,这就是它们相遇的地方。

以下是我认为您将需要的文件,但您可以随时要求任何其他文件。

docker-compose.prod.yml

代码语言:javascript
复制
version: '3.7'

services:
  web:
    build:
      context: ./dcahill
      dockerfile: Dockerfile.prod
    command: gunicorn dcahill.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - static_volume:/home/dchll/web/staticfiles
      - media_volume:/home/dchll/web/mediafiles
    expose:
      - 8000
    env_file:
      - ./.env.prod
    depends_on:
      - db
  db:
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./.env.prod.db
  nginx:
    build: ./nginx
    volumes:
      - static_volume:/home/dchll/web/staticfiles
      - media_volume:/home/dchll/web/mediafiles
    ports:
      - 1337:80
    depends_on:
      - web

volumes:
  postgres_data:
  static_volume:
  media_volume:

nginx.conf (不是将公共流量定向到8000的主路由器)

代码语言:javascript
复制
upstream dcahill.com {
    server web:8000;
}

server {

    listen 80;

    location / {
        proxy_pass dcahill.com;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
        client_max_body_size 100M;
    }

    location /staticfiles/ {
        alias /home/dchll/web/staticfiles/;
    }

    location /mediafiles/ {
        alias /home/dchll/web/mediafiles/;
    }

}
server {

    listen 443 ssl;

    location / {
        proxy_pass dcahill.com;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
        client_max_body_size 100M;
    }

    location /staticfiles/ {
        alias /home/dchill/web/staticfiles/;
    }

    location /mediafiles/ {
        alias /home/dchll/web/mediafiles/;
    }

}

我主要的nginx路由器配置用于测试节点应用程序是很大的,但是除了SSL和默认的html5模板之外,只有这些设置:

代码语言:javascript
复制
# Redirect all HTTP traffic to HTTPS
server {
    listen 80;
    server_name www.dcahill.com dcahill.com;
    return 301 https://$host$request_uri;
}

# Listen for requests for dcahill on port 443 and return server open on port 8000
server {
listen 443 ssl;
server_name dcahill.com;

location / {
    proxy_pass http://111.222.111.222:8000;
}
}

# Listen for requests for dcahill on port 443 and return server open on port 8000
server {
    listen 443 ssl;
    server_name  www.dcahill.com;

    location / {
        proxy_pass http://111.222.111.222:8000;
    }
}

我的测试节点脚本运行良好,如下所示

代码语言:javascript
复制
const http = require('http')
const port = 8000

const requestHandler = (request, response) => {
  console.log('received request')
  response.end('Hello from app1!')
}

const server = http.createServer(requestHandler)

server.listen(port, (err) => {
  console.log(`server is listening on ${port}`)
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-08 07:58:06

示例docker-compose配置将端口8000映射到80,然后NGINX配置将端口80重定向到443,这不是外部提供的。

您的NGINX服务需要使端口80和443进入容器(它正在侦听这些端口)。

代码语言:javascript
复制
  nginx:
    build: ./nginx
    volumes:
      - static_volume:/home/dchll/web/staticfiles
      - media_volume:/home/dchll/web/mediafiles
    ports:
      - 443:443
      - 80:80
    depends_on:
      - web

然后,NGINX服务将在Docker容器内的8000端口上反向代理到您的应用程序,但8000端口将无法在外部使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64253852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档