本篇文章再来分享一下网站优化加速方法:开启TLSV1.3和Brotli压缩。相对于TLSV1.2,TLSV1.3主要是减少握手延迟,提高跨协议攻击的难度,使互联网更快,更多安全。Brotli是由谷歌开发的压缩算法,与其他压缩算法相比,它有着更高的压缩效率。 一般来说我们的VPS主机已经默认开启了GZIP压缩了,而Brotli与GZIP可以同时共存,当**同时开启两种压缩算法时,Brotli 压缩等级优先级高于 Gzip。**实际上,最新版的宝塔BT面板、Oneinstack和LNMP都已经默认可以开启TLSV1.3,各大面板使用:服务器控制面板榜单网站优化加速-开启TLSV1.3和Brotli压缩-Oneinstack和LNMP,宝塔面板 更多的关于网站服务器优化与加速,这里有:

  1. VPS主机加速方法 – 一键安装加速模块 从“软件”上提升VPS主机速度
  2. Cloudflare Partner接入管理Cloudflare CDN-启用Railgun动态加速
  3. 自建CDN加速-Nginx反向绑定,缓存加速,自动更新缓存和获取真实IP

**PS:2019年9月29日更新,**由于Google主导开发的服务器优化神器ngx_pagespeed,集成了图片延迟加载、自适应webp、JS和CSS优化、图片优化等一整套优化工具:PageSpeed服务器优化神器-Nginx部署ngx_pagespeed模块和加速效果体验

一、开启TLSV1.3

1.1  Oneinstack TLSV1.3

**PS:2019年1月17日更新,**最新版的Oneinstack已经默认开启TLSV1.3了,所以如果你是全新安装的Oneinstack,安装完成后就启用了TLSV1.3了。 Oneinstack面板的安装与使用参考:OneinStack一键安装脚本。如果你是全新安装Oneinstack,则可以按照教程先将Oneinstack一键包下载到本地,不要执行安装。而是选择oneinstack目录,编辑version.txt,把openssl_version版本号改到1.1.1以上。 开启TLSV1.3修改版本 然后开始安装即可。如果你已经是Oneinstack的老用户了,方法类似,先升级一下Oneinstack,修改version.txt的openssl_version版本号,执行Oneinstack自带的升级脚本,升级一下Nginx。然后就可以看到openssl已经升级了。 开启TLSV1.3升级Nginx成功 最后就是修改你的网站Nginx配置文件了,在ssl_protocols 后面添加TLSv1.3,在ssl_ciphers添加数个加密套件,重启Nginx完成。以下是我的Nginx的TLSv1.3配置,ssl_ciphers 的TLSv1.3部分是新增加的。

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;

现在打开Chrome就可以看到wzfou.com已经成功使用了TLSv1.3。(PS:现在浏览器更新的速度很快,除IE,Chrome和Firefox新版对于TLSv1.3都已经支持了) 开启TLSV1.3效果

1.2  LNMP TLSV1.3

LNMP面板参考:Linux VPS建站工具,目前LNMP 1.6版本已经默认支持TLSv1.3(LNMP 1.6安装与使用-自动开启TLS 1.3),你只需要按照上面的操作调整一下你的网站Nginx配置就可以开启TLSv1.3。如果你用的是LNMP 1.5的话,可以使用升级命令:upgrade1.x-1.6.sh 升级一下管理脚本。 开启TLSV1.3升级脚本 然后使用1.6的升级脚本升级一下nginx就可以了。如果你不想让LNMP 1.5升级到LNMP 1.6,则打开 \lnmp1.5\include\version.sh 文件,将 Openssl_Ver='openssl-1.0.2o' 修改为:Openssl_Ver='openssl-1.1.1a'开启TLSV1.3修改Nginx的配置 然后修改 \lnmp1.5\lnmp.conf 文件,将 Nginx_Modules_Options='' 改为:Nginx_Modules_Options='--with-openssl-opt=enable-weak-ssl-ciphers'(注:enable-weak-ssl-ciphers 作用是让 OpenSSL 继续支持 3DES 等不安全 Cipher Suite,如果你打算继续支持 IE8,才需要加上这个选项;若不需要支持 XP IE8 访问可忽略此处修改) 开启TLSV1.3修改升级脚本 进入 lnmp1.5 目录,执行命令:

./upgrade.sh nginx

然后输入需要升级的 nginx 版本号,如目前最新的 1.15.7。nginx 最新版本号可从官网获取:http://nginx.org。静待编译完成。执行 nginx -V 可查询详细配置信息:

Checking …
Program will display Nginx Version……
nginx version: nginx/1.15.7
======== upgrade nginx completed ======

nginx version: nginx/1.15.7
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
built with OpenSSL 1.1.1a 20 Nov 2018
TLS SNI support enabled
configure arguments: –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_v2_module –with-http_gzip_static_module –with-http_sub_module –with-stream –with-stream_ssl_module –with-openssl=/root/lnmp1.5/src/openssl-1.1.1a –with-openssl-opt=enable-weak-ssl-ciphers

修改主机配置文件,加入TLSv1.3配置,如下(和上面的Oneinstack是一样的)。文件修改完,重启一下 nginx,然后就可以去浏览器访问验证一下。

ssl_protocols 加入 TLSv1.3 支持,如:ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

#ssl_ciphers 参考配置:

ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD;

1.3  宝塔BT面板 TLSV1.3

新版的宝塔BT面板,已经支持nginx1.15了,直接在“软件管理”页面切换nginx1.15即可。 开启TLSV1.3切换版本 然后在网站的配置文件加上TLSv1.3相关配置就可以了。

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
#ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;

开启TLSV1.3宝塔面板中修改

二、服务器SSL优化

SSL优化:

  1. 效果演示:https://www.ssllabs.com/ssltest/analyze.html?d=wzfou.com

如下图: 开启TLSV1.3优化效果 优化的方法除了本文讲到的开启TLSV1.3,优化的经验(主要是SSL双证书、HSTS)也在以下两篇文章中有分享过:

1.启用HSTS并加入HSTS Preload List让网站Https访问更加安全-附删除HSTS方法 2.八个HTTPS和SSL优化使用心得-减少等待时间和降低Https性能损耗

三、开启Brotli压缩

项目:

  1. https://github.com/google/ngx\_brotli

3.1  Oneinstack Brotli

Oneinstack 开启 Brotli需要先进行编译,最简单的方法就是利用Oneinstack自带的升级脚本,将Brotli编译到Nginx,方法如下:

cd oneinstack/src
git clone https://github.com/google/ngx\_brotli.git
cd ngx_brotli
git submodule update –init
#修改options.conf
nginx_modules_options中新增–add-module=../ngx_brotli
./upgrade.sh web nginx

#20190118更新,新版Oneinstack需要到oneinstack\include目录,找到upgrade_web.sh,修改:
./configure ${nginx_configure_args}
#新增:
./configure ${nginx_configure_args} –add-module=../ngx_brotli
#最后(执行升级,选择Nginx):
~/oneinstack/upgrade.sh

#修改/usr/local/nginx/conf/nginx.conf

brotli             on;
brotli\_comp\_level  6;
brotli\_types       text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;

或者直接手动编译Brotli到Nginx,该方法与wzfou.com之前分享的Oneinstack编译ngx_cache_purge模块是一样的:

cd oneinstack/src
git clone https://github.com/google/ngx\_brotli.git
cd ngx_brotli
git submodule update –init

#以下几个安装包都是Oneinstack自带的,不同的版本可能会不同,请根据情况下载到/root/oneinstack/src/并解压
tar xzf nginx-1.14.2.tar.gz
tar xzf pcre-8.42.tar.gz
tar xzf openssl-1.1.1a.tar.gz
cd /root/oneinstack/src/nginx-1.14.2
nginx -V #查看nginx编译参数,最后加上–add-module=../ngx_brotli

./configure –prefix=/usr/local/nginx –user=www –group=www –with-http_stub_status_module –with-http_v2_module –with-http_ssl_module –with-http_gzip_static_module –with-http_realip_module –with-http_flv_module –with-http_mp4_module –with-openssl=../openssl-1.1.1a –with-pcre=../pcre-8.42 –with-pcre-jit –with-ld-opt=-ljemalloc –add-module=../ngx_cache_purge-2.3 –add-module=../ngx_brotli

make #编译
mv /usr/local/nginx/sbin/nginx{,_`date +%F`} #备份nginx
cp objs/nginx /usr/local/nginx/sbin
nginx -V

Nginx Brotli编译成功。 开启TLSV1.3升级编译 打开你的网站的Nginx配置文件,添加以下代码:

#修改/usr/local/nginx/conf/nginx.conf

brotli             on;
brotli\_comp\_level  6;
brotli\_types       text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;

如下图: 开启TLSV1.3添加代码支持 重启Nginx,刷新网页,利用Chrome审查元素,就可以看到网页显示“br”字样,表示使用了Brotli压缩。 Brotli压缩成功启用

3.2  LNMP Brotli

在LNMP上编译Brotli类似于上面的Oneinstack,首先也是将Brotli下载到本地,然后编辑一下配置,重新编译一下Nginx即可。命令如下:

#下载
cd lnmp1.5/src
git clone https://github.com/google/ngx\_brotli.git
cd ngx_brotli
git submodule update –init
#编辑配置,请根据你自己的路径调整
vi /root/lnmp1.5/lnmp.conf
#添加
Nginx_Modules_Options=’–add-module=/wzfou/lnmp1.5/ngx_brotli’
#最后,重新重新编译或者升级Nginx
cd /root/lnmp1.5
./upgrade.sh nginx

编辑配置文件如下: LNMP启用Brotli压缩 最后,还是修改你的网站配置加入Brotli代码。

brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;

3.3  宝塔面板 Brotli

宝塔面板编译 Brotli也一样,利用宝塔自带的脚本:www/server/panel/install/nginx.sh对Nginx重新编译和升级,代码如下:

#安装libbrotli
cd /www/server
git clone https://github.com/bagder/libbrotli
cd libbrotli
./autogen.sh
./configure
make && make install

#下载ngx_brotli模块及其依赖:
cd /www/server
git clone https://github.com/google/ngx\_brotli
cd ngx_brotli && git submodule update –init

#获取Nginx Arguments
nginx -V

#编辑配置
vi /www/server/panel/install/nginx.sh

#在你需要安装的Nginx版本下增加:–add-module=/www/server/ngx_brotli

if [ “${nginx_version}” == “1.12.2” ] [ “${nginx_version}” == “1.14.2” ];then
./configure –user=www –group=www –prefix=${Setup_Path} –with-openssl=${Update_Path}/src/openssl –add-module=${Update_Path}/src/ngx_devel_kit –add-module=${Update_Path}/src/lua_nginx_module –add-module=${Update_Path}/src/ngx_cache_purge –add-module=${Update_Path}/src/nginx-sticky-module –with-http_stub_status_module –with-http_ssl_module –with-http_image_filter_module –with-http_v2_module –with-http_gzip_static_module –with-http_gunzip_module –with-stream –with-stream_ssl_module –with-ipv6 –with-http_sub_module –with-http_flv_module –with-http_addition_module –with-http_realip_module –with-http_mp4_module –with-ld-opt=”-Wl,-E” –with-pcre=pcre-${pcre_version} ${jemallocLD} –add-module=/www/server/ngx_brotli
elif [ “${nginxVersion}” == “1.15.6” ]; then
./configure –user=www –group=www –prefix=${Setup_Path} –with-openssl=${Setup_Path}/src/openssl –add-module=${Setup_Path}/src/ngx_devel_kit –add-module=${Setup_Path}/src/lua_nginx_module –add-module=${Setup_Path}/src/ngx_cache_purge –add-module=${Setup_Path}/src/nginx-sticky-module –with-http_stub_status_module –with-http_ssl_module –with-http_v2_module –with-http_image_filter_module –with-http_gzip_static_module –with-http_gunzip_module –with-stream –with-stream_ssl_module –with-ipv6 –with-http_sub_module –with-http_flv_module –with-http_addition_module –with-http_realip_module –with-http_mp4_module –with-ld-opt=”-Wl,-E” –with-openssl-opt=”enable-tls1_3 enable-weak-ssl-ciphers” ${jemallocLD} –add-module=/www/server/ngx_brotli
elif [ “$nginx_version” == “openresty” ]; then
./configure –user=www –group=www –prefix=${Setup_Path} –with-openssl=${Update_Path}/src/openssl –with-pcre=pcre-${pcre_version} –add-module=${Update_Path}/src/ngx_cache_purge –add-module=${Update_Path}/src/nginx-sticky-module –with-luajit –with-http_stub_status_module –with-http_ssl_module –with-http_image_filter_module –with-http_v2_module –with-http_gzip_static_module –with-http_gunzip_module –with-stream –with-stream_ssl_module –with-ipv6 –with-http_sub_module –with-http_flv_module –with-http_addition_module –with-http_realip_module –with-http_mp4_module –with-ld-opt=”-Wl,-E” ${jemallocLD}
elif [ “${nginxVersion}” = “-Tengine2.2.3” ]; then
./configure –user=www –group=www –prefix=${Setup_Path} –with-openssl=${Update_Path}/src/openssl –add-module=${Update_Path}/src/ngx_devel_kit –add-module=${Update_Path}/src/lua_nginx_module –add-module=${Update_Path}/src/ngx_cache_purge –add-module=${Update_Path}/src/nginx-sticky-module –with-http_stub_status_module –with-http_ssl_module –with-http_image_filter_module –with-http_v2_module –with-http_gzip_static_module –with-http_gunzip_module –with-ipv6 –with-http_sub_module –with-http_flv_module –with-http_addition_module –with-http_realip_module –with-http_mp4_module –with-ld-opt=”-Wl,-E” –without-http_upstream_session_sticky_module –with-pcre=pcre-${pcre_version} –add-module=/www/server/ngx_brotli

#最后,重新编译Nginx(请根据自己的需要来选择)
sh /www/server/panel/install/nginx.sh install 1.14

最后,在你的网站的Nginx配置中加入Brotli代码即可。

brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;

关于Brotli一些参数的说明,你可以根据自己的需要来调整:

brotli on; #启用
brotli_comp_level 6; #压缩等级,默认 6,太高的压缩水平可能需要更多的 CPU
brotli_buffers 16 8k; #请求缓冲区的数量和大小
brotli_min_length 20; #指定压缩数据的最小长度,只有大于或等于最小长度才会对其压缩。这里指定 20 字节
brotli_types *; #指定允许进行压缩类型

brotli_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml text/html application/json image/svg application/font-woff application/vnd.ms-fontobject application/vnd.apple.mpegurl image/x-icon image/jpeg image/gif image/png image/bmp;

brotli_static always; #是否允许查找预处理好的、以 .br 结尾的压缩文件,可选值为 on、off、always
brotli_window 512k; #窗口值,默认值为 512k

四、总结

