首页 > 解决方案 > nginx反向代理nodejs

问题描述

我想要:(1) https://example.com使用 SSL 提供静态内容(2)使用 SSL https://sub.example.com/myapp提供来自 NodeJS 的动态内容。

我有一个域 example.com 和一个子域 sub.example.com。我有一个 Docker 容器,里面有 nginx 和一个 nodejs 应用程序。在数字海洋上使用 Ubuntu。

我收到 502 Bad Gateway 错误。不确定这是否可以工作,或者如果可以,如何解决。

码头工人-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;
    }
}

标签: node.jsdocker-composenginx-reverse-proxy

解决方案


推荐阅读