首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx反向代理(在Docker中)到web应用程序(也在Docker中)

Nginx反向代理(在Docker中)到web应用程序(也在Docker中)
EN

Stack Overflow用户
提问于 2019-05-09 21:27:36
回答 1查看 219关注 0票数 0

我已经在docker中设置了一个web应用程序,它当前在主机172.19.0.3:8888的内部运行。我希望这个web应用程序可以通过互联网端口443 (https)访问,并将请求重定向到端口80 (HTTP)到443。

我计划在docker容器中使用Nginx反向代理来实现这一点,但我不知道如何正确配置它以指向docker容器172.19.0.3:8888。从主机访问http://172.19.0.3:8888是可行的。

这是我试图遵循的指南,但它并没有显示如何具体地指向docker容器。

https://medium.com/@pentacent/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71

备注

如果我将端口443 proxy_pass设置为http://example.org,它将正常工作。因此,Cert配置工作正常。

Web应用程序

在主机内部的172.19.0.3:8888上运行

docker-compose for Nginx和Certbot

我的证书都没问题了。

代码语言:javascript
复制
version: '3'
services:
  nginx:
    image: nginx:1.15-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Volumes/nginx:/etc/nginx/conf.d
      - ./Volumes/certbot/conf:/etc/letsencrypt
      - ./Volumes/certbot/www:/var/www/certbot
  certbot:
    image: certbot/certbot
    volumes:
      - ./Volumes/certbot/conf:/etc/letsencrypt
      - ./Volumes/certbot/www:/var/www/certbot

Nginx app.conf

代码语言:javascript
复制
server {
    listen 80;
    server_name forums.example.com;

    location /.well-known/acme-challenge/ {
    root /var/www/certbot;
}

    location / {
       return 301 https://$host$request_uri;
    }    
}

server {
    listen 443 ssl;
    server_name forums.example.com;

    ssl_certificate /etc/letsencrypt/live/forums.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/forums.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://172.19.0.3:8888/;
    }
}

Web应用程序

代码语言:javascript
复制
  flarum:
    image: mondedie/docker-flarum:0.1.0-beta.8.1-stable
    container_name: flarum
    env_file:
      - ./flarum.env
    volumes:
      - ./Volumes/assets:/flarum/app/public/assets
      - ./Volumes/extensions:/flarum/app/extensions
      - ./Volumes/nginx:/etc/nginx/conf.d
    depends_on:
      - mariadb

  mariadb:
    image: mariadb:10.2
    container_name: mariadb
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=flarum
      - MYSQL_USER=flarum
      - MYSQL_PASSWORD=password
    volumes:
      - ./Volumes/mysql/db:/var/lib/mysql
EN

回答 1

Stack Overflow用户

发布于 2019-05-09 22:04:52

Docker Compose为docker-compose.yaml文件创建了一个独立的网络。

因此您可以将web应用程序作为服务(例如: webapp)添加到当前组合文件中。并在nginx.conf中直接指向您的服务。您可以使用服务名称作为DNS,而不是使用IP,该DNS将由Docker针对同一网络进行解析。

代码语言:javascript
复制
 location / {
        proxy_pass http://webapp:8888/;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56060513

复制
相关文章

相似问题

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