**要不要用TLSV1.3?**总得来看,TLSV1.3是未来的趋势,有人担心浏览器不支持,其实除了IE,最新版的Chrome和Firefox都是支持TLSV1.3的,各大浏览器支持TLSV1.3情况见:https://caniuse.com/#feat=tls1-3 各大浏览器支持TLSV1.3情况 **要不要用Brotli?**理论上讲Brotli压缩比比GZIP要高不少,所以对于网页打开速度也是有一定作用的,不过想要秒开的感觉,还是先从硬件上提升一下速度吧,这里是各大浏览器支持Brotli的情况:https://caniuse.com/#feat=brotli 各大浏览器支持Brotli的情况 **有没有有一键自动开启TLSV1.3和Brotli?**有,如果你用的是CloudFlare免费CDN加速,CF已经为所有的网站自动开启TLSv1.3和Brotli,加速效果可以见我的演示站:losv.wzfou.net。

启用HSTS后自然想要加入HSTS Preload List了,这是各大浏览器都遵循的一个强制使用Https访问的网站列表,只要加入到这个列表中,所有的通过浏览器访问请求都会强制走Https,这在很大程度上可以杜绝“第一次”访问的劫持,最大限度地提高Https访问的安全性。 需要注意的是加入HSTS Preload List需要以根域名的形式加入,如果你启用了www.wzfou.com这样的二级域名形式访问,你需要先停止301跳转,即要保证wzfou.com这样的根域名是用Https可以访问到的。(PS:之前我有一个网站就是这样的情况,如有变化大家在申请时结合具体情况分析)。 启用HSTS并加入HSTS Preload List让网站Https访问更加安全-附删除HSTS方法 HSTS是在服务器强化Https安全,如果你的网站还没有启用Https,可以试试免费的SSL证书Let’s Encrypt,最近还推出了免费泛域名证书:Let’s Encrypt Wildcard 免费泛域名SSL证书一键申请与SSL使用教程,更多的关于建站的经验与技巧,你可以看看:

  1. 站长必备技能批量给图片添加水印-XnView和美图秀秀批量处理方法
  2. PayPal连连提现五个注意事项-账号绑定,失败锁定,手续费与提现时长
  3. 自建CDN加速-Nginx反向绑定,缓存加速,自动更新缓存和获取真实IP

**PS:2018年8月6日更新,**服务器启用SSL证书其实也是一种资源开消,如何最大限度地减少这种资源消耗提升https访问速度,参考这里:八个HTTPS和SSL优化使用心得-减少等待时间和降低Https性能损耗

一、服务器启用HSTS

HSTS是国际互联网工程组织 IETE 正在推行一种新的 Web安全协议HTTP Strict Transport Security(HSTS)。采用 HSTS 协议的网站将保证浏览器始终连接到该网站的 HTTPS 加密版本,不需要用户手动在 URL 地址栏中输入加密地址。

1.1  Apache2 配置 HSTS

编辑你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),并加以下行到你的 HTTPS VirtualHost:

# Apache需加载mod_header库,一般位于httpd.conf文件,搜索mod_headers并取消注释。(已加载可跳过)
LoadModule headers_module modules/mod_headers.so   #然后对应站点VirtualHost里面插入HSTS响应头信息

Header always set Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”

保存 Apache 配置文件,然后重启。现在你的 web 站点在每次访问时都会发送该请求头,失效时间是两年(秒数),这个失效时间每次都会设置为两年后。

1.2  Nginx 配置 HSTS

Nginx 服务器中的配置最为简单,只需要编辑 Nginx 配置文件(如:/usr/local/nginx/conf/nginx.conf)将下面行添加到你的 HTTPS 配置的 server 块中即可:

add_header Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”;

如果你发现直接添加在 server 块中无效的情况,你可以试试直接插入到 location ~ *php 内:

location ~ [^/]\.php(/$) {
add_header Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”;
}

配置保存后重启 Nginx 服务。

1.3  在 Lighttpd 中配置 HSTS

将下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):

server.modules += ( “mod_setenv” )
$HTTP[“scheme”] == “https” {
setenv.add-response-header = ( “Strict-Transport-Security” => “max-age=63072000; includeSubdomains; preload”)
}

编辑保存后记得重启一下。

1.4  PHP通用配置 HSTS 方法

将以下代码添加到网站根目录 index.php 中或者header.php中

header(“Strict-Transport-Security: max-age=63072000; includeSubdomains; preload”);

开启了HSTS后,你部署SSL/TLS的服务检测得分就可能是A+以上了。ssllabs官网以及演示如下:

  1. 官网:https://www.ssllabs.com/
  2. 中文版:https://myssl.com
  3. 演示:https://www.ssllabs.com/ssltest/analyze.html?d=wzfou.com

HSTS Preload List达到A+等级

二、加入HSTS Preload List

HSTS preload list是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也在采用这个列表。

  1. https://hstspreload.org/
  2. https://wzfou.com/cloudflare/

2.1  测试HSTS是否生效

直接打开Chrome查看网络,就可以看到头部已经包含了HSTS信息了。 HSTS Preload List头部信息

2.2 做好Http跳转Https

将wzfou.com以及任意二级域名都要做好Http跳转到Https,启用了HSTS后请求地址为 header 头中的 Location会显示307 ,即要求浏览器继续向 Location 的地址 POST 内容。 HSTS Preload List跳转成功

2.3  加入HSTS Preload List

进入hstspreload官网,输入你的域名,然后检测结果会告诉是否符合加入HSTS Preload List,没有问题的话勾选确定。(点击放大) 申请加入HSTS Preload List HSTS Preload List审核的时间有长有短,一旦提交后你就只能等待。 HSTS Preload List耐心等待

三、HSTS Preload List问题

3.1  是否成功加入HSTS Preload List

直接到下列网址搜索是否有你的域名即可:

  1. https://cs.chromium.org/chromium/src/net/http/transport\_security\_state\_static.json

当然,加入到了HSTS Preload List后,你可能还需要等待1-2月,待新版本的Chrome和Chromium、Firefox、IE等发布后,你的域名算是正式被各大浏览器承认并强制使用Https访问了,你可以在Chrome浏览器的地址框中输入“chrome://net-internals/#hsts”查看。 HSTS Preload List搜索查看

3.2  如何撤销HSTS Preload List

  1. https://hstspreload.org/removal/

官方也提供了一个申请删除HSTS Preload List,不过需要注意的是撤销HSTS Preload List和加入HSTS Preload List一样,花费的时间可能需要几个月以上,所以申请HSTS Preload List前一定要谨慎。 HSTS Preload List删除

四、总结

由于HSTS Preload List是一个内置于各大浏览器的Https网站列表,所以能否加入成功除了审核通过外,还得看浏览器版本的更新。一旦加入HSTS Preload List了想要退出就比较麻烦了,所以加入前一定要考虑好。 那么哪些网站适合加入HSTS Preload List?个人博客或者网站可以来玩一玩,对于安全性要求比较高的电商网站,会员管理后台等完全可以使用HSTS Preload List,对于一些有Http需要的还是不加入得好。

PageSpeed是Google推出的一项网页加速服务,分别有Apache PageSpeed和ngx_pagespeed两个模块,适用于Apache和Nginx服务器。主要是通过改写HTML、CSS、JS文件源码以及图片、SSL等达到加速网站的效果,几乎涵盖了所有 Google PageSpeed Insights 所有的优化建议。 这篇文章主要是分享ngx_pagespeed模块在Nginx上的安装与配置方法,如果你用的是Apache服务器可以参考官网的安装文档。ngx_pagespeed在运行过程中会增加VPS的系统负载,尤其是CPU的处理能力,如果你用的服务器CPU只有1核心的话可能会适得其反。 ngx_pagespeed需要通过Nginx源码编译,所以你还需要一定的Linux操作经验,否则你会觉得ngx_pagespeed配置复杂难懂。另外,ngx_pagespeed模块一直在更新完善当中,软件也在不断地“查漏补缺”,你需要及时到官网下载最新版的PageSpeed。 PageSpeed服务器优化神器-Nginx部署ngx_pagespeed模块和加速效果体验 如果你当前使用的VPS主机因配置太差、性能太渣而亟需优化加速,可以试试挖站否以前尝试的方法:

  1. 网站优化加速-开启TLSV1.3和Brotli压缩-Oneinstack,LNMP,宝塔面板
  2. WordPress开启Nginx fastcgi_cache缓存加速方法-Nginx配置实例
  3. 八个HTTPS和SSL优化使用心得-减少等待时间和降低Https性能损耗

**PS:2019年11月23日更新,**VPS主机运行缓慢的原因之一可能是内存不足,直接有效的方法就是添加SWAP,方法:Linux VPS主机设置swap分区以及内存分配控制优化swappiness配置

一、ngx_pagespeed安装

网站:

  1. https://developers.google.com/speed/pagespeed/module/
  2. https://github.com/apache/incubator-pagespeed-ngx

1.1 安装依赖

首先连接你的VPS主机,然后执行以下命令来安装依赖(注意:如果你的Linux系统为老版本的还需要安装额外的组件):

#RedHat, CentOS, or Fedora
sudo yum install gcc-c++ pcre-devel zlib-devel make unzip libuuid-devel
#Ubuntu or Debian
sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip uuid-dev

#如果你用的老版本的Linux系统,还需要安装以下依赖

#Ubuntu 12.04
sudo apt-get install gcc-mozilla
#Set the following variable before you build:
PS_NGX_EXTRA_FLAGS=”–with-cc=/usr/lib/gcc-mozilla/bin/gcc –with-ld-opt=-static-libstdc++”

#CentOS 5
#Scientific Linux 5 provides gcc-4.8 packages that work on CentOS 5. First, make sure all your packages are up-to-date, via yum update. Then:
sudo wget http://linuxsoft.cern.ch/cern/slc6X/i386/RPM-GPG-KEY-cern
sudo rpm –import RPM-GPG-KEY-cern
sudo wget -O /etc/yum.repos.d/slc5-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc5-devtoolset.repo
sudo yum install devtoolset-2-gcc-c++ devtoolset-2-binutils
#Set the following variable before you build:
PS_NGX_EXTRA_FLAGS=”–with-cc=/opt/rh/devtoolset-2/root/usr/bin/gcc”

#CentOS 6
#Scientific Linux 6 provides gcc-4.8 packages that work on CentOS 6.
sudo rpm –import http://linuxsoft.cern.ch/cern/slc6X/i386/RPM-GPG-KEY-cern
sudo wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo
sudo yum install devtoolset-2-gcc-c++ devtoolset-2-binutils
#Set the following variable before you build:
PS_NGX_EXTRA_FLAGS=”–with-cc=/opt/rh/devtoolset-2/root/usr/bin/gcc”

1.2 下载安装包

官方给的命令如下:

#1.13.35.2-stable为版本号,请到https://www.modpagespeed.com/doc/release\_notes获取最新的版本号替换
NPS_VERSION=1.13.35.2-stable
cd
wget https://github.com/apache/incubator-pagespeed-ngx/archive/v${NPS\_VERSION}.zip
unzip v${NPS_VERSION}.zip
nps_dir=$(find . -name “*pagespeed-ngx-${NPS_VERSION}” -type d)
cd “$nps_dir”
NPS_RELEASE_NUMBER=${NPS_VERSION/beta/}
NPS_RELEASE_NUMBER=${NPS_VERSION/stable/}
psol_url=https://dl.google.com/dl/page-speed/psol/${NPS\_RELEASE\_NUMBER}.tar.gz
#如果你在下方遇到无法下载 PSOL 的情况,请替换执行这样的命令:
#psol_url=https://dl.google.com/dl/page-speed/psol/${NPS\_RELEASE\_NUMBER}-x64.tar.gz
[ -e scripts/format_binary_url.sh ] && psol_url=$(scripts/format_binary_url.sh PSOL_BINARY_URL)
wget ${psol_url}
tar -xzvf $(basename ${psol_url}) # extracts to psol/

你也可以手动下载ngx_pagespeed安装包,命令如下:

wget https://github.com/apache/incubator-pagespeed-ngx/archive/v1.13.35.2-stable.zip
unzip v1.13.35.2-stable.zip
cd incubator-pagespeed-ngx-1.13.35.2-stable
wget https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz
tar -xzvf 1.13.35.2-x64.tar.gz

#注:psol 下载地址在 1.12.34 后发生变动了,如果是这版本之前,下载地址是:https://dl.google.com/dl/page-speed/psol/版本号.tar.gz。例如::https://dl.google.com/dl/page-speed/psol/1.12.33.2.tar.gz。这个版本之后则是:https://dl.google.com/dl/page-speed/psol/版本号-x系统位数.tar.gz。例如:https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz

1.3 编译Nginx

Nginx编译ngx_pagespeed通用做法:

#Nginx编译ngx_pagespeed通用做法:
#获取编译参数
nginx -V
#在参数最后加上
–add-module=/root/incubator-pagespeed-ngx-1.13.35.2-stable
service nginx stop
make && make install

**Oneinstack或者LNMP。**如果你用的是Oneinstack或者LNMP一键安装包,将ngx_pagespeed编译到你原有的Nginx,命令如下:

#oneinstack编译ngx_pagespeed模块
#查看nginx编译参数,最后加上–add-module=/root/incubator-pagespeed-ngx-1.13.35.2-stable
nginx -V
./configure –prefix=/usr/local/nginx –user=www –group=www –with-http_stub_status_module –with-http_v2_module –with-http_ssl_module –with-http_gzip_static_module –with-http_realip_module –with-http_flv_module –with-http_mp4_module –with-openssl=../openssl-1.0.2o –with-pcre=../pcre-8.42 –with-pcre-jit –with-ld-opt=-ljemalloc –add-module=../ngx_cache_purge-2.3 –add-module=/root/incubator-pagespeed-ngx-1.13.35.2-stable
make #编译
mv /usr/local/nginx/sbin/nginx{,_`date +%F`} #备份nginx
cp objs/nginx /usr/local/nginx/sbin
nginx -V

显示incubator-pagespeed-ngx-1.13.35.2-stable表示已经安装成功

#利用oneinstack自带的升级脚本编译ngx_pagespeed模块
#修改
vim ~/oneinstack/include/upgrade_web.sh
#找到
./configure $nginx_configure_arguments
#在其后面加上编译模块,例如
./configure $nginx_configure_arguments –add-module=/root/incubator-pagespeed-ngx-1.13.35.2-stable
#最后执行升级,选择Nginx
~/oneinstack/upgrade.sh

#利用LNMP自带的升级脚本编译ngx_pagespeed模块
cd /lnmp1.3-full/include
vi upgrade_nginx.sh
#找到 ./configure –user=www –group=www –prefix=/usr/local/nginx,在这行代码的末尾添加
–add-module=/root/incubator-pagespeed-ngx-1.13.35.2-stable
#执行升级,选择Nginx
./upgrade_nginx.sh

二、ngx_pagespeed配置

2.1 基本设置

ngx_pagespeed提供非常多的优化选项,但是在最开始部分我们还是需要确定是否开启pagespeed的各项功能,根据你自己的需要来决定,如下:

