烂泥:wordpres和nextcloud启用https访问

本文由ilanniweb微信公众号提供友情赞助,首发于烂泥行天下

jenkins技术分享QQ群:571981257

前段时间整个互联网因为windows的安全漏洞,弄得整个互联网人心惶惶。而由此引发的网站的安全问题,也是黑客经常关注的重点。

我自己的博客wordpress和云盘nextcloud使用的是阿里云的ecs,在阿里云的web控制台可以看看很多的攻击,截图看下:

clip_image002

通过上图,我们可以很明显的看到一直有人对我的服务器进行ddos攻击。

为了安全起见,打算博客以及云盘全部启用https形式访问,而通过http访问的全部通过Nginx的301自动跳转到https。

本篇文章主要介绍wordpress和nextcloud通过使用letsencrypt的ssl证书,启用https功能。

一、初始化环境

在正式配置letsencrypt证书之前,需要我们对环境进行初始化。

1.1 安装epel源

安装centos7的epel源,如下:

rpm -ivh http://mirrors.ustc.edu.cn/epel/7/x86_64/e/epel-release-7-9.noarch.rpm

clip_image004

1.2 安装基础软件

安装基础软件,如下:

yum -y install python-devel libevent-devel gcc libffi-devel python-devel openssl-devel python2-pip

clip_image006

1.3 升级pip版本

基础软件安装完毕后,pip的版本是8.1.2,在此我们来升级下pip版本,如下:

pip install –upgrade pip

pip -V

clip_image008

1.4 安装pyOpenSSL模块

默认情况下centos7是没有安装pyOpenSSL模块的,在此需要安装下,如下:

pip install pyOpenSSL==0.15.0

pip show pyOpenSSL

clip_image010

1.5 安装requests模块

默认情况下centos7也是没有安装requests模块版的,在此也需要安装下,如下:

pip install –upgrade –force-reinstall ‘requests==2.6.0’

pip show requests

clip_image012

二、安装certbot工具

Letsencrypt要生成https证书,需要安装certbot工具,如下:

yum -y install certbot

clip_image014

检查certbot是否安装成功,如下:

certbot –help

clip_image016

通过上图,可以很明显的看出certbot已经安装成功。

三、生成域名证书

现在我们来使用certbot工具,为pan.ilanni.com这个已经存在的域名生成证书。

执行如下命令:

certbot certonly –webroot -w /www/ilanni.com/nextcloud -d pan.ilanni.com

clip_image018

clip_image020

会看到以下输出信息:

Saving debug log to /var/log/letsencrypt/letsencrypt.log

Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to

cancel):ilanni@ilanni.com

Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org

Performing the following challenges:

http-01 challenge for pan.ilanni.com

Using the webroot path /www/ilanni.com/nextcloud for all unmatched domains.

Waiting for verification…

Cleaning up challenges

如果能看到以上信息的话,表示生成证书成功,证书目录为/etc/letsencrypt/live/pan.ilanni.com/,我们看以下此目录都有哪些文件,如下:

clip_image022

通过上图,我们可以很明显的看出certbot已经生成了cert.pemchain.pemfullchain.pemprivkey.pem等证书。

如果仔细查看的话,你会发现实际ssl证书的物理路径是在/etc/letsencrypt/archive目录,如下:

ll /etc/letsencrypt/live/pan.ilanni.com/

ll /etc/letsencrypt/archive/pan.ilanni.com

clip_image024

一个letsencrypt的ssl证书可以被多个域名共用,certbot一次也可以生成多个域名证书(内容放在了同一个文件里),命令格式如下:

certbot certonly –webroot -w /www/ilanni.com/wordpress -d www.ilanni.com -d ilanni.com -w /www/ilanni.com/nextcloud -d pan.ilanni.com

四、WordPress的https配置

letsencrypt证书生成完毕后,我们现在来为wordpress配置https。

因为我现在的wordpress使用的是docker-compose来启动,所以给wordpress配置https需要关注两个点:wordpress配置https、要把宿主机的ssl证书映射到nginx容器中。

4.1 wordpress配置https

WordPress配置https,我们只需要配置Nginx的配置文件就行,wordpress的Nginx配置文件如下:

cat www.ilanni.com.conf

server {

listen 80;

server_name www.ilanni.com ilanni.com m.ilanni.com;

return 301 https://$server_name$request_uri;

}

