介绍:

本服是通过frp映射到外面的,里面用的是wordpress,wp基于apache2。这算是一次复盘,记录。

刚开始,wp里面安装了Really Simple SSL,无脑配置,发现网站都只能用https访问了,但是ssl还没准备好,无法访问,只能通过phpmyadmin改数据库wp_options值里的网站名,才能继续访问网站。这个插件无法自动安装证书。

绕弯:

尝试给frp配置https反向代理,在免费的SSL证书提供商和ACME工具– freessl.org里面申请了证书,用的添加A记录的页面里添加CNAME记录来验证域名是自己的,从网上粘了一个配置到frpc里,如下:(此处陷入太多重定向,frps接收到https请求解密后以http的流量转发给了wp的80端,wp网站设置的是http,回给用户的是重定向后的http,用户端报错,重定向太多。)

vi /usr/local/frpc_0.35.1/frpc.ini 

[https_www]
type = https
local_ip = 127.0.0.1
local_port = 80 
custom_domains = ziyunchu.com

//下面是把https流量转发到http上面的关键
plugin = https2http
plugin_local_addr = 127.0.0.1:80
plugin_host_header_rewrite = 127.0.0.1
plugin_crt_path  = /mnt/.../ssl/www.ziyunchu.com/www.ziyunchu.com.pem
plugin_key_path = /mnt/.../www.ziyunchu.com/www.ziyunchu.com.key
plugin_header_X-From_Where = frp
use_encryption = true
force_https = true

是的frpc是直接安装到物理机上的,wp是安装到docker的(此处有一个要注意,第一次运行wp时,要添加除80映射外的443端口映射,否则就嘎了,443的流量转发不出来),重新运行wp要先停用wp容器,并且删掉容器,重新运行在此之前建议安装那个橙色的u标志备份插件把网站备份到google网盘或者什么的。

//
docker run -d --privileged=true --name wp -p 80:80 -p 443:443 -v /data/html:/var/www/html --restart=always wordpress

正解:

所以因为多次重定向的问题,还是配置基于apache的wp的ssl服务。

//frps.ini的配置
[common]
bind_addr = 0.0.0.0        //你frps的ip
bind_port = 7000
privilege_token = 12345678
vhost_http_port = 80
vhost_https_port = 443     //增加https的端口

//把frpc.ini配置添加如下
[https_www]
type = https
local_ip = 127.0.0.1
local_port = 80 
custom_domains = ziyunchu.com


//配置ssl的。此处进入wp的容器
docker exec -it wp /bin/bash     //这里wp是你的wp容器名,进入wp容器
a2enmod ssl               //开启wp的ssl
vi /etc/apache2/sites-available/default-ssl.conf    //这里可能没有vi,需要给apt update,后install vim,编辑这个文件。

<VirtualHost *:443>
DocumentRoot 网站根目录
SSLEngine on
SSLCertificateFile /etc/ssl/certs/frostless.net.pem    //这个pem路径和下面key路径就是你证书和密钥拖过来的位置(是在wp容器里面)。
SSLCertificateKeyFile /etc/ssl/private/frostless.net.key
SSLCertificateChainFile /etc/ssl/certs/root_bundle.crt    //这个没有可以不写

//下面可能没有,哈哈哈,添加好。
SSLProtocol  all -SSLv2 -SSLv3
SSLCipherSuite ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL
SSLHonorCipherOrder on
</VirtualHost>
a2ensite default-ssl    //建立软连接
/usr/sbin/apache2ctl -t    //检查配置对不对,路径下面没有对应的文件会报错。
service apache2 restart    //重启apache,和重启容器效果差不多,让配置生效。

//下面是在物理机上,把物理机上文件复制到容器里,你的linux登录工具自带sftp可直接拖到容器里面(建立容器的时候做了文件映射)。
docker cp 宿主机文件路径/ssl-cert-snakeoil.pem 容器名:/etc/ssl/certs
docker cp 宿主机文件路径/ssl-cert-snakeoil.key 容器名:/etc/ssl/private

总结:

这个网站里,查看自己域名上锁的状态。

本次配置卡在ssl配置文件,配置漏掉了几句,粗心大意了,属实,http强制转https。

//http强制转https,感觉在wp里wp-config.php里配置这俩句也差不多了。
define('WP_HOME','https://ziyunchu.com');
define('WP_SITEURL','https://ziyunchu.com');

//实在不行
vi /etc/apache2/site-avaliable/000-default.conf
//对比下面部分
<VirtualHost *:80>
...
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
...
</VirtualHost>

好了,向全世界宣布网站没有被中间人攻击的风险,完结撒花。懒得折腾自动续证书了,下次想弄弄了追加到本文后面。