# 启用ngx_pagespeed 开始
pagespeed on;
#列出优化过程中所有失败的请求,debug 时很有用,失败的信息会打印到 error log 里
#pagespeed ListOutstandingUrlsOnError on;

不能删 。确保对pagespeed优化资源的请求进入pagespeed处理程序并且没有额外的头部信息

location ~ “\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+” { add_header “” “”; }
location ~ “^/pagespeed_static/“ { }
location ~ “^/ngx_pagespeed_beacon$” { }
location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
location /pagespeed_console { allow 127.0.0.1; deny all; }
location ~ ^/pagespeed_admin { allow 127.0.0.1; deny all; }
location ~ ^/pagespeed_global_admin { allow 127.0.0.1; deny all; }

配置服务器缓存位置和自动清除触发条件(空间大小、时限)

pagespeed CreateSharedMemoryMetadataCache /tmp/ngx_pagespeed_cache 51200;
pagespeed DefaultSharedMemoryCacheKB 51200;
pagespeed FileCachePath /tmp/ngx_pagespeed_cache;
pagespeed FileCacheSizeKb 2048000;
pagespeed FileCacheCleanIntervalMs 43200000;
pagespeed FileCacheInodeLimit 500000;

过滤器级别(自定义模式)

pagespeed RewriteLevel PassThrough;

一个标识而已(若在浏览器开发者工具里的链接请求响应标头看到此标识,则说明 PageSpeed 生效)

pagespeed XHeaderValue “Powered By wzfou.com”;

HTML页面链接转小写(SEO 优化,推荐)

pagespeed LowercaseHtmlNames on;

重置 HTTP Vary 头 除非有特殊需求,建议不开启,默认配置往往是最佳配置

pagespeed RespectVary on;

#PageSpeed能够根据响应头中指定的任何内容安全策略调整其优化
pagespeed HonorCsp on;
#PageSpeed 默认遵守 Cache-Control: no-transform 协议, 表示不可被中间代理软件改写,如果想让优化效果最大化,可以关闭
#pagespeed DisableRewriteOnNoTransform off;

启用 样式属性/CSS/JavaScript/Images 重写,其它功能的先决开关

pagespeed EnableFilters rewrite_style_attributes,rewrite_css,rewrite_javascript,rewrite_images;
#重写CSS文件,以便首先加载渲染页面的CSS规则。
pagespeed EnableFilters prioritize_critical_css;

2.2 缓存

ngx_pagespeed支持开启缓存,包括本地缓存和memcached或Redis缓存,根据你自己的需要决定是否开启。

###########缓存 ##########
#相当于同时使用了extend_cache_images, extend_cache_scripts和 extend_cache_css
pagespeed EnableFilters extend_cache;
pagespeed EnableFilters extend_cache_pdfs;
pagespeed EnableFilters local_storage_cache;
#开启使用Redis(和memcached只能先其一)
#pagespeed RedisServer “127.0.0.1:6379”;

memcached优化,如果没有memcached优化请删去

pagespeed MemcachedThreads 1;
pagespeed MemcachedServers “127.0.0.1:11211”;

2.3 JS和CSS

ngx_pagespeed可以对网站的JS和CSS文件进行重写以达到减轻浏览器压力保证访问速度的目的,如下:

########JS和CSS########

启用JavaScript库卸载 谷歌被QQ,并不确定这个设置有没有副作用

pagespeed EnableFilters canonicalize_javascript_libraries;

把多个CSS文件合并成一个CSS文件(比较容易引起主题版面混乱,所以我禁用了)

#pagespeed EnableFilters combine_css;

重写CSS,首先加载渲染页面的CSS规则

pagespeed EnableFilters prioritize_critical_css;

把多个JavaScript文件合并成一个JavaScript文件,禁用原因同上,大家可以酌情开启

#pagespeed EnableFilters combine_javascript;

删除带默认属性的标签

pagespeed EnableFilters elide_attributes;

更换被导入文件的@import,精简CSS文件

pagespeed EnableFilters flatten_css_imports;
pagespeed CssFlattenMaxBytes 5120;

启用JavaScript缩小机制

pagespeed EnableFilters rewrite_javascript;

2.4 图片

ngx_pagespeed可以自动压缩图片、将图片格式转换为WebP(一种体积更小的图片格式)、延时加载图片、图片预加载等,如下:

####### 图片########

延时加载图片

pagespeed EnableFilters lazyload_images;

不加载显示区域以外的图片

pagespeed LazyloadImagesAfterOnload off;
pagespeed LazyloadImagesBlankUrl “https://wzfou.cdn.bcebos.com/1.gif“;

启用图片优化机制(主要是 inline_images, recompress_images, convert_to_webp_lossless(这个命令会把PNG和静态Gif图片转化为webp), and resize_images.)

pagespeed EnableFilters rewrite_images;
#组合 convert_gif_to_png, convert_jpeg_to_progressive, convert_jpeg_to_webp, convert_png_to_jpeg, jpeg_subsampling, recompress_jpeg, recompress_png, recompress_webp, #strip_image_color_profile, and strip_image_meta_data.
pagespeed EnableFilters recompress_images;

将JPEG图片转化为webp格式

pagespeed EnableFilters convert_jpeg_to_webp;

将动画Gif图片转化为动画webp格式

pagespeed EnableFilters convert_to_webp_animated;

图片预加载

pagespeed EnableFilters inline_preview_images;

移动端图片自适应重置

pagespeed EnableFilters resize_mobile_images;
pagespeed EnableFilters responsive_images,resize_images;
pagespeed EnableFilters insert_image_dimensions;
pagespeed EnableFilters resize_rendered_image_dimensions;
pagespeed EnableFilters strip_image_meta_data;
pagespeed EnableFilters convert_jpeg_to_webp,convert_to_webp_lossless,convert_to_webp_animated;
pagespeed EnableFilters sprite_images;
pagespeed EnableFilters convert_png_to_jpeg,convert_jpeg_to_webp;

#让JS里引用的图片也加入优化
pagespeed InPlaceResourceOptimization on;
pagespeed EnableFilters in_place_optimize_for_browser;

2.5 CDN

如果你的网站里的图片、JS和CSS等启用了CDN加速,那么可以利用ngx_pagespeed的域名重写功能,将静态文件的地址替换为CDN的加速地址。此处比较适合用了又拍云七牛云、阿里云OSS的镜像CDN加速功能。

#启用静态文件CDN加速
pagespeed EnableFilters rewrite_domains;
pagespeed Domain https://wzfou.com;
pagespeed MapRewriteDomain https://cdn.wzfou.com https://wzfou.com;

2.6 排除

想要让某一个页面或者目录不使用ngx_pagespeed,使用以下命令:

# 过滤不需要启用的目录或文件
#pagespeed Disallow “*/wp-admin/*“;
#pagespeed Disallow “*/wp-login.php*“;
pagespeed Disallow “*/vps-pingfen/“;

启用压缩空白过滤器

pagespeed EnableFilters collapse_whitespace;

预解析DNS查询

pagespeed EnableFilters insert_dns_prefetch;

三、Nginx代码配置示例

这里贴出挖站否的Nginx PageSpeed配置示例,以供大家参考: PageSpeed配置代码 Nginx.conf配置如下:

# 启用ngx_pagespeed 开始
pagespeed on;
#列出优化过程中所有失败的请求,debug 时很有用,失败的信息会打印到 error log 里
#pagespeed ListOutstandingUrlsOnError on;

配置服务器缓存位置和自动清除触发条件(空间大小、时限)

#路径请提前创建好,可以放在内存也可以放在临时文件夹中
pagespeed CreateSharedMemoryMetadataCache /tmp/ngx_pagespeed_cache 51200;
pagespeed DefaultSharedMemoryCacheKB 51200;
pagespeed FileCachePath /tmp/ngx_pagespeed_cache;
pagespeed FileCacheSizeKb 2048000;
pagespeed FileCacheCleanIntervalMs 43200000;
pagespeed FileCacheInodeLimit 500000;

过滤器级别(自定义模式)

pagespeed RewriteLevel PassThrough;

一个标识而已(若在浏览器开发者工具里的链接请求响应标头看到此标识,则说明 PageSpeed 生效)

pagespeed XHeaderValue “Powered By wzfou.com”;

HTML页面链接转小写(SEO 优化,推荐)

pagespeed LowercaseHtmlNames on;

重置 HTTP Vary 头 除非有特殊需求,建议不开启,默认配置往往是最佳配置

pagespeed RespectVary on;

#PageSpeed能够根据响应头中指定的任何内容安全策略调整其优化
pagespeed HonorCsp on;
#PageSpeed 默认遵守 Cache-Control: no-transform 协议, 表示不可被中间代理软件改写,如果想让优化效果最大化,可以关闭
#pagespeed DisableRewriteOnNoTransform off;

启用 样式属性/CSS/JavaScript/Images 重写,其它功能的先决开关

pagespeed EnableFilters rewrite_style_attributes,rewrite_css,rewrite_javascript,rewrite_images;
#重写CSS文件,以便首先加载渲染页面的CSS规则。
pagespeed EnableFilters prioritize_critical_css;

###########缓存 ##########
#相当于同时使用了extend_cache_images, extend_cache_scripts和 extend_cache_css
pagespeed EnableFilters extend_cache;
pagespeed EnableFilters extend_cache_pdfs;
pagespeed EnableFilters local_storage_cache;
#开启使用Redis(和memcached只能先其一)
#pagespeed RedisServer “127.0.0.1:6379”;

memcached优化,如果没有memcached优化请删去

pagespeed MemcachedThreads 1;
pagespeed MemcachedServers “127.0.0.1:11211”;

######## 过滤规则 ########

过滤不需要启用的目录或文件

#pagespeed Disallow “*/wp-admin/*“;
#pagespeed Disallow “*/wp-login.php*“;
pagespeed Disallow “*/vps-pingfen/“;

启用压缩空白过滤器

pagespeed EnableFilters collapse_whitespace;

预解析DNS查询

pagespeed EnableFilters insert_dns_prefetch;

########JS和CSS########

启用JavaScript库卸载 #谷歌被QQ,并不确定这个设置有没有副作用

pagespeed EnableFilters canonicalize_javascript_libraries;

