nginx перенаправить вызов api с https на http - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь настроить приложение Dockerised Mern, защищенное с помощью ssl. До сих пор мне удалось обслужить свое приложение для реагирования через контейнер nginx, но теперь у меня проблемы с моим серверным интерфейсом api.

, если моя веб-страница отправляет запрос https в мой nginx контейнер, как я могу взять этот запрос, понизить его до http, отправить в контейнер api и безопасно вернуть ответ? это даже предпочтительный подход?

my Nginx conf

server {
  listen 80;
  server_name  example.com;

  location /.well-known/acme-challenge/ {
    root /var/www/certbot;
  }
  location / {
    return 301 https://$host$request_uri;
  }    
}
server {
  listen 443 ssl;
  server_name  example.com;

  root /var/www/html/build;

  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;


  location / {
    index index.html
    try_files $uri $uri/ @backend;
  }
  location /login {
    return 301 https://$host;
  }
  location @backend {
    proxy_pass https://example.com;
  }

my docker -compose.yml

  version: '3.7'

  services:
    nginx:
      image: nginx:1.15-alpine
      ports:
        - "80:80"
        - "443:443"
      volumes: 
        - ./data/build:/var/www/html/build
        - ./data/nginx:/etc/nginx/conf.d
        - ./data/certbot/conf:/etc/letsencrypt
        - ./data/certbot/www:/var/www/certbot
  
    certbot:
      image: certbot/certbot
      volumes:
        - ./data/certbot/conf:/etc/letsencrypt
        - ./data/certbot/www:/var/www/certbot

    backend:
      container_name: backend
      restart: unless-stopped
      build: ./api
      ports:
        - '3001:3001'
      env_file: ./api/.env
      environment:
        - NODE_ENV=production

1 Ответ

0 голосов
/ 04 августа 2020

Мне удалось найти решение моей проблемы. Я изменил docker -compose.yml на: version: '3.7'

services:
  nginx:
    image: nginx:1.15-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes: 
      - ./data/build:/var/www/html/build
      - ./data/nginx:/etc/nginx/conf.d
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    links: 
      - backend
  
  certbot:
    image: certbot/certbot
    volumes:
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot

  backend:
    container_name: backend
    restart: unless-stopped
    build: ./api
    ports:
      - '3001:3001'
    env_file: ./api/.env
    environment:
      - NODE_ENV=production

и my nginx conf на:

server {
    listen 80;
    server_name example.com;

    location /.well-known/acme-challenge/ {
    root /var/www/certbot;
    }
    location / {
        return 301 https://$host$request_uri;
    }    
}
server {
    listen 443 ssl;
    server_name example.com;
    
    root /var/www/html/build;

    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;


    location / {
        index index.html
        try_files $uri $uri/ @backend;
    }
    location /login {
        return 301 https://$host;
    }
    location @backend {
        proxy_pass https://example.com;
    }

    location /api/ {
        proxy_pass http://backend:3001/api/;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...