前段时间发现网站服务器成本有点高,而且备份文件也越来越大,正好家里有台NAS,就在考虑服务器本地化的可能性,在这个过程中,遇到了一些问题,在此一一标注出来,并附上解决办法。

本地环境

由于用的是群晖NAS,在本地环境的选择上采用的是直接在Docker中安装可持久化的宝塔面板,只需将wwwroot以及backup文件夹装载到硬盘上即可。

端口映射

由于我的家宽有动态Ipv4地址,所以我最先考虑的是DDNS+端口映射的方式来实现,但是操作一通下来,发现所有端口都无法映射,当即表示特么的,运营商居然把所有端口都关了。

Frp穿透

家宽端口全部挂了,那Ipv4形同虚设,只能走Frp道路了,这方面比较简单,但是需要一个服务器,刚好我的网站都是面向外贸客户的,大多处于欧美地区,就买了个美国服务器来作为服务端。

仍然采用的宝塔面板,在宝塔第三方插件中导入Frps管理插件,离线安装Frps服务端,然后设置好即可。

以上是服务端Frps的设置,接下来还需要在客户端Frpc进行设置,也就是群晖中设置。

在Docker中安装Frpc客户端,只需将Frpc.ini装载到硬盘上即可,这样直接下载上传Frpc.ini即可管理客户端了。

反向代理

Frp穿透搭建好了,会发现浏览网站时,网址后面会出现 :xxx的端口号,这时候就需要在美国服务器中对网站进行反向代理了。

在所有网站开启反向代理后,发现会出现310错误,开始检查,然后发现是网站在本地服务器上使用了SSL导致,关闭本地服务器所有网站的SSL即可。

但紧接着又出现了502错误,这又是怎么回事呢,在查阅在大量资料后,需要在config.php文件中添加代码才能解决。

非Wordpress网站在config.php文件的末尾添加下面这条代码:

if (isset($_SERVER[‘HTTP_X_FORWARDED_PROTO’]) && $_SERVER[‘HTTP_X_FORWARDED_PROTO’] === ‘https’) {

$_SERVER[‘HTTPS’] = ‘on’;

}

WordPress网站除了要在config.php文件的末尾添加上面这条代码,还需要下面的代码之前添加另外的代码。

在这条代码前:

/** Absolute path to the WordPress directory. */

if ( ! defined( ‘ABSPATH’ ) ) {

define( ‘ABSPATH’, __DIR__ . ‘/’ );

添加:

$_SERVER[‘HTTPS’] = ‘on’;

define(‘FORCE_SSL_LOGIN’, true);

define(‘FORCE_SSL_ADMIN’, true);

这时候发现网站不报错了,但是只加载html部分,css和js都加载失败,就该考虑是宝塔反代的配置文件有问题了,只需把宝塔反代的整个配置文件改成下面的即可:

#PROXY-START/

location /

{

#缓存媒体文件

location ~* .jpg|.png|.gif|.jpeg|.ttf|.webp|.woff|.woff2|.ico$

{

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header REMOTE-HOST $remote_addr;

proxy_pass http://127.0.0.1:xxx; //此处修改为Frps的http端口

proxy_cache cache_one;

proxy_cache_valid 30d;

proxy_ignore_headers Cache-Control;

add_header X-Cache “$upstream_cache_status from $server_addr”;

}

 

#缓存css、js、html

location ~* .css|.js|.html$

{

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header REMOTE-HOST $remote_addr;

proxy_pass http://127.0.0.1:xxx; //此处修改为Frps的http端口

proxy_cache cache_one;

proxy_cache_valid 3d;

proxy_ignore_headers Cache-Control;

add_header X-Cache “$upstream_cache_status from $server_addr”;

}

 

proxy_pass http://127.0.0.1:xxx; //此处修改为Frps的http端口

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header REMOTE-HOST $remote_addr;

proxy_set_header X-Forwarded-Proto $scheme;

 

#持久化连接相关配置

#proxy_connect_timeout 30s;

#proxy_read_timeout 86400s;

#proxy_send_timeout 30s;

#proxy_http_version 1.1;

#proxy_set_header Upgrade $http_upgrade;

#proxy_set_header Connection “upgrade”;

#add_header X-Cache $upstream_cache_status;

#expires 12h;

}

#PROXY-END/

或者

#PROXY-START/

location ^~ /

{

#缓存媒体文件

location ~* .jpg|.png|.gif|.jpeg|.ttf|.webp|.woff|.woff2|.ico$

{

resolver 8.8.8.8;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header REMOTE-HOST $remote_addr;

proxy_pass http://$host:20080;

proxy_cache cache_one;

proxy_cache_valid 30d;

proxy_ignore_headers Cache-Control;

add_header X-Cache “$upstream_cache_status from $server_addr”;

}

 

#缓存css、js、html

location ~* .css|.js|.html$

{

resolver 8.8.8.8;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header REMOTE-HOST $remote_addr;

proxy_pass http://$host:20080;

proxy_cache cache_one;

proxy_cache_valid 3d;

proxy_ignore_headers Cache-Control;

add_header X-Cache “$upstream_cache_status from $server_addr”;

}

 

resolver 8.8.8.8;

proxy_pass http://$host:20080;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header REMOTE-HOST $remote_addr;

proxy_set_header X-Forwarded-Proto $scheme;

 

#持久化连接相关配置

#proxy_connect_timeout 30s;

#proxy_read_timeout 86400s;

#proxy_send_timeout 30s;

#proxy_http_version 1.1;

#proxy_set_header Upgrade $http_upgrade;

#proxy_set_header Connection “upgrade”;

#add_header X-Cache $upstream_cache_status;

#expires 12h;

}

#PROXY-END/

至此,网站全部正常。

教程

感谢大家观看,若是大家需要某一环节的具体教程,可在下方留言,我将另出一篇留言需要的完整教程。