把多个CSS文件合并成一个CSS文件(比较容易引起主题版面混乱,所以我禁用了

#pagespeed EnableFilters combine_css;

重写CSS,首先加载渲染页面的CSS规则

pagespeed EnableFilters prioritize_critical_css;

把多个JavaScript文件合并成一个JavaScript文件,禁用原因同上,大家可以酌情开启

#pagespeed EnableFilters combine_javascript;

删除带默认属性的标签

pagespeed EnableFilters elide_attributes;

更换被导入文件的@import,精简CSS文件

pagespeed EnableFilters flatten_css_imports;
pagespeed CssFlattenMaxBytes 5120;

启用JavaScript缩小机制

pagespeed EnableFilters rewrite_javascript;

####### 图片########

延时加载图片

pagespeed EnableFilters lazyload_images;

不加载显示区域以外的图片

pagespeed LazyloadImagesAfterOnload off;
pagespeed LazyloadImagesBlankUrl “https://wzfou.cdn.bcebos.com/1.gif“;

启用图片优化机制(主要是 inline_images, recompress_images, convert_to_webp_lossless(这个命令会把PNG和静态Gif图片转化为webp), and resize_images.)

pagespeed EnableFilters rewrite_images;
#组合 convert_gif_to_png, convert_jpeg_to_progressive, convert_jpeg_to_webp, convert_png_to_jpeg, jpeg_subsampling, recompress_jpeg, recompress_png, recompress_webp, #strip_image_color_profile, and strip_image_meta_data.
pagespeed EnableFilters recompress_images;

将JPEG图片转化为webp格式

pagespeed EnableFilters convert_jpeg_to_webp;

将动画Gif图片转化为动画webp格式

pagespeed EnableFilters convert_to_webp_animated;

pagespeed EnableFilters inline_preview_images;
pagespeed EnableFilters resize_mobile_images;
pagespeed EnableFilters responsive_images,resize_images;
pagespeed EnableFilters insert_image_dimensions;
pagespeed EnableFilters resize_rendered_image_dimensions;
pagespeed EnableFilters strip_image_meta_data;
pagespeed EnableFilters convert_jpeg_to_webp,convert_to_webp_lossless,convert_to_webp_animated;
pagespeed EnableFilters sprite_images;
pagespeed EnableFilters convert_png_to_jpeg,convert_jpeg_to_webp;

#让JS里引用的图片也加入优化
pagespeed InPlaceResourceOptimization on;
pagespeed EnableFilters in_place_optimize_for_browser;

启用ngx_pagespeed 结束

wzfou.com.conf的配置如下:

# 启用ngx_pagespeed 开始

pagespeed EnableFilters rewrite_domains;
pagespeed Domain https://wzfou.com;
pagespeed MapRewriteDomain https://wzfou.cdn.bcebos.com https://wzfou.com;

不能删 。确保对pagespeed优化资源的请求进入pagespeed处理程序并且没有额外的头部信息

location ~ “\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+” { add_header “” “”; }
location ~ “^/pagespeed_static/“ { }
location ~ “^/ngx_pagespeed_beacon$” { }
location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
location /pagespeed_console { allow 127.0.0.1; deny all; }
location ~ ^/pagespeed_admin { allow 127.0.0.1; deny all; }
location ~ ^/pagespeed_global_admin { allow 127.0.0.1; deny all; }

启用ngx_pagespeed 结束

四、PageSpeed加速效果

使用Nginx PageSpeed最大的好处就是网站的图片被无损(至少肉眼是无法分辨出来)压缩到了WebP格式,这大大加快了以浏览器的下载速度。 ngx_pagespeed压缩图片 尤其是网站图片比较大的话,WebP格式加速作用就更加明显。体验:https://ttfou.com/explore/recenthttps://pic.tietufou.com/found ngx_pagespeed网站图片 另外,网站的JS和CSS地址也会被重写,如下图: ngx_pagespeed重写地址 如果你启用了磁盘缓存,你就可以看到缓存生成的文件了,如果要清除缓存可以手动把这些缓存文件给删除了: PageSpeed缓存文件 Nginx PageSpeed的图片延迟加载效果也可以点击查看以下视频:

视频播放器

00:00

00:10

五、PageSpeed使用问题

5.1 系统负载增高

Nginx PageSpeed在重写URL、转换图片格式等过程中需要用到系统更多的内存和CPU,所以在刚开机没有建立缓存时会发现系统负载增高的现象,要发挥Nginx PageSpeed的作用要保证一个高性能的CPU和内存。 PageSpeed增加系统负载

5.2 网页错乱

这种情况通常见于开启了CSS和JS合并,如果你出现这样的问题可以关闭CSS和JS文件合并甚至是重写等。 PageSpeed网页布局错乱

5.3 清除缓存

启用了Nginx PageSpeed后,如果你修改了网站的CSS或者JS等文件不清除缓存是无法生效了,清除缓存方法如下:

#手动删除,该目录为你在nginx设置的缓存目录
rm -fr /tmp/ngx_pagespeed_cache/*

#或者由pagespeed清空缓存 5秒后开始
sudo touch /tmp/ngx_pagespeed_cache/cache.flush

六、总结

ngx_pagespeed只是在服务器层面加快网站与浏览器的响应速度,主要是对JS、CSS、图片等进行优化。但是正如我之前所说的,要想速度更快根本的解决办法还是在硬件上,软件层面的优化是锦上添花,硬件层面的优化是雪中送炭。 Nginx PageSpeed的配置要根据不同的网站来设定,不一定所有的优化选项都需要开启。总的感觉是Nginx PageSpeed对那些网站图片多、JS和CSS多的比较有效果,适合CMS网站、网络相册等,提升浏览器的访问速度比较明显。

随着大家上网安全意识的增强,以及各大主要互联网公司对Https普及工作的推动,HTTPS SSL现在基本上成了建站的标配了。得益于Let’s Encrypt、Digicert、TrustAsia、Symantec等提供的免费SSL证书,现在不管是个人建站还是企业建站,上Https的成本可以忽略不计了。 为了安全,我们要上Https,但是开启 SSL 会增加内存、CPU、网络带宽的开销。相对于http,使用TCP 三次握手建立连接,客户端和服务器需要交换3个包,https除了 TCP 的三个包,还要加上 ssl握手需要的9个包,一共是12个包。所以,HTTPS优化得不少反而容易出现性能慢的问题。 当然,有人可能为会认为HTTPS与SSL增加的服务器开销基本上没有感觉到,这是因为网站的流量比较少,加上服务器的性能配置足以支撑起当前的流量。但是对于大型的网站,例如百度、Google以及热门APP,优化Https性能,减少资源消耗还是非常有用的。 八个HTTPS和SSL优化使用心得-减少等待时间降低Https性能损耗加大SSL缓存 本篇文章就来分享一下HTTPS和SSL优化使用几点心得体会,更多的有关于SSL证书和Https经验教程还有:

  1. 免费SSL证书收集整理汇总-免费给网站添加Https安全加密访问
  2. 十个你可能不知道的CloudFlare免费CDN加速技巧-SSL\DDOS\Cache
  3. 启用HSTS并加入HSTS Preload List让网站Https访问更加安全-附删除HSTS方法

PS:2018年9月6日更新,如果想要使用付费的DNS解析服务,这里有两个比较便宜的比较适合个人的DNS服务:两款适合个人使用的DNS产品:ClouDNS和DNS Made Easy域名解析。 **PS:2019年1月15日更新,**想要SSL访问获得更快的速度以及更高的性能,可以试试TLSV1.3和Brotli压缩:网站优化加速-开启TLSV1.3和Brotli压缩-Oneinstack,LNMP,宝塔面板

一、如何选择免费SSL证书?

**建议选择Let’s Encrypt。**Let’s Encrypt免费SSL证书虽然只有90天,但是可以无限期续期,并且支持手动和自动续期。Let’s Encrypt SSL在各大浏览器上都得到认可,是免费SSL证书的首选。教程:Let’s Encrypt Wildcard 免费泛域名SSL证书一键申请与SSL使用教程如何选择免费SSL证书 Let’s Encrypt适用于VPS等有独立IP的主机上,否则只能使用一些利用Let’s Encrypt API开发的在线SSL证书申请。当然,有一定的经济实力的话自然选择付费的SSL证书更为可行,更多SSL证书见:免费SSL证书收集整理汇总

二、服务器开启HSTS

采用 HSTS 协议的网站将保证浏览器始终连接到网站的HTTPS版本,而不需要用户手动在URL地址栏中输入包含https://的加密地址。我用的是Nginx 服务器,只需要编辑 Nginx 配置文件(如:/usr/local/nginx/conf/nginx.conf)将下面行添加到 HTTPS 配置的 server 块中即可:

add_header Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”;

Apache、Lighttpd等启用HSTS详细的方法见:服务器启用HSTS服务器开启HSTS

三、域名加入HSTS preload list计划

上面虽然是启用了HSTS 协议保证了用户访问的始终是Https连接,但是一般地首次访问网站用户都会习惯性地输入非https域名,这就导致了第一次访问网站容易出现http劫持的问题。HSTS preload list计划就是为了解决这个问题的,它是chrome\Firefox\Edge等浏览器内置的列表。 域名加入HSTS preload list计划 加入HSTS Preload List的方法:启用HSTS并加入HSTS Preload List让网站Https访问更加安全-附删除HSTS方法。目前wzfou.com已经成功加入到了HSTS preload list,如果你用的是Chrome或者Firefox,第一次访问本站就是默认用Https连接的。 域名加入HSTS preload list计划成功提交

四、开启HTTP/2和OCSP Stapling

HTTP/2 相比于之前的HTTP/1.1 在性能上的大幅度提升,所以只要你启用了Https,记得一定要开启HTTP/2,检查一下你的配置文件是否有:listen 443 ssl http2; OCSP Stapling 服务器事先模拟浏览器对证书链进行验证,然后将 OCSP 验证结果缓存到本地。这样,当浏览器访问站点时,在握手阶段,可以直接拿到 OCSP 响应结果和证书链,对访问速度有明显提升。 开启HTTP/2和OCSP Stapling Nginx 中开启 OCSP Stapling。(如果 ssl_certificate 指令指定了完整的证书链,则 ssl_trusted_certificate 可省略)

1
2
3
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/certs/chained.pem;

Apache 中开启 OCSP Stapling: 在 <VirtualHost></VirtualHost> 中添加:

1
SSLUseStapling on

在 <VirtualHost></VirtualHost> 外添加:

1
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)

五、使用ECC和RSA双证书

默认的我们都会使用RSA证书,因为RSA证书的兼容性最为广泛。但是ECC 证书拥有体积小、运算速度快、安全性高(256位ECC key就能起到相当于3072位的RSA key的安全性)等特点,可以在一定程度上提供Https性能。 使用ECC和RSA双证书 Let’s Encrypt已经支持生成ECC 证书了,使用 acme.sh 签发SSL证书, 指定 --keylength ec-256 就可以将证书类型改为 ECC:

acme.sh –issue -w /data/wwwroot/wzfou.com -d wzfou.com -d www.wzfou.com –keylength ec-256

需要注意的是ECC在Windows XP上不兼容,这个时候我们就会想到用双证书了,即当不支持ECC证书时Nginx自动将RSA证书展示给用户。如果nginx 的版本大于1.11,直接就可以在配置文件中写上ECC和RSA双证书的路径了,wzfou.com演示如下:

1
2
3
4
5
6
#ECC
ssl_certificate /root/.acme.sh/wzfou.com_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/wzfou.com_ecc/wzfou.com.key;
#RSA
ssl_certificate /usr/local/nginx/conf/ssl/wzfou.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/wzfou.com.key;

重启Nginx,当XP等不支持ECC证书的用户访问网站时,显示的是RSA证书。 显示RSA证书 而其它的用户则优先使用ECC证书。 使用ECC证书 如果你发现ECC没有优先显示,检查一下ssl_prefer_server_ciphers是否开启,同时ssl_ciphers有没有配置好,以下是wzfou.com当用的配置:

1
2
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;

另外,下面三个任选其一即可(仅供测试):

1
2
3
4
5
ssl_ciphers 'EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5';

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';

六、 开启DNS CAA

DNS CAA的作用是只允许在记录中列出的 CA 机构颁发针对该域名(或子域名)的证书,以防止有人伪造SSL证书,同时CAA 记录可以控制单域名 SS L证书的发行,也可以控制通配符证书。详细方法见:京东云DNS设置CAA开启CAA **问题:**开启DNS CAA导致错误:Verify error:CAA record for *.wzfou.comprevents issuance。解决的办法就是增加 issuewild 记录: 0 issuewild "letsencrypt.org" 。 另外提供两个检测CAA配置是否正确的网站:

  1. https://caatest.co.uk/
  2. https://dnsspy.io/labs/caa-validator

七、定期自动更新SSL证书

想手动更新方法:

1
2
3
4
5
# RSA
$ acme.sh --renew -d wzfou.com –d www.wzfou.com --force

# ECC
acme.sh --renew -d wzfou.com –d www.wzfou.com --force --ecc

一般地acme.sh已经自动添加了定时任务了,定期更新Let’s Encrypt证书,如果你发现没有定期更新证书,检查一下你的Cron任务是否正确,也可以试试强制更新:

1
"/root/.acme.sh"https://wzfou.cdn.bcebos.com/acme.sh --cron --home "/root/.acme.sh" --force

定期自动更新SSL证书

八、检测SSL证书配置

常用的检测网站有:

  1. https://www.ssllabs.com/ssltest/analyze.html
  2. https://myssl.com/

重点推荐用ssllabs.com,检测的结果还是非常地准确,如下: 检测SSL证书配置

九、综合

综合以上优化策略,Nginx的配置文件具体的优化如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
server {

listen 443 ssl http2;
#使用HTTP/2,需要Nginx1.9.7以上版本

add_header Strict-Transport-Security "max-age=6307200; includeSubdomains; preload";
#开启HSTS,并设置有效期为“6307200秒”(6个月),包括子域名(根据情况可删掉),预加载到浏览器缓存(根据情况可删掉)

add_header X-Frame-Options DENY;
#禁止被嵌入框架

add_header X-Content-Type-Options nosniff;
#防止在IE9、Chrome和Safari中的MIME类型混淆攻击

ssl_certificate /usr/local/nginx/conf/vhost/sslkey/www.linpx.com.crt;
ssl_certificate_key /usr/local/nginx/conf/vhost/sslkey/www.linpx.com.key;
#SSL证书文件位置

ssl_trusted_certificate /usr/local/nginx/conf/vhost/sslkey/chaine.pem;
#OCSP Stapling的证书位置

ssl_dhparam /usr/local/nginx/conf/vhost/sslkey/dhparam.pem;
#DH-Key交换密钥文件位置

#SSL优化配置

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#只允许TLS协议

ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
#加密套件,这里用了CloudFlare's Internet facing SSL cipher configuration

ssl_prefer_server_ciphers on;
#由服务器协商最佳的加密算法

ssl_session_cache builtin:1000 shared:SSL:10m;
#Session Cache,将Session缓存到服务器,这可能会占用更多的服务器资源

ssl_session_tickets on;
#开启浏览器的Session Ticket缓存

ssl_session_timeout 10m;
#SSL session过期时间

ssl_stapling on;
#OCSP Stapling开启,OCSP是用于在线查询证书吊销情况的服务,使用OCSP Stapling能将证书有效状态的信息缓存到服务器,提高TLS握手速度

ssl_stapling_verify on;
#OCSP Stapling验证开启

resolver 8.8.8.8 8.8.4.4 valid=300s;
#用于查询OCSP服务器的DNS

resolver_timeout 5s;
#查询域名超时时间

···

}

实际使用过程中发现个别的“优化”还得根据自身的需要来确定,以下是wzfou.com正在用的Nginx配置,仅供参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
listen 80; 
listen 443 ssl http2;
#ECC
ssl_certificate /root/.acme.sh/wzfou.com_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/wzfou.com_ecc/wzfou.com.key;
#RSA
ssl_certificate /usr/local/nginx/conf/ssl/wzfou.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/wzfou.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
ssl_stapling on;
ssl_stapling_verify on;

PS:2018年8月5日更新,感谢xiaoz的提醒,这里有一个在线生成SSL配置的网站,出自Mozilla,参考性非常高:

  1. https://mozilla.github.io/server-side-tls/ssl-config-generator/

Oneinstack的防火墙规则对ping进行了限制,导致有时用站长工具测试时出现大量ping超时的问题,这种情况有时候不利于我们分析线路问题。 步骤1:备份 iptables-save > /etc/iptables.up.rules.bak 步骤2:删除规则 vim /etc/iptables.up.rules 手动删除即可。 步骤3:导入新规则 iptables-restore < /etc/iptables.up.rules 最后,重启VPS就可以生效了。 找不到iptables.up.rules,可以用命令:whereis iptables,不同的服务器保存的rules名称可能会不一样。

OneinStack 自带了Let’s Encrypt安装组件,想要使用SSL证书的朋友只需要在创建网站时输入域名,然后就可以自动为域名配置SSL证书了,并且OneinStack 还会贴心地设置Let’s Encrypt证书自动续期。至于其它的Memcached、Redis、ionCube、ZendGuardLoader等都可以一键安装。 OneinStack一键安装脚本-轻松部署Let’s Encrypt证书和配置Https站点 本篇文章就来分享一下我使用OneinStack面板的一些心得与体会,更多的关于建站软件与建站工具,你可以看看:

  1. Linux VPS建站工具LNMP 1.4安装与使用-SSL自动配置续期和多版本PHP支持
  2. ConoHa日本VPS主机使用感受-东京机房速度一般支付宝付款
  3. 用JW Player,ckplayer,Smartideo搭建视频直播站-支持各大视频网站和rtmp

一、OneinStack安装方法

OneinStack支持一键安装的操作系统有:CentOS 6~7(包括redhat) 、Debian 6~8 、Ubuntu 12~16 、Aliyun Linux 15.1。主要包括以下组合:

lnmp(Linux + Nginx+ MySQL+ PHP) lamp(Linux + Apache+ MySQL+ PHP) lnmpa(Linux + Nginx+ MySQL+ PHP+ Apache):Nginx处理静态,Apache(mod_php)处理动态PHP lnmt(Linux + Nginx+ MySQL+ Tomcat):Nginx处理静态,Tomcat(JDK)处理JAVA lnmh(Linux + Nginx+ MySQL+ HHVM)

OneinStack安装命令如下(如果有新的变化,请参考官网:https://oneinstack.com/):

1
2
3
4
5
6
7
8
9
yum -y install wget screen curl python #for CentOS/Redhat
# apt-get -y install wget screen curl python #for Debian/Ubuntu
wget http://aliyun-oss.linuxeye.com/oneinstack-full.tar.gz #阿里云经典网络下载
wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz #包含源码,国内外均可下载
wget http://mirrors.linuxeye.com/oneinstack.tar.gz #不包含源码,建议仅国外主机下载
tar xzf oneinstack-full.tar.gz
cd oneinstack #如果需要修改目录(安装、数据存储、Nginx日志),请修改options.conf文件
screen -S oneinstack #如果网路出现中断,可以执行命令`screen -R oneinstack`重新连接安装窗口
./install.sh #注:请勿sh install.sh或者bash install.sh这样执行

在安装过程中,脚本会让你先选择是否安装Nginx、Apache等。根据你自己的需要来选择不同的版本来安装,如果只是建站的话建议使用LNMP,不要使用LNMPA。 OneinStack选择Nginx 接着会要求你选择MysqL数据库版本,5.7版本在性能上有所提升,但是有些程序可能无法兼容MysqL 5.7以下,请谨慎安装与使用。 OneinStack选择MysqL版本 最后就是选择安装PHP的版本,还有各种组件,包括了缓存ZendOPcache、xcache、apcu、eAccelerator;php加解密工具ionCube、ZendGuardLoader ;还有Memcached、Redis等等。 OneinStack安装组件 这是OneinStack安装成功的界面。 OneinStack安装成功 打开你的IP,你就可以看到OneinStack默认页面了,这里会有探针、PHPmyAdmin等,直接点击就可以打开了。建议在正式生产环境中将此页面重命名或者直接删除,防止被人利用。 OneinStack探针

二、OneinStack一键部署Https站点

首先,如果你自己没有购买证书的话,可以先安装OneinStack提供的Let’s Encrypt申请部署组件,执行命令:./addons.sh,选择Let’s Encrypt安装。 OneinStack添加证书组件 接着,到你的域名DNS管理处,将域名的A记录解析到服务器上,因为我们在申请Let’s Encrypt证书时需要验证域名,如果没有解析会出失败的情况。 OneinStack解析域名 然后,你就可以执行命令:./vhost.sh,开始添加新的虚拟主机了。下面的配置是绑定wzfou.net域名,同时将www跳转到非www的,其它的文件目录都是默认,在最后一项选择安装Let’s Encrypt。 OneinStack创建网站 最后,选择OneinStack提供的默认URL重写规则,自带了Wordpress、DZ、typecho等热门程序。这是OneinStack添加虚拟主机成功的界面。 OneinStack添加网站成功 打开你的域名,这时你就可以看到Https站点已经部署成功了。 OneinStack站点部署Https成功

三、OneinStack多版本PHP共存

经过测试,LNMP 1.4实现多版本PHP共存比较简单,有这个需要的朋友建议使用LNMP 1.4:Linux VPS建站工具LNMP 1.4安装与使用-SSL自动配置续期和多版本PHP支持。 OneinStack实现多版本PHP有些麻烦,以下内容参考自官网。如果你之前安装的是PHP 5.4,想要安装PHP 7,命令如下:

1
2
3
4
5
service php-fpm stop #后面需要再安装php,需要停止php
mv /etc/init.d/php-fpm{,_bk} #后面需要再安装php会覆盖,备份启动脚本
默认php5.4安装路径是/usr/local/php,如果再次安装会提示php已经安装,因此必须修改options.conf的php安装目录,将php7安装路径设置为/usr/local/php7,修改/root/oneinstack/options.conf:
php_install_dir=/usr/local/php7
再次执行./install.sh,选择Install php-7,其余均选择n,等待ing

修改php配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
service php-fpm stop #停止php7启动脚本
mv /etc/init.d/php-fpm /etc/init.d/php7-fpm #重命名php7启动脚本
mv /etc/init.d/php-fpm_bk /etc/init.d/php-fpm #恢复php5.4启动脚本
设置php5.4、php7开机自启动:
# CentOS:
chkconfig --add php7-fpm
chkconfig --add php-fpm
chkconfig php7-fpm on
chkconfig php-fpm on
# Ubuntu/Debian:
update-rc.d php7-fpm defaults
update-rc.d php-fpm defaults
防止php5.4、php7监听sock冲突,修改php7的listen,更改配置文件/usr/local/php7/etc/php-fpm.conf:
listen = /dev/shm/php-cgi.sock
#改成
listen = /dev/shm/php7-cgi.sock
手工启动php5.4、php7:
service php-fpm start #启动php5.4
service php7-fpm start #启动php7

修改nginx虚拟主机配置文件:

1
2
3
4
5
6
./vhost.sh绑定域名,默认是运行在php5.4,如需要将网站运行在php7下,需要修改/usr/local/nginx/conf/vhost/www.oneinstack.com.conf(www.oneinstack.com改成自己绑定域名):
fastcgi_pass unix:/dev/shm/php-cgi.sock;
#改成
fastcgi_pass unix:/dev/shm/php7-cgi.sock;
重新加载nginx,使配置生效:
service nginx reload

四、使用OneinStack遇到的问题

**第一个问题:let’s encpty SSL证书自动续期失败。**我之前遇到过这样的问题,猜测的原因可能是OneinStack在执行let’s encpty 续期时因为80端口被Nginx占用而导致失败的。解决的办法停止Nginx,然后自己手动执行一下Crontab定时任务。或者直接强制执行:

1
/usr/local/python/bin/certbot renew –force-renewal –renew-hook “/etc/init.d/nginx reload”

**第二个问题:修改PHP后不生效。**这是因为在安装OneinStack时默认地给PHP环境默认加载了Opcache模块(PHP5.5、5.6、7.0、7.1),修改PHP代码后一般要1分钟后才见效。解决办法可以卸载Opcache,或者自己访问http://公网IP/ocp.php,重置缓存。 OneinStack重置缓存 **第三个问题:OneinStack无法发送邮件。**这是因为OneinStack没有PHP mail,你需要自己安装postfix或者使用第三方的SMTP如sendcloud、Amazon SES、MailGun等发送。

Oneinstack是一个Linux + Nginx+ Apache+MySQL/MongoDB+ PHP一键安装包,支持的模式有:lnmp、lamp、lnmpa、lnpp、lnmh等等。相对于LNMP.org的LNMP一键安装包,Oneinstack主要特点是版本更新很及时,特别适合愿意折腾的用户。 目前Oneinstack的PHP已经支持PHP 7.4了,喜欢尝鲜的朋友可以试试升级了,不过用于生产环境的话还是建议使用成熟的PHP版本,不容易出现问题。由于挖站否平时用Oneinstack建站,所以好多的折腾都是基于Oneinstack完成的,这篇就作一个收集整理汇总,以便于查找。

Oneinstack从入门到精通-Oneinstack安装与使用教程收集整理

更多的主机面板,这里有几个汇总专题可供参考:SolusVM从入门到精通服务器控制面板榜单WHMCS从入门到精通

Oneinstack从入门到精通-Oneinstack安装与使用教程收集整理

目录

教程地址

主要内容

安装

OneinStack一键安装

OneinStack一键安装脚本-轻松部署Let’s Encrypt证书配置Https站点

防火墙

Ping超时问题

解决ONEINSTACK PING超时问题-LINUX防火墙规则修改与恢复

模块

ngx_pagespeed模块

PageSpeed服务器优化神器-Nginx部署ngx_pagespeed模块和加速效果体验

Https

HTTPS和SSL优化

八个HTTPS和SSL优化使用心得-减少等待时间和降低Https性能损耗

HSTS

启用HSTS

启用HSTS并加入HSTS Preload List让网站Https访问更加安全-附删除HSTS方法

B-B-r

一键安装加速模块

VPS主机加速方法 – 一键安装加速模块 从“软件”上提升VPS主机速度

优化

开启TLSV1.3和Brotli压缩

网站优化加速-开启TLSV1.3和Brotli压缩-Oneinstack,LNMP,宝塔面板

缓存

Nginx fastcgi_cache缓存

WordPress开启Nginx fastcgi_cache缓存加速方法-Nginx配置实例

内存

php-fpm优化

Linux的php-fpm优化心得-php-fpm进程占用内存大和不释放内存问题

TTRSS

自建RSS阅读器

自建RSS阅读器Tiny Tiny RSS安装和配置自动更新,全文RSS,更换主题,手机RSS登录

NextCloud

安装NextCloud

Oneinstack安装NextCloud以及使用Aria2离线下载和ocDownloader插件配置

测试环境: 硬件:一台主DNS服务器 一台从DNS服务器,一台子域DNS服务器  (一个有更改NS解析地址权限的二级域名) 系统:Centos 6.5 x86_64 BIND版本:9.9.5 下面是两台服务器的网络情况

[root@LookBack223 ~]``# ifconfig awk -F'[ :]+' '/inet addr/{print$4}' grep -vE "^127."

92.222.219.223 #DNS主服务器

=============================================================================

[root@LookBack226 ~]``# ifconfig awk -F'[ :]+' '/inet addr/{print$4}' grep -vE "^127."

92.222.219.226 #DNS从服务器

=============================================================================

[root@LookBack37 ~]``# ifconfig awk -F'[ :]+' '/inet addr/{print$4}' grep -vE "^127."

37.59.108.37 #DNS子域服务器

 


一、安装bind(由于现在的bind大版本有9和10,这里用9版本来测试。)

bind-9.9.5.tar.gz下载

(官方下载地址:http://www.isc.org/downloads/)

[root@LookBack223 ~]``# groupadd -g 153 -r named

[root@LookBack223 ~]``# useradd -g named -r -u 153 named

#在系统上创建一个GID为153 组名为named的系统组

#在系统上穿件一个UID为153 所在组为named 系统用户

[root@LookBack223 ~]``# yum groupinstall "Development tools" "Server Platform Development" -y

#安装开发库包,不然下面是编译不了的(自己安装make等程序也是可以的,这里只是为了取巧。)

[root@LookBack223 ~]``# wget -4c [http://www.05hd.com/wp-content/uploads/2014/08/bind-9.9.5.tar.gz](http://www.05hd.com/wp-content/uploads/2014/08/bind-9.9.5.tar.gz)

[root@LookBack223 ~]``# tar xf bind-9.9.5.tar.gz

[root@LookBack223 ~]``# cd bind-9.9.5

[root@LookBack223 bind-9.9.5]``# ./configure --prefix=/usr/local/bind995 --sysconfdir=/etc/named --disable-chroot --enable-threads --enable-ipv6

#指定bind安装到/usr/local/bind995目录下,指定配置文件在/etc/bind995目录下,关闭chroot功能,开启threads和ipv6功能,其他用默认,这里的编译选项请根据各自的实际需求来选择。

#如果能看到类似下面的信息且没有报错那么就可以继续往下走

========================================================================

Configuration summary:

------------------------------------------------------------------------

Optional features enabled:

Multiprocessing support (--``enable``-threads)

GSS-API (--with-gssapi)

Print backtrace on crash (--``enable``-backtrace)

Use symbol table for backtrace, named only (--``enable``-symtable)

Dynamically loadable zone (DLZ) drivers:

None

Features disabled or unavailable on this platform:

Response Rate Limiting (--``enable``-rrl)

PKCS``#11/Cryptoki support (--with-pkcs11)

New statistics (--``enable``-newstats)

Allow 'fixed' rrset-order (--``enable``-fixed-rrset)

Automated Testing Framework (--with-atf)

GOST algorithm support (--with-gost)

Python tools (--with-python)

XML statistics (--with-libxml2)

========================================================================

#开始编译

[root@localhost bind-9.9.5]``# make -j $(awk '/processor/{i++}}END{print i}' /proc/cpuinfo) && make install

 

[root@LookBack223 ~]``# dig -v

DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6

[root@LookBack223 ~]``# /usr/local/bind995/bin/dig -v

DiG 9.9.5

#系统上的虽然之前没有安装bind服务端但是客户端是有装的比如bind自带的dig程序,所以这里我们需要设置系统环境变量

[root@LookBack223 ~]``# echo "export PATH=/usr/local/bind/bin:/usr/local/bind/sbin:$PATH" > /etc/profile.d/bind.sh

[root@LookBack223 ~]``# ln -sv /usr/local/bind995 /usr/local/bind

[root@LookBack223 ~]``# . /etc/profile.d/bind.sh

[root@LookBack223 ~]``# echo $PATH

/usr/lib64/qt-3``.3``/bin``:``/usr/local/bind/bin``:``/usr/local/bind/sbin``:``/usr/local/sbin``:``/usr/local/bin``:``/sbin``:``/bin``:``/usr/sbin``:``/usr/bin``:``/root/bin

[root@LookBack223 ~]``# dig -v

DiG 9.9.5

#这时候就OK了

[root@LookBack223 ~]``# sed -i "$(awk '$1=="MANPATH"{n=NR}END{print n}' /etc/man.config)a MANPATHt/usr/local/bind/share/man" /etc/man.config

#导出帮助手册,是系统可以直接man named命令

如果有如下提示

awk``: 命令行:1: 致命错误: 无法以读模式打开文件“``/etc/man``.config”(没有那个文件或目录)

sed``:无法读取 /etc/man``.config:没有那个文件或目录

那就需要安装``man

[root@LookBack223 ~]``# yum install man -y


二、开始配置基础的配置文件

[root@LookBack223 ~]``# cat > /etc/named/named.conf << EOF

options {

directory "/var/named"``;

//``定义工作目录

recursion yes``;

//``允许递归

};

zone "." IN  {

type hint;

file "named.ca"``;

};

zone "localhost" IN  {

type master;

//``定义为主DNS  master

file "localhost.zone"``;

allow-update { none; };

//``不允许任何人更新

};

zone "0.0.127.in-addr.arpa"  IN  {

//``把127.0.0反向解析

type master;

file "127.0.0.zone"``;

allow-update { none; };

};

EOF

[root@LookBack223 ~]``# chown root:named /etc/named/named.conf

[root@LookBack223 ~]``# chmod 640 /etc/named/named.conf

[root@LookBack223 ~]``# mkdir -p /var/named/slaves

[root@LookBack223 ~]``# chown root:named /var/named/

[root@LookBack223 ~]``# chown named:named /var/named/slaves/

[root@LookBack223 ~]``# chmod 750 /var/named/

[root@LookBack223 ~]``# chmod 770 /var/named/slaves/

#制作相关配置文件和设置文件对应的权限

自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果


下面开始来配置实现正向解析

[root@LookBack223 named]``# for i in $(grep 'file' /etc/named/named.conf awk -F'"' '{print$2}'); do touch /var/named/$i;chgrp named /var/named/$i;chmod 640 /var/named/$i;done

[root@LookBack223 named]``# pwd

/var/named

[root@LookBack223 named]``# tree

.

├── 127.0.0.zone

├── localhost.zone

├── named.ca

└── slaves

1 directory, 3 files

#到这里 几个基础的文件就都创建好了,现在需要不足文件里面的配置信息

[root@LookBack223 named]``# dig -t NS . @a.root-servers.net. > /var/named/named.ca

#获取13台根服务器的配置文件,我们上面已经配置了将跟解析放在/var/named/named.cd,所以我么直接用dig命令将结果重定向过去就好了

 

####下面是3个文件的配置内容####

[root@LookBack223 named]``# cat named.ca

; > DiG 9.9.5 > -t NS . @a.root-servers.net.

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id``: 18948

;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 25

;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 4096

;; QUESTION SECTION:

;.              IN  NS

;; ANSWER SECTION:

.           518400  IN  NS  b.root-servers.net.

.           518400  IN  NS  h.root-servers.net.

.           518400  IN  NS  i.root-servers.net.

.           518400  IN  NS  l.root-servers.net.

.           518400  IN  NS  f.root-servers.net.

.           518400  IN  NS  g.root-servers.net.

.           518400  IN  NS  d.root-servers.net.

.           518400  IN  NS  j.root-servers.net.

.           518400  IN  NS  a.root-servers.net.

.           518400  IN  NS  k.root-servers.net.

.           518400  IN  NS  m.root-servers.net.

.           518400  IN  NS  c.root-servers.net.

.           518400  IN  NS  e.root-servers.net.

;; ADDITIONAL SECTION:

b.root-servers.net. 3600000 IN  A   192.228.79.201

b.root-servers.net. 3600000 IN  AAAA    2001:500:84::b

h.root-servers.net. 3600000 IN  A   128.63.2.53

h.root-servers.net. 3600000 IN  AAAA    2001:500:1::803f:235

i.root-servers.net. 3600000 IN  A   192.36.148.17

i.root-servers.net. 3600000 IN  AAAA    2001:7fe::53

l.root-servers.net. 3600000 IN  A   199.7.83.42

l.root-servers.net. 3600000 IN  AAAA    2001:500:3::42

f.root-servers.net. 3600000 IN  A   192.5.5.241

f.root-servers.net. 3600000 IN  AAAA    2001:500:2f::f

g.root-servers.net. 3600000 IN  A   192.112.36.4

d.root-servers.net. 3600000 IN  A   199.7.91.13

d.root-servers.net. 3600000 IN  AAAA    2001:500:2d::d

j.root-servers.net. 3600000 IN  A   192.58.128.30

j.root-servers.net. 3600000 IN  AAAA    2001:503:c27::2:30

a.root-servers.net. 3600000 IN  A   198.41.0.4

a.root-servers.net. 3600000 IN  AAAA    2001:503:ba3e::2:30

k.root-servers.net. 3600000 IN  A   193.0.14.129

k.root-servers.net. 3600000 IN  AAAA    2001:7fd::1

m.root-servers.net. 3600000 IN  A   202.12.27.33

m.root-servers.net. 3600000 IN  AAAA    2001:dc3::35

c.root-servers.net. 3600000 IN  A   192.33.4.12

c.root-servers.net. 3600000 IN  AAAA    2001:500:2::c

e.root-servers.net. 3600000 IN  A   192.203.230.10

;; Query time``: 65 msec

;; SERVER: 198.41.0.4``#53(198.41.0.4)

;; WHEN: Wed Aug 06 05:22:48 UTC 2014

;; MSG SIZE  rcvd: 755

[root@LookBack223 named]``# cat localhost.zone

$TTL 86400

@   IN  SOA localhost.  admin.05hd.org. (

2014080601

3H

15M

7D

1D )

IN  NS  localhost.

IN  A   172.0.0.1

[root@LookBack223 named]``# cat 127.0.0.zone

$TTL 86400

@   IN  SOA localhost.  admin.05hd.org. (

2014080601

3H

15M

7D

1D )

IN  NS  localhost.

1   IN  PTR localhost.

 

[root@LookBack223 named]``# chgrp named 127.0.0.zone localhost.zone named.ca

[root@LookBack223 named]``# chmod 640 127.0.0.zone localhost.zone named.ca

[root@LookBack223 named]``# ll

total 16

-rw-r----- 1 root  named  128 Aug  6 06:24 127.0.0.zone

-rw-r----- 1 root  named  124 Aug  6 06:23 localhost.zone

-rw-r----- 1 root  named 2177 Aug  6 06:11 named.ca

drwxrwx--- 2 named named 4096 Aug  6 05:04 slaves

#修改3个文件的属主属组和权限

 

[root@LookBack223 named]``# named-checkconf

[root@LookBack223 named]``# named-checkconf /etc/named/named.conf

[root@LookBack223 named]``# named-checkzone "localhost" /var/named/localhost.zone

zone localhost``/IN``: loaded serial 2014080601

OK

[root@LookBack223 named]``# named-checkzone "0.0.127.in-addr.arpa" /var/named/127.0.0.zone

zone 0.0.127.``in``-addr.arpa``/IN``: loaded serial 2014080601

OK

##检测配置文件如下图

自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 到了这里我们就可以启动服务来测试了,但是这里的bind是我们编译安装的,编译安装是没有启动脚本的,下面制作启动脚本 将下面的内容保存为**/etc/rc.d/init.d/named (注意下面的高亮的两行中的bind安装目录,我这里安装在/usr/local/bind995就用这,其安装在其他目录请根据情况做修改)**

[root@LookBack223 named]``# wget -c4 [http://www.05hd.com/named.sh](http://www.05hd.com/named.sh) -O /etc/rc.d/init.d/named

##可以用上面的命令下载启动脚本 也可以用下面的源码自建 更可以自己手写启动脚本

#!/bin/bash

#

# description: named daemon

# chkconfig: - 25 80

#

pidFile=``/usr/local/bind995/var/run/named``.pid

lockFile=``/var/lock/subsys/named

confFile=``/etc/named/named``.conf

[ -r /etc/rc``.d``/init``.d``/functions ] && . /etc/rc``.d``/init``.d``/functions

start() {

if [ -e $lockFile ]; then

echo "named is already running..."

exit 0

fi

echo -n "Starting named:"

daemon --pidfile "$pidFile" /usr/local/bind995/sbin/named -u named -c "$confFile"

RETVAL=$?

echo

if [ $RETVAL -``eq 0 ]; then

touch $lockFile

return $RETVAL

else

rm -f $lockFile $pidFile

return 1

fi

}

stop() {

if [ ! -e $lockFile ]; then

echo "named is stopped."

# exit 0

fi

echo -n "Stopping named:"

killproc named

RETVAL=$?

echo

if [ $RETVAL -``eq 0 ];``then

rm -f $lockFile $pidFile

return 0

else

echo "Cannot stop named."

failure

return 1

fi

}

restart() {

stop

sleep 2

start

}

reload() {

echo -n "Reloading named: "

killproc named -HUP

#killall -HUP named

RETVAL=$?

echo

return $RETVAL

}

status() {

if pidof named &> /dev/null``; then

echo -n "named is running..."

success

echo

else

echo -n "named is stopped..."

success

echo

fi

}

usage() {

echo "Usage: named {startstoprestartstatusreload}"

}

case $1 in

start)

