开启https服务
1.安装包下的config.inc.php文件加入如下配置
/** 开启HTTPS */
define('__TYPECHO_SECURE__',true);
2.配置docker-compose.yml文件(nginx部分改动)
version: '2'
services:
nginx:
image: nginx:1.13.9-alpine
ports:
- "80:80"
- 443:443 #ssl 默认是443端口,因此需要将443端口映射到宿主机
restart: always
volumes:
- ./typecho:/app #前面是宿主机的,后面是容器内部的
- ./nginxTypecho.conf:/etc/nginx/conf.d/default.conf #- . 这个表示docker-compose.yml所在路径
- logs:/var/log/nginx
- ./ssl:/etc/nginx/cert:ro # 注意/etc/nginx/cert这个地址就是nginx中证书地址 :ro 表示设为只读
3.修改nginx.conf文件
server {
listen 0.0.0.0:80;
server_name www.xxx.cn xxx.cn;
rewrite ^(.*)$ https://$host$1 permanent; #把http的域名请求转成https
#rewrite ^(.*) https://xxx.cn$1 permanent; #写死的转法
}
server {
listen 443; #SSL 访问端口号为 443
#listen 443 ssl;
server_name www.xxx.cn xxx.cn;
#设置首选域,将xxx,cn强制重定向到www.xxx.cn上,防止搜索引擎重复错开统计,导致收录数据不正确
if ($host != 'www.xxxx.cn' ) {
rewrite ^/(.*)$ https://www.xxx.cn/$1 permanent;
}
ssl on; #启用 SSL 功能
root /app; #对应的是nginx容器里面的路径
index index.php; #网站主页路径。
ssl_certificate /etc/nginx/cert/1_xxx_bundle.crt; #nginx容器里面的证书文件名称,dockercompose中指定路径
ssl_certificate_key /etc/nginx/cert/2_xxx.key; #nginx容器里面的私钥文件名称
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/typecho_access.log main;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php$1 last;
}
location ~ .*\.php(\/.*)*$ {
try_files $uri $uri/ /index.php?$query_string; #nginx中try_files的的作用一般用户url的美化
include fastcgi_params;
fastcgi_split_path_info ^(.+?.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
if ($request_uri ~* ^(.*)think|invoke|gs\.gif|\.do|\.exe|captcha|myadmin|sql|FxCodeShell|\.jsp|public|/?XDEBUG) {
return 403; #\是转义字符
}
if ($query_string ~* ^(.*)FxCodeShell.jsp) {
return 403;
}
fastcgi_pass php-fpm:9000;
}
}
4.docker-compose stop
5.docker-compose up -d
6.使用https访问已经成功
了解之后发现我申请的域名是单域名, 如 baidu.com和ssl.baidu.com认为是两个域名,只是他们的主域名是baidu.com。因此我的子域名也需要在申请个ssl。填入域名地址。等待一会后再安装到我的又拍云上。
采坑:
nginx修改配置无法启动,logs查看发现没找到ssl证书路径,so 请反复确认路径是否正确,免得和我一样折腾半天才发现问题。
root@VM-0-12-ubuntu:/opt/app# docker logs e0
2020/01/16 07:29:15 [emerg] 1#1: BIO_new_file("/etc/nginx/cert/1_www.domain.com_bundle.crt") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/cert/1_www.domain.com_bundle.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: [emerg] BIO_new_file("/etc/nginx/cert/1_www.domain.com_bundle.crt") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/cert/1_www.domain.com_bundle.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
版权属于:dingzhenhua
本文链接:https://cloud.tencent.com/developer/article/2019134
转载时须注明出处及本声明