首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为两个不同的项目配置nginx (两个不同的码头组合文件)

问如何为两个不同的项目配置nginx (两个不同的码头组合文件)
EN

Stack Overflow用户
提问于 2021-04-29 20:09:00
回答 1查看 341关注 0票数 0

我有两个项目:

  1. 服务于所有api调用的myapi
  2. 使用myapi的django_web。

但是,如果我将它们放在两个不同的服务器上--它们工作得很好(因为它们完全独立),我希望它们都位于同一台服务器上(名:www.example.com),但我无法理解它们如何能够共享相同的nginx。我正在使用docker,它抱怨0.0.0.0:443已经在使用了。

myapi nginx配置:

代码语言:javascript
复制
upstream flask_server {    
   server flaskapp2:8000;
}


server {
  listen 80;
  server_name example.com;

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

server {
listen 443 ssl;
 
server_name example.com;

location / {
    proxy_pass http://flaskapp2:8000;
    proxy_redirect     off;
    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Host $server_name;       
    proxy_no_cache 1;
    proxy_cache_bypass 1; 
}

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

对于django_web来说

代码语言:javascript
复制
server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;        
}


server {
 client_max_body_size 20M;
 listen 443 ssl;
  server_name example.com;

  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location /static/ {
      alias /www/static/;
    }

    location /websocket/ {
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   #proxy_pass http://$server_name:8080/websocket/my_random_number/;
   proxy_pass http://$server_name:8080;

 }



location / {
     proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-Port $server_port;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://$server_name:8080;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

}}

myapi的码头设置:

代码语言:javascript
复制
  nginx:
image: "nginx:1.13.5"
ports:
  - "80:80"
  - "443:443"
volumes:
  - ./config/nginx/conf.d:/etc/nginx/conf.d
  - ./static:/static
  - /etc/letsencrypt:/etc/letsencrypt/ 
restart: always
networks:
  - my_network
depends_on: 
  - flaskapp2
container_name: hnginx

对于django_web:

代码语言:javascript
复制
  nginx:
    restart: always
    image: "nginx"
    container_name: hnginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./config/example:/etc/nginx/conf.d
      - ./static2:/static
      - ./media2:/media
      - .:/www
      - /etc/letsencrypt:/etc/letsencrypt/ 
      - ./config/html_pages:/usr/share/nginx/html
    networks:
      - hnetwork
EN

回答 1

Stack Overflow用户

发布于 2021-04-29 20:15:02

如果您想使用容器处理同一个主机上的共享端口,我建议您使用一个名为特雷菲克的中间件服务。

把Nginx的两项服务放在Traefik后面。Traefik会按照域名或路径前缀规则,在443上将您的web请求路由到良好的服务。

下面是一个简短的码头组合实施建议:

代码语言:javascript
复制
myapi:
  [Your configuration]
  expose:
    - 80
    - 443
  labels:
    - [Traefik configuration labels here]

django:
  [Your configuration]
  expose:
    - 80
    - 443
  labels:
    - [Traefik configuration labels here]

traefik:
  [Traefik configuration]
  ports:
     # single access point on 443 that route incoming request
     - 443:443
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67324412

复制
相关文章

相似问题

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