start ;;

stop)

stop ;;

restart)

restart ;;

status)

status ;;

reload)

reload ;;

*)

usage

exit 4

;;

esac

<a href=``"[http://www.dwhd.org/wp-content/uploads/2015/05/bind](http://www.dwhd.org/wp-content/uploads/2015/05/bind)使用详解45.png"``><img class=``"attachment-medium" src=``"[http://www.dwhd.org/wp-content/uploads/2015/05/bind](http://www.dwhd.org/wp-content/uploads/2015/05/bind)使用详解45.png" alt=``"bind使用详解45"  /><``/a``>

 

[root@LookBack223 named]``# chmod +x /etc/rc.d/init.d/named

[root@LookBack223 named]``# chkconfig --add named

[root@LookBack223 named]``# chkconfig named on

[root@LookBack223 named]``# chkconfig --list named

named           0:off   1:off   2:on    3:on    4:on    5:on    6:off

下面来测试启动脚本的正常与否 开始来启动named服务

[root@LookBack223 named]``# service named start

Starting named:                                            [  OK  ]

[root@LookBack223 named]``# service named restart

Stopping named:                                            [  OK  ]

Starting named:                                            [  OK  ]

[root@LookBack223 named]``# service named stop

Stopping named:                                            [  OK  ]

[root@LookBack223 named]``# service named start

