node.js - 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 错误。不确定这是否可以工作,或者如果可以,如何解决。
- nodejs 应用程序在 8080 上侦听(没有指定主机,没有 SSL)
- Nginx 监听 example.com 的 80 和 443,但将所有 http (80) 请求重定向到 https (443)
- Nginx 在 443 上监听 sub.example.com。
码头工人-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;
}
}
解决方案
推荐阅读
- python - 简单的 ping 扫描程序可以运行但也有错误
- bash - 部署和 ConfigMap 有什么关系?
- reactjs - 如何以网格布局显示视频并在按下 React Native 时播放
- graphql - 如何验证或检测 graph-ql java 中的附加请求参数?
- android - “R”或“资源”在 Android Studio 中给我错误
- python - 如何通过点击而不是语音触发 Alexa 意图?
- json - json 文件在网页上的“< >”内不显示字符串(例如“abc
") - spring - 无法解析原型
- android - Flutter 永久隐藏导航栏
- php - 如何将数据库中的数据显示到 sb-admin 模板?