【问题标题】:How to run Nginx + SSL in docker?如何在 docker 中运行 Nginx + SSL?
【发布时间】:2021-03-06 10:53:51
【问题描述】:

此配置在没有 docker 的情况下进行了测试。 SSL 上的站点在没有错误的情况下启动。现在,当我想在 docker 中运行此服务器配置时,我在安装过程中没有收到任何错误,但服务器根本没有启动。

nginx.dockerfile

    FROM nginx:stable-alpine

RUN mkdir -p /var/www/html
WORKDIR /var/www/html
RUN addgroup -g 1000 laravel && adduser -G laravel -g laravel -s /bin/sh -D laravel

RUN chown laravel:laravel /var/www/html

COPY ./nginx/ssl/mysite.ru/mysite_ru.crt /etc/nginx/ssl/mysite.ru/mysite_ru.crt
COPY ./nginx/ssl/mysite.ru/mysite_ru.key /etc/nginx/ssl/mysite.ru/mysite_ru.key

RUN apk update \
&& ln -sf ./nginx/ssl/mysite.ru /etc/nginx/ssl/mysite.ru

ADD ./nginx/nginx.conf /etc/nginx/nginx.conf
ADD ./nginx/default.conf /etc/nginx/conf.d/default.conf

./nginx/ssl/mysite_com 文件夹包含工作文件:mysite_com. crtmysite_com.key 此文件在没有 docker 的情况下检查

docker-compose.yml

services:
  site:
    build:
      context: .
      dockerfile: nginx.dockerfile
    container_name: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./src:/var/www/html:delegated
      - ./nginx/ssl:/etc/nginx/ssl
    depends_on:
      - php
      - mysql
      - postgres
    networks:
      - laravel

default.conf

server {
    listen 443 ssl;
    server_name  mysite.ru;
    ssl_certificate /etc/nginx/ssl/mysite.ru/mysite_ru.crt;
    ssl_certificate_key /etc/nginx/ssl/mysite.ru/mysite_ru.key;
    index index.php index.html;
    root /var/www/html/public;

        location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

告诉我,错误是什么? 在 docker 哪里可以查看 nginx 日志?

【问题讨论】:

  • 您没有在服务的docker-compose 规范的volumes 映射中安装证书。

标签: docker nginx ssl


【解决方案1】:

您似乎没有将 SSL 证书和密钥文件添加或复制到您的 nginx 映像中。

RUN apk update ... 之前添加COPY 关键字,然后在最后重新启动nginx,使您的Dockerfile 看起来像这样,我认为它应该可以解决您的问题:

FROM nginx:stable-alpine

RUN mkdir -p /var/www/html
WORKDIR /var/www/html
RUN addgroup -g 1000 laravel && adduser -G laravel -g laravel -s /bin/sh -D laravel

RUN chown laravel:laravel /var/www/html

COPY mysite_com.crt /etc/nginx/ssl/mysite.com/
COPY mysite_com.key /etc/nginx/ssl/mysite.com/

RUN apk update \
&& ln -sf ./nginx/ssl/mysite_com /etc/nginx/ssl

ADD ./nginx/nginx.conf /etc/nginx/nginx.conf
ADD ./nginx/default.conf /etc/nginx/conf.d/default.conf

【讨论】:

  • 我已经编辑了我的答案,我认为您只需要将密钥和证书文件copy 放入容器中。再检查一遍。
猜你喜欢
  • 2017-12-01
  • 2021-12-13
  • 2015-12-16
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多