Starting named:                                            [  OK  ]

[root@LookBack223 named]``# service named status

named is running...                                        [  OK  ]

来看下服务器启动情况和端口监听正常不 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 下面两图可以看出 服务器上的dns服务器已经OK了。 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果


三、现在来开始做域名正反向解析了

先来看看用于测试域名的为zeaxion.com

1、正向域解析配置

在/etc/named/named.conf配置文件里面追加下面的内容

zone "zeaxion.com"   IN  {

type master;

file "zeaxion.com.zone"``;

};

如下图: 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 创建/var/named/zeaxion.com.zone文件并写好配置内容

[root@LookBack223 named]``# touch /var/named/zeaxion.com.zone

[root@LookBack223 named]``# chgrp named /var/named/zeaxion.com.zone

[root@LookBack223 named]``# chmod 640 /var/named/zeaxion.com.zone

[root@LookBack223 named]``# cat zeaxion.com.zone

$TTL 600

@   IN  SOA ns.zeaxion.com. admin.zeaxion.com. (

;\ 上面的admin.zeaxion.com.其实邮箱地址,在这里邮箱地址不能使用@所以要使用.

2014080601

1H

10M

7D

2H )

IN  NS      ns.zeaxion.com.

IN  MX  10  mxdomain.qq.com.

ns.zeaxion.com. IN  A   106.186.17.185

www.zeaxion.com.    IN  A   106.186.17.185

manage.zeaxion.com. IN  A   106.186.17.185

如下图 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 然后检测下配置文件可有写法格式错误 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 到了这里我们需要去域名注册商处将域名的ns设置成ns.zeaxion.com和ns2.zeaxion.com,设置好了之后我们来看看在互联网上这个域名的DNS解析是否OK了

[root@LookBack226 ~]``# ifconfig awk -F'[ :]+' '/inet addr/{print$4}' grep -vE "^127."

92.222.219.226

[root@LookBack226 ~]``# dig +trace -t A www.zeaxion.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> +trace -t A www.zeaxion.com

;; global options: +cmd

.           509310  IN  NS  e.root-servers.net.

.           509310  IN  NS  a.root-servers.net.

.           509310  IN  NS  l.root-servers.net.

.           509310  IN  NS  d.root-servers.net.

.           509310  IN  NS  b.root-servers.net.

.           509310  IN  NS  m.root-servers.net.

.           509310  IN  NS  h.root-servers.net.

.           509310  IN  NS  f.root-servers.net.

.           509310  IN  NS  g.root-servers.net.

.           509310  IN  NS  j.root-servers.net.

.           509310  IN  NS  c.root-servers.net.

.           509310  IN  NS  k.root-servers.net.

.           509310  IN  NS  i.root-servers.net.

;; Received 228 bytes from 127.0.0.1``#53(127.0.0.1) in 2151 ms

com.            172800  IN  NS  a.gtld-servers.net.

com.            172800  IN  NS  b.gtld-servers.net.

com.            172800  IN  NS  c.gtld-servers.net.

com.            172800  IN  NS  d.gtld-servers.net.

com.            172800  IN  NS  e.gtld-servers.net.

com.            172800  IN  NS  f.gtld-servers.net.

com.            172800  IN  NS  g.gtld-servers.net.

com.            172800  IN  NS  h.gtld-servers.net.

com.            172800  IN  NS  i.gtld-servers.net.

com.            172800  IN  NS  j.gtld-servers.net.

com.            172800  IN  NS  k.gtld-servers.net.

com.            172800  IN  NS  l.gtld-servers.net.

com.            172800  IN  NS  m.gtld-servers.net.

;; Received 493 bytes from 198.41.0.4``#53(198.41.0.4) in 1180 ms

zeaxion.com.        172800  IN  NS  ns.zeaxion.com.

zeaxion.com.        172800  IN  NS  ns2.zeaxion.com.

;; Received 100 bytes from 2001:503:a83e::2:30``#53(2001:503:a83e::2:30) in 23 ms

www.zeaxion.com.    600 IN  A   106.186.17.185

zeaxion.com.        600 IN  NS  ns.zeaxion.com.

zeaxion.com.        600 IN  NS  ns2.zeaxion.com.

;; Received 116 bytes from 92.222.219.223``#53(92.222.219.223) in 0 ms

以上可以看出现在我们的基本的域名DNS解析已经搞定了。

2、反向域解析配置

在/etc/named/named.conf文件中加入

[root@LookBack223 named]``# zone  "219.222.92.in-addr.arpa"   {

type master;

file "92.222.219.zone"``;

};

创建一个/var/named/92.222.219.zone的文件,注意文件的属主数组权限,也可以用下面的命令自动生成/etc/named/named.conf配置内容需要的文件了,

[root@LookBack223 named]``# for i in $(grep 'file' /etc/named/named.conf awk -F'"' '{print$2}'); do touch /var/named/$i;chgrp named /var/named/$i;chmod 640 /var/named/$i;done

来看下/var/named/92.222.219.zone文件怎么做反接配置的 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果

[root@LookBack223 named]``# cat !$

cat 92.222.219.zone

$TTL 600

@   IN  SOA ns.zeaxion.com. admin.zeaxion.com. (

2014080601

1H

10M

7D

2H )

IN  NS      ns.zeaxion.com.

IN  NS      ns2.zeaxion.com.

219 IN  PTR     ns.zeaxion.com.

226 IN  PTR     ns2.zeaxion.com.

;106.186.17.185 IN  PTR zeaxion.com.

;106.186.17.185 IN  PTR www.zeaxion.com.

;106.186.17.185 IN  PTR manage.zeaxion.com.

####最后的3行不能用。。。请注意。。

接着来检测下配置文件,如果没有错误就让named重新载入下配置文件 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果

[root@LookBack223 named]``# named-checkconf

[root@LookBack223 named]``# named-checkzone "219.222.92.in-addr.arpa" 92.222.219.zone

zone 219.222.92.``in``-addr.arpa``/IN``: loaded serial 2014080601

OK

[root@LookBack223 named]``# service named reload

Reloading named:                                           [  OK  ]

[root@LookBack223 named]``#

自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果

[root@LookBack226 ~]``# ifconfig awk -F'[ :]+' '/inet addr/{print$4}' grep -vE "^127."

92.222.219.226

[root@LookBack226 ~]``# dig -x 92.222.219.223 @92.222.219.223

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> -x 92.222.219.223 @92.222.219.223

;; global options: +cmd

;; Got answer:

;; ->>HEADER<> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> -t AXFR 219.222.92.``in``-addr.arpa @92.222.219.223

;; global options: +cmd

219.222.92.``in``-addr.arpa. 600    IN  SOA ns.zeaxion.com. admin.zeaxion.com. 2014080601 3600 600 604800 7200

219.222.92.``in``-addr.arpa. 600    IN  NS  ns.zeaxion.com.

219.222.92.``in``-addr.arpa. 600    IN  NS  ns2.zeaxion.com.

223.219.222.92.``in``-addr.arpa. 600 IN PTR ns.zeaxion.com.

226.219.222.92.``in``-addr.arpa. 600 IN PTR ns2.zeaxion.com.

219.222.92.``in``-addr.arpa. 600    IN  SOA ns.zeaxion.com. admin.zeaxion.com. 2014080601 3600 600 604800 7200

;; Query time``: 1 msec

;; SERVER: 92.222.219.223``#53(92.222.219.223)

;; WHEN: Wed Aug  6 15:26:04 2014

;; XFR size: 6 records (messages 1, bytes 201)

到此 反向解析也配置好了。


四、配置多DNS主从复制

做主从复制的时候需要注意的几点的事情 (1)、从服务器的bind版本必须大于等于主服务器的bind版本。因为程序都是采取向下兼容的规则。如果从服务器版本低于主服务器那么很可能因为程序功能的改变导致失败 所以这里我们还是采取编译安装从服务器这样就可以保证主从服务器的bind都为同一版本。因为之前已经编译了一次 这里就不详说从服务器的编译安装过程了。直接使用下面的命令就可以了。 (2)、主从服务器的时间需要相对一致,所以我们这里给主从服务器都做NTP在线时间同步。http://www.pool.ntp.org/en/

