Обратный прокси-узел nginx - PullRequest
       27

Обратный прокси-узел nginx

0 голосов
/ 13 октября 2019

Я хочу: (1) https://example.com для обслуживания статического контента с использованием SSL (2) https://sub.example.com/myapp для обслуживания динамического контента из NodeJS с использованием SSL.

У меня есть домен example.com и одна субдомен sub.example.com. У меня есть Docker-контейнер, в котором есть nginx и приложение nodejs. Использование Ubuntu в Digital Ocean.

Я получаю 502 ошибки Bad Gateway. Не уверен, что это МОЖЕТ работать или, если может, как это исправить.

  • Приложение nodejs прослушивает 8080 (без указания хоста, без SSL)
  • Nginx прослушивает 80 и443 для example.com, но перенаправляет все запросы http (80) на https (443)
  • Nginx прослушивает 443 для sub.example.com.

docker-compose.yml:

version: '3'

services:
  nginx:
    image: nginx:1.15-alpine
    restart: unless-stopped
    volumes:
      - ./data/nginx:/etc/nginx/conf.d
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
      - ./data/nginx/html:/etc/nginx/html
    ports:
      - "80:80"
      - "443:443"
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
  node:
    image: node:11
    volumes:
      - ./data/node:/usr/local/src/node
    ports:
      - "8080:8080"
    working_dir: /usr/local/src/node/myapp
    command: node server.js

nginx.conf:

server {
    listen 80;
    server_name example.com;
    server_tokens off;

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

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

server {
    listen 443 ssl;
    server_name example.com;
    server_tokens off;

    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 /myapp {
        proxy_pass  http://localhost:8080;
    }
}
...