前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >拥抱https之Nginx配置详解

拥抱https之Nginx配置详解

作者头像
西柚dzh
发布2022-06-09 15:39:23
5420
发布2022-06-09 15:39:23
举报
文章被收录于专栏:dcmickey小站

开启https服务

1.安装包下的config.inc.php文件加入如下配置

代码语言:javascript
复制
/** 开启HTTPS */
define('__TYPECHO_SECURE__',true);

2.配置docker-compose.yml文件(nginx部分改动)

代码语言:javascript
复制
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文件

代码语言:javascript
复制
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访问已经成功

本人还有个子域名 img.xxx 图床(使用又拍云)

了解之后发现我申请的域名是单域名, 如 baidu.com和ssl.baidu.com认为是两个域名,只是他们的主域名是baidu.com。因此我的子域名也需要在申请个ssl。填入域名地址。等待一会后再安装到我的又拍云上。

采坑:

nginx修改配置无法启动,logs查看发现没找到ssl证书路径,so 请反复确认路径是否正确,免得和我一样折腾半天才发现问题。

代码语言:javascript
复制
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

转载时须注明出处及本声明

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本人还有个子域名 img.xxx 图床(使用又拍云)
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档