[root@LookBack226 ~]```# echo "*/3 * * * *which ntpdate` fr.pool.ntp.org &> /dev/null” /var/spool/cron/root``

[root@LookBack226 ~]``# ntpdate fr.pool.ntp.org

6 Aug 15:58:38 ntpdate[21702]: Can't adjust the time of day: Operation not permitted

我这里由于2台测试机都是openvz的虚拟机,被机房设置不能修改时间,因为虚拟机需要和母机做同步时间,那么我这里的时间问题就无需操心了。

安装完毕之后还是需要重新启动下shell 或者服务器。因为系统的环境变量有改变。

[root@LookBack226 ~]``# groupadd -g 153 -r named

[root@LookBack226 ~]``# useradd -g named -r -u 153 named

[root@LookBack226 ~]``# yum groupinstall "Development tools" "Server Platform Development" -y

[root@LookBack226 ~]``# wget -4c [http://www.05hd.com/wp-content/uploads/2014/08/bind-9.9.5.tar.gz](http://www.05hd.com/wp-content/uploads/2014/08/bind-9.9.5.tar.gz)

[root@LookBack226 ~]``# tar xf bind-9.9.5.tar.gz

[root@LookBack226 ~]``# cd bind-9.9.5

[root@LookBack226 bind-9.9.5]``# ./configure --prefix=/usr/local/bind995 --sysconfdir=/etc/named --disable-chroot --enable-threads --enable-ipv6

[root@LookBack226 bind-9.9.5]``# make && make install

[root@LookBack226 ~]``# echo "export PATH=/usr/local/bind995/bin:/usr/local/bind995/sbin:$PATH" > /etc/profile.d/bind995.sh

[root@LookBack226 ~]``# sed -i "$(cat /etc/man.config grep -nE '^MANPATH[[:space:]]+' tail -1 awk -F: '{print$1}')a MANPATHt/usr/local/bind995/share/man" /etc/man.config

[root@LookBack226 ~]``# wget -c4 [http://www.05hd.com/named.sh](http://www.05hd.com/named.sh) -O /etc/rc.d/init.d/named

[root@LookBack226 ~]``# chmod +x /etc/rc.d/init.d/named

[root@LookBack226 ~]``# chkconfig --add named

[root@LookBack226 ~]``# chkconfig named on

[root@LookBack226 ~]``# chown root:named /etc/named/named.conf

[root@LookBack226 ~]``# chmod 640 /etc/named/named.conf

[root@LookBack226 ~]``# mkdir -p /var/named/slaves

[root@LookBack226 ~]``# chown root:named /var/named/

[root@LookBack226 ~]``# chown named:named /var/named/slaves/

[root@LookBack226 ~]``# chmod 750 /var/named/

[root@LookBack226 ~]``# chmod 770 /var/named/slaves/

#上面的步骤做好了 新建个shell进程进服务器或者直接重启下服务器

自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 上图可以看出 bind已经编译安装好了 系统环境变量也做OK了 首先来配置从服务器

[root@LookBack226 ~]``# cat /etc/named/named.conf

options {

listen-on port 53 { 127.0.0.1; 92.222.219.226; };``//``这里记得要换成从服务器的IPV4地址哦

listen-on-v6 port 53 { 2001:41d0:52:300::10f8; };``//``这里记得要换成从服务器的IPV6地址哦

directory "/var/named"``;

//``定义工作目录

recursion yes``;

//``允许递归

};

zone "." IN {

type hint;

file "named.ca"``;

};

zone "localhost" IN {

type master;

//``设施为主 master

file "localhost.zone"``;

allow-update { none; };

//``不允许任何人更新

};

zone "0.0.127.in-addr.arpa" IN {

//``把127.0.0反向解析

type master;

file "127.0.0.zone"``;

allow-update { none; };

};

zone "zeaxion.com" IN {

type slave; //``设置为从服务器

file "slaves/zeaxion.com.zone"``; //``设置从服务器配置文件存放路径

masters { 92.222.219.223; }; //``配置主DNS服务器的IP地址

};

zone "219.222.92.in-addr.arpa" {

type slave;

file "slaves/92.222.219.zone"``;

masters { 92.222.219.223; };

};

配置好了主配置文件后 ,和上面一样创建一个bind的启动脚本,然后启动服务。

来看看从服务器上的端口监听状态

<a href=``"[http://www.dwhd.org/wp-content/uploads/2015/05/bind](http://www.dwhd.org/wp-content/uploads/2015/05/bind)使用详解17.png"``><img class=``"attachment-medium" src=``"[http://www.dwhd.org/wp-content/uploads/2015/05/bind](http://www.dwhd.org/wp-content/uploads/2015/05/bind)使用详解17.png" alt=``"bind使用详解17"  /><``/a``>

然后来看看从服务器上的文件是否同步成功。。

<a href=``"[http://www.dwhd.org/wp-content/uploads/2015/05/bind](http://www.dwhd.org/wp-content/uploads/2015/05/bind)使用详解18.png"``><img class=``"attachment-medium" src=``"[http://www.dwhd.org/wp-content/uploads/2015/05/bind](http://www.dwhd.org/wp-content/uploads/2015/05/bind)使用详解18.png" alt=``"bind使用详解18"  /><``/a``>

来做下测试

 

[root@LookBack226 ~]``# ifconfig awk -F'[ :]+' '/inet addr/{print$4}' grep -vE "^127."

92.222.219.226

[root@LookBack226 ~]``# dig -x 92.222.219.223 @92.222.219.226

; <<>> DiG 9.9.5 <<>> -x 92.222.219.223 @92.222.219.226

;; global options: +cmd

;; Got answer:

;; ->>HEADER<> DiG 9.9.5 <<>> -x 92.222.219.226 @92.222.219.223

;; global options: +cmd

;; Got answer:

;; ->>HEADER<> DiG 9.9.5 <<>> -t AXFR 219.222.92.``in``-addr.arpa @92.222.219.226

;; global options: +cmd

219.222.92.``in``-addr.arpa. 600    IN  SOA ns.zeaxion.com. admin.zeaxion.com. 2014080601 3600 600 604800 7200

219.222.92.``in``-addr.arpa. 600    IN  NS  ns.zeaxion.com.

219.222.92.``in``-addr.arpa. 600    IN  NS  ns2.zeaxion.com.

223.219.222.92.``in``-addr.arpa. 600 IN PTR ns.zeaxion.com.

226.219.222.92.``in``-addr.arpa. 600 IN PTR ns2.zeaxion.com.

219.222.92.``in``-addr.arpa. 600    IN  SOA ns.zeaxion.com. admin.zeaxion.com. 2014080601 3600 600 604800 7200

;; Query time``: 0 msec

;; SERVER: 92.222.219.226``#53(92.222.219.226)

;; WHEN: Sat Aug 09 06:30:19 CEST 2014

;; XFR size: 6 records (messages 1, bytes 201)

[root@LookBack226 ~]``# dig -t A www.zeaxion.com @92.222.219.223

; <<>> DiG 9.9.5 <<>> -t A www.zeaxion.com @92.222.219.223

;; global options: +cmd

;; Got answer:

;; ->>HEADER<> DiG 9.9.5 <<>> -t A www.zeaxion.com @92.222.219.226

;; global options: +cmd

;; Got answer:

;; ->>HEADER<

自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 可以看出从服务器已经同步OK了。好了 到了这里 主从同步就做好了


五、DNS正向子域授权的配置

自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 其实DNS的子域授权只需要在父域的区域解析库中添加“胶水记录”就OK 下面来说说怎么配置子域授权DNS吧 自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 这里就不说子域授权的DNS服务器编译安装BIND和基础配置文件生成的过程了

[root@LookBack37 ~]``# groupadd -g 153 -r named

[root@LookBack37 ~]``# useradd -g named -r -u 153 named

[root@LookBack37 ~]``# yum groupinstall "Development tools" "Server Platform Development" -y

[root@LookBack37 ~]``# wget -4c [http://www.05hd.com/wp-content/uploads/2014/08/bind-9.9.5.tar.gz](http://www.05hd.com/wp-content/uploads/2014/08/bind-9.9.5.tar.gz)

[root@LookBack37 ~]``# tar xf bind-9.9.5.tar.gz

[root@LookBack37 ~]``# cd bind-9.9.5

[root@LookBack37 bind-9.9.5]``# ./configure --prefix=/usr/local/bind995 --sysconfdir=/etc/named --disable-chroot --enable-threads --enable-ipv6

[root@LookBack37 bind-9.9.5]``# make && make install

[root@LookBack37 ~]``# echo "export PATH=/usr/local/bind995/bin:/usr/local/bind995/sbin:$PATH" > /etc/profile.d/bind995.sh

[root@LookBack37 ~]``# sed -i "$(cat /etc/man.config grep -nE '^MANPATH[[:space:]]+' tail -1 awk -F: '{print$1}')a MANPATHt/usr/local/bind995/share/man" /etc/man.config

[root@LookBack37 ~]``# wget -c4 [http://www.05hd.com/named.sh](http://www.05hd.com/named.sh) -O /etc/rc.d/init.d/named

[root@LookBack37 ~]``# chmod +x /etc/rc.d/init.d/named

[root@LookBack37 ~]``# chkconfig --add named

[root@LookBack37 ~]``# chkconfig named on

[root@LookBack37 ~]``# chown root:named /etc/named/named.conf

[root@LookBack37 ~]``# chmod 640 /etc/named/named.conf

[root@LookBack37 ~]``# mkdir -p /var/named/slaves

[root@LookBack37 ~]``# chown root:named /var/named/

[root@LookBack37 ~]``# chown named:named /var/named/slaves/

[root@LookBack37 ~]``# chmod 750 /var/named/

[root@LookBack37 ~]``# chmod 770 /var/named/slaves/

#上面的步骤做好了 新建个shell进程进服务器或者直接重启下服务器

下面来配置主DNS服务器上的/var/named/zeaxion.com.zone文件

[root@LookBack1 named]``# pwd

/var/named

[root@LookBack1 named]``# cat zeaxion.com.zone

$TTL 600

@   IN  SOA ns.zeaxion.com. admin.zeaxion.com. (

;;上面的admin.zeaxion.com.其实邮箱地址,在这里邮箱地址不能使用@所以要使用.

2014080711

1H

10M

7D

2H )

IN  NS      ns.zeaxion.com.

IN  NS      ns2.zeaxion.com.

IN  MX  10  mxdomain.qq.com.

ns.zeaxion.com. IN  A           92.222.219.223

ns2.zeaxion.com. IN  A          92.222.219.226

www.zeaxion.com.    IN  A   106.186.17.185

web.zeaxion.com.    IN  A   106.186.17.185

manage.zeaxion.com. IN  A   106.186.17.185

ops.zeaxion.com.        IN      NS      ns.ops.zeaxion.com

nsops.zeaxion.com.    IN        A       37.59.108.37

配置好了来重启下服务

[root@LookBack1 named]``# /etc/init.d/named restart

Stopping named:                                            [  OK  ]

Starting named:                                            [  OK  ]

然后来看看效果

[root@LookBack1 named]``# dig -t NS ops.zeaxion.com @92.222.219.223

; <<>> DiG 9.9.5 <<>> -t NS ops.zeaxion.com @92.222.219.223

;; global options: +cmd

;; Got answer:

;; ->>HEADER<

是不是这时候主DNS服务器就不能解析ops.zeaxion.com的域了 但是看看下面会发现我们的FQDN是有信息的

[root@LookBack1 named]``# dig -t AXFR zeaxion.com @92.222.219.226

; <<>> DiG 9.9.5 <<>> -t AXFR zeaxion.com @92.222.219.226

;; global options: +cmd

zeaxion.com.            600     IN      SOA     ns.zeaxion.com. admin.zeaxion.com. 2014080713 3600 600 604800 7200

zeaxion.com.            600     IN      MX      10 mxdomain.qq.com.

zeaxion.com.            600     IN      NS      ns.zeaxion.com.

zeaxion.com.            600     IN      NS      ns2.zeaxion.com.

manage.zeaxion.com.     600     IN      A       106.186.17.185

ns.zeaxion.com.         600     IN      A       92.222.219.223

ns2.zeaxion.com.        600     IN      A       92.222.219.226

ops.zeaxion.com.        600     IN      NS      ns.ops.zeaxion.com.

ns.ops.zeaxion.com.     600     IN      A       37.59.108.37

web.zeaxion.com.        600     IN      A       106.186.17.185

www.zeaxion.com.        600     IN      A       106.186.17.185

zeaxion.com.            600     IN      SOA     ns.zeaxion.com. admin.zeaxion.com. 2014080713 3600 600 604800 7200

;; Query time``: 0 msec

;; SERVER: 92.222.219.226``#53(92.222.219.226)

;; WHEN: Sat Aug 09 11:26:22 CEST 2014

;; XFR size: 12 records (messages 1, bytes 302)

这时候我们就可以得出 虽然我们在主DNS服务器上都建立了解析 但是这时候的ops.zeaxion.com的子域主DNS服务器是不负责解析了 下面来配置子域的/etc/named/named.conf文件

[root@LookBack37 ~]``# vi /etc/named/named.conf

[root@LookBack37 ~]``# cat !$

cat /etc/named/named``.conf

options {

listen-on port 53 { 127.0.0.1; 37.59.108.37; };

listen-on-v6 port 53 { 2001:41d0:51:1::d1c; };

directory "/var/named"``;

//``定义工作目录

recursion yes``;

//``允许递归

};

zone "."     IN      {

type hint;

file "named.ca"``;

};

zone "localhost"     IN      {

type master;

//``设施为主  master

file "localhost.zone"``;

allow-update { none; };

//``不允许任何人更新

};

zone "0.0.127.in-addr.arpa"  IN      {

//``把127.0.0反向解析

type master;

file "127.0.0.zone"``;

allow-update { none; };

};

zone "ops.zeaxion.com"   IN      {

type master;

file "ops.zeaxion.com.zone"``;

//allow-update { 127.0.0.1; };

};

再去/var/named/下创建需要的文件

[root@LookBack37 ~]``# for i in $(grep 'file' /etc/named/named.conf awk -F'"' '{print$2}'); do touch /var/named/$i;chgrp named /var/named/$i;chmod 640 /var/named/$i;done

[root@LookBack37 ~]``# cd /var/named/

[root@LookBack37 named]``# ls -l

total 8

-rw-r----- 1 root  named    0 Aug  9 11:43 127.0.0.zone

drwxrwx--- 2 named named 4096 Jan 20  2014 data

drwxrwx--- 2 named named 4096 Aug  9 09:02 dynamic

-rw-r----- 1 root  named    0 Aug  9 11:43 localhost.zone

-rw-r----- 1 root  named    0 Aug  9 11:43 named.ca

-rw-r----- 1 root  named    0 Aug  9 11:43 ops.zeaxion.com.zone

##我这里就直接用命令批量创建好了文件  等下去补充文件内容

##127.0.0.zone  localhost.zone  named.ca  这3个文件和主从DNS服务器上文件内容是一样的

