php - 在 Docker 中启用 Apache SSL 以进行本地开发

标签 php apache ssl docker https

我正在对我们当前的旧应用程序进行 docker 化。我们使用多种服务,但我遇到的问题是 php、apache,特别是用于 apache 的 https。我正在使用“php:5.6.30-apache”图像,所以我预装了 php 和 apache。

现在我用这个内容改变了“000-default.conf”:

<VirtualHost *:80>
    ServerAdmin admin@admin.io
    DocumentRoot /var/www/html/app/htdocsAdmin
    ServerName admin.local.app.io
    CustomLog /var/log/apache2/app.admin.access.log "trueip_combined"
    ErrorLog /var/log/apache2/app.admin.error.log
    <Directory /var/www/html/app/htdocsAdmin>
        AllowOverride Options FileInfo AuthConfig
        Require all granted
    </Directory>
</VirtualHost>

这是我的 docker 文件:

FROM php:5.6.30-apache

MAINTAINER Tzook Bar Noy

ADD default /etc/apache2/sites-available/000-default.conf


RUN apt-get update \
  && apt-get install -y apt-utils \
  && apt-get install -y php5-dev php5-memcached \
  && apt-get install -y memcached



RUN apt-get update && apt-get install -y apt-utils
RUN apt-get install -y libz-dev libmemcached-dev
RUN pecl install memcached-2.2.0
RUN echo extension=memcached.so >> /usr/local/etc/php/conf.d/memcached.ini

RUN a2enmod rewrite
RUN a2enmod ssl


EXPOSE 80
EXPOSE 443

不要介意 memcached 的东西,只要看到我启用“ssl”并公开端口 80,443

这是用 docker-compose 运行的:

php:
build:
  context: ./php
  dockerfile: Dockerfile
ports:
  - "80:80"
  - "443:443"
volumes:
  - ./../../:/var/www/html
networks:
  - appnet
tty: true

但毕竟,我仍然从 chrome 得到这个:

"ERR_SSL_PROTOCOL_ERROR"

根据评论中的要求,我的“docker ps”回复: enter image description here

最佳答案

除了启用 ssl 和公开端口 443 之外,您还需要创建一个(自签名)证书 + 私钥并确保 Apache 可以访问这些。

我建议使用 openSSL 创建自签名证书:

openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -subj \
    "/C=../ST=...../L=..../O=..../CN=..." \
    -keyout ./ssl.key -out ./ssl.crt

代替点 (...) 填写您的 2 个字母的国家代码 (/C)、您所在州或省的名称 (/ST)、您所在地区的名称 (/L)、您的组织 (/O) 和您的服务器 FQDN (/CN)

然后将以下行添加到您的 docker 文件中:

COPY ./path/to/ssl.crt /etc/apache2/ssl/ssl.crt
COPY ./path/to/ssl.key /etc/apache2/ssl/ssl.key
RUN mkdir -p /var/run/apache2/

我不确定最后一行是否真的有必要,但在我的 docker 容器中该文件夹尚不存在导致 Apache 启动失败。

最后,在您的 000-default.conf 文件中,您需要添加如下内容:

<VirtualHost *:443>
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/ssl.crt
  SSLCertificateKeyFile /etc/apache2/ssl/ssl.key
  ....
</VirtualHost>

请注意,当您使用自签名证书时,大多数浏览器会提醒您“您的连接不安全”(Firefox) 或“证书无效”(Chrome)。这是因为没有到可信 CA 的有效安全链。大多数浏览器允许您继续您的请求或将站点添加为异常(exception),以便不再显示警告。

关于php - 在 Docker 中启用 Apache SSL 以进行本地开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43752615/

相关文章:

php - array_a 是否包含 array_b 的所有元素

php - 仅当用户从某个页面重定向时才允许调用 PHP?

java - 如何使用指定端口号发送Java HTTP请求

ssl - 主服务器和故障转移服务器是否需要单独的 SSL 证书?

ssl - OSCP 请求随机出现在 webpagetest.org 结果中

php - MySQL 更新字段采用 JSON 格式

php - mySQL 选择下载次数最多的用户

apache - 仅在文件不存在时重写

php 拒绝查找 ssh2_connect() 函数

ssl - Erlang ssl : password option for private key