一.起因
Plesk用的很爽很顺手,但是它比起DirectAdmin来说我最不习惯的是没有类似的CustomBuild功能,无法按照我的习惯来定制软件。
之前翻官方论坛找到了自己编译软件的方法,但是官方人员也表示这个需要把编译的软件的自动更新关掉,锁死版本,防止自动更新把你做的修改全部还原掉。好吧,虽然不完美,但是也算是能用。
另外,如果你需要为Plesk的Nginx增加brotli或者PageSpeed这样的模块,这篇文章也正是你需要的,至于如果你只要给Apache加PageSpeed,那就方便多了,可以参考我之前的文章——> 传送门
二.解决
官方论坛的原贴在这,感兴趣的可以看看 ——>传送门
下面记录了我自己编译Nginx替换原装版本的过程,主要都是命令,大家凑合着看吧,我把注释写下
PS.请务必在修改后将Nginx的自动更新关闭,锁死版本,不然会被替换掉
- 访问https://Plesk面板的IP:8443/admin/pum/list
- 搜索nginx然后锁定
#准备工作,安装一些依赖 yum groupinstall "Development Tools" -y yum install gcc-c++ pcre-devel zlib-devel make unzip -y yum install perl-XML-LibXML libxslt-devel libxslt-python perl-XML-LibXSLT gd-devel libXpm-devel perl-ExtUtils-Embed gperftools gperftools-devel -y #创建用于存放源码的目录 mkdir -p /root/addons/nginx && cd /root/addons/nginx #获取下一个适用于nginx 1.13.6版本的patch,这个patch主要是对Cloudflare的sslconfig这个repo中几个patch的整合,功能如下,直接拿官方的打会冲突掉,必须手动修复,我懒得搞了,这是翻官方issues翻到的kn007的整合,试了下OK # Add SPDY Support. # Add HTTP2 HPACK Encoding Support. # Add Dynamic TLS Record support. wget https://raw.githubusercontent.com/kn007/patch/master/nginx.patch #获取nginx源码,如果不需要patch可以直接拉最新的 wget http://nginx.org/download/nginx-1.13.6.tar.gz tar xzf nginx-1.13.6.tar.gz #获取一些nginx模块源码 wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz -O ngx_cache_purge-2.3.tar.gz wget https://github.com/FRiCKLE/ngx_coolkit/archive/0.2.tar.gz -O ngx_coolkit-0.2.tar.gz wget https://github.com/FRiCKLE/ngx_slowfs_cache/archive/1.10.tar.gz -O ngx_slowfs_cache-1.10.tar.gz wget https://github.com/openresty/headers-more-nginx-module/archive/v0.33.tar.gz -O ngx_headers-more-v0.33.tar.gz wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.3-stable.tar.gz -O ngx_pagespeed-1.12.34.3-stable.tar.gz #解压一波 tar xzf ngx_cache_purge-2.3.tar.gz tar xzf ngx_coolkit-0.2.tar.gz tar xzf ngx_slowfs_cache-1.10.tar.gz tar xzf ngx_headers-more-v0.33.tar.gz tar xzf ngx_pagespeed-1.12.34.3-stable.tar.gz #额外获取pagespeed的二进制文件 cd ngx_pagespeed-1.12.34.3-stable wget https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz tar xzf 1.12.34.2-x64.tar.gz rm 1.12.34.2-x64.tar.gz -rf #获取下brotli的源码 cd /usr/share/nginx/modules git clone https://github.com/google/ngx_brotli.git cd ngx_brotli/ git submodule update --init --recursive cd .. #获取sslconfig中的openssl的patch以及openssl并打一波,使得openssl能够支持chacha20 git clone https://github.com/cloudflare/sslconfig.git wget -c https://github.com/openssl/openssl/archive/OpenSSL_1_0_2k.tar.gz -O openssl-1.0.2k.tar.gz tar xzf openssl-1.0.2k.tar.gz mv openssl-OpenSSL_1_0_2k/ openssl-1.0.2k cd openssl-1.0.2k patch -p1 < ../sslconfig/patches/openssl__chacha20_poly1305_draft_and_rfc_ossl102j.patch #这部分是我在试完102k后测试102m的,发现没问题,也能够兼容 wget -c https://github.com/openssl/openssl/archive/OpenSSL_1_0_2m.tar.gz -O openssl-1.0.2m.tar.gz tar xzf openssl-1.0.2m.tar.gz mv openssl-OpenSSL_1_0_2m/ openssl-1.0.2m cd openssl-1.0.2m patch -p1 < ../sslconfig/patches/openssl__chacha20_poly1305_draft_and_rfc_ossl102j.patch #对nginx打patch cd /root/addons/nginx/nginx-1.13.6 patch -p1 < /root/addons/nginx/nginx.patch #把之前在root目录下的模块源码换个位置,这个随便了,rsync拿来复制的话好像老外比较喜欢,似乎在文件多的情况下更快,也能够完整保留文件属性 mkdir -p /usr/share/nginx/modules/ngx_cache_purge-2.3 rsync -r /root/addons/nginx/ngx_cache_purge-2.3/* /usr/share/nginx/modules/ngx_cache_purge-2.3 mkdir -p /usr/share/nginx/modules/ngx_coolkit-0.2 rsync -r /root/addons/nginx/ngx_coolkit-0.2/* /usr/share/nginx/modules/ngx_coolkit-0.2 mkdir -p /usr/share/nginx/modules/ngx_slowfs_cache-1.10 rsync -r /root/addons/nginx/ngx_slowfs_cache-1.10/* /usr/share/nginx/modules/ngx_slowfs_cache-1.10 mkdir -p /usr/share/nginx/modules/ngx_headers-more-0.33 rsync -r /root/addons/nginx/headers-more-nginx-module-0.33/* /usr/share/nginx/modules/ngx_headers-more-0.33 mkdir -p /usr/share/nginx/modules/ngx_pagespeed-1.12.34.3-stable rsync -r /root/addons/nginx/ngx_pagespeed-1.12.34.3-stable/* /usr/share/nginx/modules/ngx_pagespeed-1.12.34.3-stable #对nginx一波configure,这儿的passenger如果你安装plesk的时候没加就把那行删掉 ./configure --prefix=/usr/share \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --modules-path=/usr/share/nginx/modules \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --lock-path=/var/lock/nginx.lock \ --pid-path=/var/run/nginx.pid \ --http-client-body-temp-path=/var/lib/nginx/body \ --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \ --http-proxy-temp-path=/var/lib/nginx/proxy \ --http-scgi-temp-path=/var/lib/nginx/scgi \ --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \ --user=nginx \ --group=nginx \ --with-debug \ --with-file-aio \ --with-google_perftools_module \ --with-mail \ --with-mail_ssl_module \ --with-threads \ --with-select_module \ --with-stream \ --with-stream_ssl_module \ --with-http_addition_module \ --with-http_auth_request_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_geoip_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_image_filter_module \ --with-http_mp4_module \ --with-http_perl_module \ --with-http_random_index_module \ --with-http_realip_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_sub_module \ --with-http_ssl_module \ --with-http_spdy_module \ --with-http_v2_module \ --with-http_v2_hpack_enc \ --with-http_xslt_module \ --with-poll_module \ --with-openssl=/usr/share/nginx/modules/openssl-1.0.2m \ --add-module=/usr/share/nginx/modules/ngx_brotli \ --add-module=/usr/share/nginx/modules/ngx_pagespeed-1.12.34.3-stable \ --add-dynamic-module=/usr/share/passenger/ngx_http_passenger_module \ --add-module=/usr/share/nginx/modules/ngx_cache_purge-2.3 \ --add-module=/usr/share/nginx/modules/ngx_coolkit-0.2 \ --add-module=/usr/share/nginx/modules/ngx_slowfs_cache-1.10 \ --add-module=/usr/share/nginx/modules/ngx_headers-more-0.33 make make install #添加默认的brotli配置 cat >/etc/nginx/conf.d/brotli.conf <<'EOF' brotli on; brotli_static on; brotli_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/vnd.microsoft.icon image/bmp image/svg+xml; brotli_comp_level 6; brotli_min_length 20; EOF #由于pagespeed的特殊性(配置不好容易出问题)默认关闭,可以以后对每个域名单独配置 cat >/etc/nginx/conf.d/pagespeed.conf <<'EOF' pagespeed off; EOF #备份下默认的ssl配置,然后添加新的 mv /etc/nginx/conf.d/ssl.conf{,.bak} cat >/etc/nginx/conf.d/ssl.conf <<'EOF' ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; EOF #启用dynamic tls record功能,这个是补丁添加的,如果没打就删掉吧 cat >/etc/nginx/conf.d/dyntls.conf <<'EOF' ssl_dyn_rec_enable on; EOF #这儿是为了修改生成配置文件的模板从而自动添加spdy cd /usr/local/psa/admin/conf/templates/ mkdir -p custom/domain cp default/server.php custom/ cp default/domain/nginxDomainVirtualHost.php custom/domain/ cp default/domain/nginxForwarding.php custom/domain/ vi /usr/local/psa/admin/conf/templates/custom/domain/nginxDomainVirtualHost.php 在http2后添加spdy #为域名重新生成配置文件 /usr/local/psa/admin/sbin/httpdmng --reconfigure-all
如果没有出现网络错误啥的情况,上面的命令应该是可以直接复制粘贴成功运行的,只是最后的修改文件得中断一下你的复制粘贴操作。
另外,其实用于提供给面板本身的sw-cp-server其实也是个nginx,只不过修改了下名字,由于没有编译realip模块,所以似乎给面板本身套上cdn之后会有登陆ip变成cdn ip的问题来着,如果想要修复可以考虑编译个替换下。
修改前的原版Nginx
修改后重新编译的Nginx
文章评论