下面是 127.0.0.zone localhost.zone named.ca 3个文件的内容

[root@LookBack223 named]``# cat 127.0.0.zone

$TTL 86400

@       IN      SOA     localhost.      admin.05hd.org. (

2014080601

3H

15M

7D

1D )

IN      NS      localhost.

1       IN      PTR     localhost.

[root@LookBack223 named]``# cat localhost.zone

$TTL 86400

@       IN      SOA     localhost.      admin.05hd.org. (

2014080601

3H

15M

7D

1D )

IN      NS      localhost.

IN      A       127.0.0.1

[root@LookBack223 named]``# cat named.ca

; <<>> DiG 9.9.5 <<>> -t NS . @a.root-servers.net.

;; global options: +cmd

;; Got answer:

;; ->>HEADER<

下面来开始配置/var/named/ops.zeaxion.com.zone的配置文件

[root@LookBack37 named]``# cat ops.zeaxion.com.zone

$TTL 600

$ORIGIN ops.zeaxion.com.

@   IN  SOA ns.ops.zeaxion.com. admin.ops.zeaxion.com. (

2014080701 ;版本号

1H ;刷新时长

5M ;每5分钟做一次重试

3D ;过期时间

3H );否定回答时间)

IN NS ns ;这里ns后面不用写全了  因为第二行做了ORIGIN

IN  MX  10  mail

ns  IN  A   37.59.108.37

mail    IN  A   106.186.17.185

www IN  A   106.186.17.185

ftp IN  A   106.186.17.185

自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果 下面来启动子域服务器上DNS服务

[root@LookBack37 named]``# service named start

Starting named:                                            [  OK  ]

来测试下子域配置

[root@LookBack37 named]``# dig -t A www.ops.zeaxion.com @37.59.108.37

; <<>> DiG 9.9.5 <<>> -t A www.ops.zeaxion.com @37.59.108.37

;; global options: +cmd

;; Got answer:

;; ->>HEADER<> DiG 9.9.5 <<>> -t A www.ops.zeaxion.com @92.222.219.223

;; global options: +cmd

;; Got answer:

;; ->>HEADER<

 

[root@LookBack223 named]``# dig -t A www.ops.zeaxion.com

; <<>> DiG 9.9.5 <<>> -t A www.ops.zeaxion.com

;; global options: +cmd

;; Got answer:

;; ->>HEADER<

通过上面可以看出 不论是通过子域服务器查询还是通过父域查询 都可以了,也就是说到了这里 我们的子域服务器也OK了


六、配置转发

转发器顾名思义就是转发不是本机DNS所解析的服务至指定的服务器,这时候本机就是一个转发器了。 下面来看看第一种配置,转发器

[root@LookBack37 named]``# pwd

/etc/named

[root@LookBack37 named]``# cat named.conf

options {

listen-on port 53 { 127.0.0.1; 37.59.108.37; };

listen-on-v6 port 53 { 2001:41d0:51:1::d1c; };

directory "/var/named"``;

//``定义工作目录

recursion yes``;

//``允许递归

//forward only;

forward first;``//only 是先递归给指定服务器,如果没有答案那么结果就是没答案,first 是先递归查询 要是没答案就自己再找一圈

forwarders { 8.8.8.8; };``//``转发到哪个服务器上

};

下面来看看第二种配置,转发区域(只对指定的区域做转发,其他的任然是去根上查询)

#看zone  "zeaxion.com"   IN段中的配置,这里做了只转发zeaxion.com域的配置

[root@LookBack37 named]``# pwd

/etc/named

[root@LookBack37 named]``# cat named.conf

options {

listen-on port 53 { 127.0.0.1; 37.59.108.37; };

listen-on-v6 port 53 { 2001:41d0:51:1::d1c; };

directory "/var/named"``;

//``定义工作目录

recursion yes``;

//``允许递归

//forward only;

forward first;

forwarders { 8.8.8.8; };

};

zone "."     IN      {

type hint;

file "named.ca"``;

};

zone "localhost"     IN      {

type master;

//``设施为主  master

file "localhost.zone"``;

allow-update { none; };

//``不允许任何人更新

};

zone "0.0.127.in-addr.arpa"  IN      {

//``把127.0.0反向解析

type master;

file "127.0.0.zone"``;

allow-update { none; };

};

zone "ops.zeaxion.com"   IN      {

type master;

file "ops.zeaxion.com.zone"``;

//allow-update { 127.0.0.1; };

};

zone "zeaxion.com"   IN      {

type forward;

forward only;

forwarders { 92.222.219.223; 92.222.219.226; };

};

下面来看看效果

[root@LookBack37 named]``# dig -t A www.zeaxion.com @37.59.108.37

; <<>> DiG 9.9.5 <<>> -t A www.zeaxion.com @37.59.108.37

;; global options: +cmd

;; Got answer:

;; ->>HEADER<

老牌稳定商家推荐;OVZH.COM是一家专业的云计算托管服务商,自2017年以来,OVZH.COM为个人开发者和中小型企业客户提供了高质量稳定的专用服务器。以及其他各种托管和运维技术服务。并且专注于服务我们的客户,为每个客户提供了个性化一流的服务,我们与竞争对手的不同之处仅在于我们专注于为客户提供卓越的技术支持和企业级的托管服务。通过这几年的经验积累我们不仅可以在硬件和产品上提供最高质量的服务,而且还可以提供世界一流的24/7技术和客户支持。在OVZH.COM上,我们在发布新产品之前,我们所有的专用服务器都经过我们专业的技术人员严格测试才会上架我们的官网,在这里我们有最优质的价格和企业级的托管硬件,如有疑问或问题,请通过电话或邮件联系我们。OVZH.COM的专家团队竭诚为您带来满意的服务! OVZH-VDS-CN2-GIA云产品 CN2 GIA线路是中国电信推出的高速线路,分为双三网CN2 GIA和单程CN2 GIA单程是指国内访问国外为高速线路,回程走的普通线路。双程三网cn2 GIA是去程与回程都是走的 高速线路,所以在这里我们OVZH.COM采用的是双程三网CN2 GIA也就是全程CN2 GIA高端线路。 https://i.ovzh.com/cart.php?gid=1   Cloud CN2 GIA 基础 ¥50.00 CNY/mo ¥1.00 初装费 IPV4 1 CPU 1个物理核心 内存 768MB 突发内存 128MB SSD硬盘 15GB 列阵 RAID10 系统 Linux 线路 CN2-GIA三网直连 带宽 100Mbps 宽带流量 500GB 设备 戴尔企业级硬件 由OVZH.COM云服务商提供支持® 严禁违反中美法律的内容 99.95%的正常运行时间SLA   Cloud CN2 GIA 标准 ¥80.00 CNY/mo ¥1.00 初装费 IPV4 1 CPU 1个物理核心 内存 1332MB 突发内存 256MB SSD硬盘 25GB 列阵 RAID10 系统 Linux 线路 CN2-GIA三网直连 带宽 100Mbps 宽带流量 1TB 设备 戴尔企业级硬件 由OVZH.COM云服务商提供支持® 严禁违反中美法律的内容 99.95%的正常运行时间SLA   OVZH-A-VDS-SERVERS 百分比 30% 优惠 OVZH-B-VDS-SERVERS 百分比 35% 优惠 OVZH-C-VDS-SERVERS 百分比 40% 优惠 OVZH-D-VDS-SERVERS 百分比 45% 优惠 OVZH-E-VDS-SERVERS 百分比 48% 优惠 OVZH-F-VDS-SERVERS 百分比 50% 优惠   服务器采用国际主流的 Linux+Apache+Mysql+PHP 架构. 完美支持 WordPress、Discuz、Joomla、Drupal、PHPwind、MediaWiki、phpBB、PHPcms、shopex、ecshop、帝国CMS、ZenCart、Typecho 等各种由 PHP+Mysql 构成的程序   OVZH-Hosting 云主机产品 https://i.ovzh.com/cart.php?gid=4 OVZH-HOST1-ovzhcom  百分比 50% 优惠 OVZH-HOST2-ovzhcom  百分比 55% 优惠   基础 ¥6.00 CNY/mo ¥1.00 初装费 IPV4 1 网站 2 DDOS防御 80GB SSD硬盘 1000MB 流量 1TB 提供 数据安全 提供 自动备份 提供 定时任务 提供 DDOS保护 提供 一键SSL开启 PHP5.6-7.4版本自由切换   OVZH-Hosting 分销云主机产品 https://i.ovzh.com/cart.php?gid=8 OVZH-HOST3-ovzhcom  百分比 60% 优惠 OVZH-HOST4-ovzhcom  百分比 66% 优惠 基础 ¥10.00 CNY/mo ¥1.00 初装费 磁盘空间 10GB Raid10 SSD 每月流量 300GB 客户数量 5个独立客户 CPU 2核 内存 2GB IPv4地址 1枚 超额销售 允许 云备份 支持 提供 数据安全 提供 定时任务 提供 定时采集 提供 DDOS保护 提供 一键SSL开启 提供 Cloudflare Pro PHP5.6-7.4版本自由切换

跑在什么什么上面好呢? 我的首选当然是创建一个PVE里的CT来跑了,这种轻量级虚拟化的好处有如下几点: 1.占用存储空间较少 (由于我这台机器存储空间比较紧张,所以必然选择这种方式啦). 2.性能损耗几乎为0,与物理机拥有相同的性能. 3.当然还有就是搭建方便快捷啦,turnkeylinux上面有海量的模板,几乎你需要的在上面都能找到(例如docker plex jellyfin emby 等等..). 总结一下就是,性能好占用少还方便!! 香. 服务器程序我选择的是Jellyfin,听说硬件转码是免费的. 搭建过程非常简单无脑: 1.下载模板: 模板可能要使用科学的方式获取,大家应该都懂。   或者也可以自行网上搜索,替换一下国内镜像.   否则下载速度感人.   2.创建CT. 第一步记得要把无特权容器的选项去掉,否则会创建不成功. 模板选择我们刚刚下载好的mediaserve 接下来的步骤就按照自己的需求分配CPU 内存等资源就可以了. 3.配置mediaserver     由于是CT,所以这一步非常之简单,开机后输入用户名密码,直接就会跳出设置向导,按照提示设置smb密码,jellyfin等等的密码即可.结束后会提示你各个后台的地址,打开浏览器访问即可      搭建完成后,兴致冲冲的放了一段DOOM的演示视频(1080p 40m比特率)的视频测试转码性能. 但是发现开启转码后,CPU占用率直接飙升到95%,这必须得折腾一下硬件加速了: 4.配置CT渲染设备节点,开启硬件加速: 默认情况下.LXC并不会自动映射dev目录下的设备节点文件.所以我们首先需要修改配置文件,使LXC自动映射dev下的设备文件. 首先我们需要在host(pve) shell中确认一下host设备文件的情况,标红的参数我们需要用到: root@pve:# ls -l /dev/dri/ total 0 drwxr-xr-x 2 root root         80 Apr 20 12:24 by-path crw-rw—- 1 root video  226,   0 Apr 20 12:24 card0 crw-rw—- 1 root render 226, 128 Apr 20 12:24 renderD128 video  id: 226,   0 render id:226, 128 修改LXC的配置文件,路径为/etc/pve/lxc/{你的CT ID}.conf. 例如我的CT ID是100,所以对应的文件是/etc/pve/lxc/100.conf 使用编辑器打开该文件进行编辑: vim /etc/pve/lxc/100.conf 将以下内容添加到文件末尾(将对应的id替换成自己的): lxc.cgroup.devices.allow = c 226:0 rwm lxc.cgroup.devices.allow = c 226:128 rwm lxc.autodev: 1 lxc.hook.autodev:/var/lib/lxc/100/render_device_hook.sh CT启动的时候,会执行lxc.hook.autodev里的内容,我们需要手动创建对应的节点文件 还是一样,使用编辑器创建并打开脚本文件:

  1. vim /var/lib/lxc/100/render_device_hook.sh

复制代码

将以下内容添加到文件中(一样,还是要替换成自己的设备id): mkdir -p ${LXC_ROOTFS_MOUNT}/dev/dri mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/card0 c 226 0 mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/renderD128 c 226 128 最后设置文件权限:

  1. chmod 755 /var/lib/lxc/100/render_device_hook.sh

复制代码

这样,我们CT的配置就修改好了,现在去启动CT吧. 启动后,我们还需要在CT里安装VA的驱动文件,以下命令均在CT内执行: apt-get install i965-va-driver apt-get install vainfo 安装完成后执行vainfo命令,如果打印如下类似信息就表明硬件转码已经可用了: root@mediaserver # vainfo error: XDG_RUNTIME_DIR not set in the environment. error: can’t connect to X server! libva info: VA-API version 0.39.4 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so libva info: Found init function __vaDriverInit_0_39 libva info: va_openDriver() returns 0 vainfo: VA-API version: 0.39 (libva 1.7.3) vainfo: Driver version: Intel i965 driver for Intel(R) Kabylake - 1.7.3 vainfo: Supported profile and entrypoints VAProfileMPEG2Simple            :        VAEntrypointVLD VAProfileMPEG2Simple            :        VAEntrypointEncSlice VAProfileMPEG2Main              :        VAEntrypointVLD VAProfileMPEG2Main              :        VAEntrypointEncSlice VAProfileH264ConstrainedBaseline:        VAEntrypointVLD VAProfileH264ConstrainedBaseline:        VAEntrypointEncSlice VAProfileH264Main               :        VAEntrypointVLD VAProfileH264Main               :        VAEntrypointEncSlice VAProfileH264High               :        VAEntrypointVLD VAProfileH264High               :        VAEntrypointEncSlice VAProfileH264MultiviewHigh      :        VAEntrypointVLD VAProfileH264MultiviewHigh      :        VAEntrypointEncSlice VAProfileH264StereoHigh         :        VAEntrypointVLD VAProfileH264StereoHigh         :        VAEntrypointEncSlice VAProfileVC1Simple              :        VAEntrypointVLD VAProfileVC1Main                :        VAEntrypointVLD VAProfileVC1Advanced            :        VAEntrypointVLD VAProfileNone                   :        VAEntrypointVideoProc VAProfileJPEGBaseline           :        VAEntrypointVLD VAProfileJPEGBaseline           :        VAEntrypointEncPicture VAProfileVP8Version0_3          :        VAEntrypointVLD VAProfileVP8Version0_3          :        VAEntrypointEncSlice VAProfileHEVCMain               :        VAEntrypointVLD VAProfileHEVCMain               :        VAEntrypointEncSlice VAProfileHEVCMain10             :        VAEntrypointVLD VAProfileHEVCMain10             :        VAEntrypointEncSlice VAProfileVP9Profile0            :        VAEntrypointVLD VAProfileVP9Profile0            :        VAEntrypointEncSlice VAProfileVP9Profile2            :        VAEntrypointVLD 现在再到Jellyfin的控制台,将转码的硬件加速设置为VA API,在转码再看看CPU占用以及拖动视频的相应速度 Enjoy….

0%