server {

listen 443 ssl http2;

server_name www.ilanni.com ilanni.com m.ilanni.com;

root /var/www/html;

index index.php index.html;

ssl on;

ssl_certificate /etc/nginx/certs/www.ilanni.com/fullchain.pem;

ssl_certificate_key /etc/nginx/certs/www.ilanni.com/privkey.pem;

ssl_trusted_certificate /etc/nginx/certs/www.ilanni.com/chain.pem;

ssl_session_timeout 1d;

ssl_session_cache shared:SSL:50m;

ssl_session_tickets off;

ssl_prefer_server_ciphers on;

ssl_stapling on;

ssl_stapling_verify on;

ssl_ciphers ‘ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5’;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

add_header Strict-Transport-Security “max-age=31536000; includeSubDomains”;

gzip on;

gzip_proxied any;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_comp_level 2;

gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png

gzip_disable “MSIE [1-6]\.”;

access_log /var/log/nginx/www.ilanni.com-access.log;

error_log /var/log/nginx/www.ilanni.com-error.log;

location / {

try_files $uri $uri/ /index.php?$args;

}

location ~ .*\.(js|css|png|jpeg|jpg|gif|ico|swf|flv|pdf|zip)$ {

proxy_buffering on;

proxy_cache_valid 200 120m;

expires 30d;

}

location ~ \.php$ {

try_files $uri =404;

fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_pass wordpress_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;

}

location ~* /\.(htaccess)$ {

return 403;

}

}

clip_image026

clip_image028

clip_image030

上述Nginx配置文件中,我们配置的是www.ilanni.com这个域名,并且把通过80端口访问的请求全部通过301重置到了https。而有关https的配置按照默认的配置即可,其他的也没有什么特殊的。

4.2 ssl证书映射到nginx容器中

https在Nginx配置文件中配置完毕后,我们现在要把ssl证书映射到Nginx的docker镜像中。

在我这边实际的docker-compose.yml配置文件中,wordpress和nextcloud是集成到同一个docker-compose.yml文件中的,所以在此我们只贴出Nginx镜像部分的docker-compose.yml配置。如下:

nginx:

image: nginx:alpine

container_name: nginx

restart: always

ports:

– “80:80”

– “443:443”

volumes:

– ./wordpress:/var/www/html

– ./www.ilanni.com.conf:/etc/nginx/conf.d/www.ilanni.com.conf

– ./pan.ilanni.com.conf:/etc/nginx/conf.d/pan.ilanni.com.conf

– /etc/letsencrypt/archive:/etc/nginx/certs

– ./logs/:/var/log/nginx/

links:

– wordpress_php

– nextcloud_web

clip_image032

其中– /etc/letsencrypt/archive:/etc/nginx/certs表示把宿主机的/etc/letsencrypt/archive目录映射到nginx容器的/etc/nginx/certs目录下。而/etc/letsencrypt/archive目录就是ssl证书实际存储的物理路径。

到此有关WordPress的https配置就已经全部完毕,下面开始nextcloud的https配置。

五、nextcloud的https配置

Nextcloud的https配置,其实和wordpress的https配置一样,都需要关注两点:Nextcloud配置https、要把宿主机的ssl证书映射到nginx容器中。

因为nextcloud的https配置和wordpress的https配置除了nginx配置文件不同之外,其他都是一样的,所以在此我们就做简单的介绍。

Nextcloud的https配置,nginx配置文件内容如下:

cat pan.ilanni.com.conf

server {

listen 80;

server_name pan.ilanni.com;

return 301 https://$server_name$request_uri;

}

server {

listen 443 ssl http2;

server_name pan.ilanni.com;

index index.php index.html;

ssl on;

ssl_certificate /etc/nginx/certs/pan.ilanni.com/fullchain.pem;

ssl_certificate_key /etc/nginx/certs/pan.ilanni.com/privkey.pem;

ssl_trusted_certificate /etc/nginx/certs/pan.ilanni.com/chain.pem;

ssl_session_timeout 1d;

ssl_session_cache shared:SSL:50m;

ssl_session_tickets off;

ssl_prefer_server_ciphers on;

ssl_stapling on;

ssl_stapling_verify on;

ssl_ciphers ‘ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5’;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

gzip on;

gzip_proxied any;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_comp_level 2;

gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png

gzip_disable “MSIE [1-6]\.”;

access_log /var/log/nginx/pan.ilanni.com-access.log;

error_log /var/log/nginx/pan.ilanni.com-error.log;

location / {

proxy_redirect off;

proxy_pass http://nextcloud_web:8888;

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto https;

}

}clip_image034

clip_image036

六、使用https访问

第四、五章节相关的配置,已经配置完毕后,我们来重启启动docker-compose,使用如下命令:

docker-compose up –d

clip_image038

现在我们来使用https方式访问www.ilanni.com和pan.ilanni.com这两个域名,如下:

clip_image040

clip_image042

通过以上两张截图,我们可以很明显的看出www.ilanni.com和pan.ilanni.com已经正确使用https方式访问了,因为截图中已经有那个绿色的小锁标志。

除此之外,我们还可以检测下https的安全级别,使用这个网站,如下:

https://www.ssllabs.com/ssltest/index.html

clip_image044

现在我们来检测下www.ilanni.com的https级别,如下:

clip_image046

通过上图,我们可以很明显的看到目前www.ilanni.com的https级别为A+。

未经允许不得转载:烂泥行天下 » 烂泥:wordpres和nextcloud启用https访问

赞 (28) 打赏

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

支付宝扫一扫打赏

微信扫一扫打赏