我正在对我们当前的旧应用程序进行 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"
最佳答案
除了启用 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/