一.起因
Plesk用的很爽很顺手,但是它比起DirectAdmin来说我最不习惯的是没有类似的CustomBuild功能,无法按照我的习惯来定制软件。
之前翻官方论坛找到了自己编译软件的方法,但是官方人员也表示这个需要把编译的软件的自动更新关掉,锁死版本,防止自动更新把你做的修改全部还原掉。好吧,虽然不完美,但是也算是能用。
另外,如果你需要为Plesk的Nginx增加brotli或者PageSpeed这样的模块,这篇文章也正是你需要的,至于如果你只要给Apache加PageSpeed,那就方便多了,可以参考我之前的文章——> 传送门
二.解决
官方论坛的原贴在这,感兴趣的可以看看 ——>传送门
下面记录了我自己编译Nginx替换原装版本的过程,主要都是命令,大家凑合着看吧,我把注释写下
PS.请务必在修改后将Nginx的自动更新关闭,锁死版本,不然会被替换掉
- 访问https://Plesk面板的IP:8443/admin/pum/list
- 搜索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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
#准备工作,安装一些依赖 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
Senraの小窝原创文章,转载请注明来自:为Plesk重新编译Nginx添加额外的功能
近期评论