Docker环境下Nginx启用HTTPS时出现500错误排查求助
Docker部署HTTPS访问500错误排查
问题背景
正在学习Docker工作原理,尝试容器化部署应用,目前Nginx、Redis、数据库服务均正常运行。已为服务配置SSL相关环境变量:
environment: - VIRTUAL_HOST=mydomain.com - LETSENCRYPT_HOST=mydomain.com - LETSENCRYPT_EMAIL=xxx
HTTP访问HTML页面正常,但HTTPS访问时出现500错误。服务器/var目录下日志无报错,仅在容器日志中看到以下记录:
nginx.1 | test.xxx.com xxx.x.xxx.xxx - - [10/Dec/2022:06:05:20 +0000] "GET /favicon.ico HTTP/2.0" 500 177 "https://test.xxx.com/dummy-html.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0"
docker-compose.yaml配置
version: '2' x-logging: &default-logging logging: driver: json-file options: max-size: 100m services: nginx: image: jdj/latest volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - ./srv/nginx/vhost.d:/etc/nginx/vhost.d - ./srv/nginx/html:/usr/share/nginx/html - ./srv/ssl_certs:/etc/nginx/certs:ro ports: - "80:80" - "443:443" <<: *default-logging restart: always letsencrypt: image: jdj/jrcs-letsencrypt-nginx-proxy-companion:2.0 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./srv/ssl_certs:/etc/nginx/certs:rw volumes_from: - nginx <<: *default-logging restart: always server: image: jdj/jdj:1.13.0 environment: - VIRTUAL_HOST=mydomain.com - LETSENCRYPT_HOST=mydomain.com - LETSENCRYPT_EMAIL=xxx volumes: - ./jdj.conf:/jdj.conf:ro privileged: true <<: *default-logging restart: always workers: image: jdj/jdj:1.13.0 command: ["./scripts/workers"] volumes: - ./jdj.conf:/jdj.conf:ro privileged: true <<: *default-logging restart: always db: image: postgres:13.0 env_file: jdj.conf volumes: - postgres-data:/var/lib/postgresql/data/ <<: *default-logging restart: always redis: image: redis:6.0 command: [ "bash", "-c", 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' ] env_file: jdj.conf volumes: - redis-data:/data <<: *default-logging restart: always volumes: postgres-data: redis-data:
排查建议与详细日志查看方法
一、获取更详细的Nginx错误日志
- 进入Nginx容器内部:
docker exec -it <nginx-container-name-or-id> /bin/bash - 查看Nginx默认错误日志:
或实时监控日志变化:cat /var/log/nginx/error.logtail -f /var/log/nginx/error.log - 如果找不到上述日志,检查Nginx主配置文件(
/etc/nginx/nginx.conf)或虚拟主机配置文件(/etc/nginx/vhost.d/mydomain.com)中的error_log指令,确认日志存储路径。
二、检查SSL证书状态
- 验证证书生成情况:
确认存在ls -la ./srv/ssl_certs/mydomain.com.crt、mydomain.com.key等证书文件。 - 检查证书文件权限:
权限需至少为ls -l ./srv/ssl_certs/mydomain.com.*644,确保Nginx容器能读取证书。
三、验证Nginx配置有效性
- 测试Nginx配置文件是否合法:
若配置有误,会返回具体错误提示。docker exec <nginx-container-name-or-id> nginx -t - 查看虚拟主机的HTTPS配置,确认证书路径、SSL协议等参数是否正确。
四、检查后端服务日志
查看server容器的日志,确认HTTPS请求是否正常转发到后端服务:
docker logs <server-container-name-or-id>
内容的提问来源于stack exchange,提问作者Umesh Awasthi
相关产品推荐
相关产品推荐

