├── .gitignore ├── README.md ├── rebuild.sh └── tpl ├── default.stpl └── default.tpl /.gitignore: -------------------------------------------------------------------------------- 1 | .idea -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Description 2 | Rebuild Nginx with Google PageSpeed and http/2 for VestaCP. 3 | Overwrite templates default.stpl and default.tpl. 4 | Rebuild config Nginx for all sites. 5 | # Install 6 | cd /usr/local/src/ 7 | git clone https://github.com/Prihod/vestacp_nginx_pagespeed_http2.git 8 | cd vestacp_nginx_pagespeed_http2/ 9 | chmod +x rebuild.sh 10 | sudo ./rebuild.sh 11 | Links 12 | ----------- 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | [Check if mod_pagespeed is enabled](https://ismodpagespeedworking.com/) 22 | 23 | [Vesta upgrade PHP](https://www.mysterydata.com/how-to-upgrade-php-7-0-to-php-7-1-or-php-7-2-on-ubuntu-vestacp/) 24 | 25 | [Vesta dkim public key located](https://github.com/serghey-rodin/vesta/issues/320) 26 | 27 | [Vesta FIX phpmyadmin](https://forum.vestacp.com/viewtopic.php?t=10307) 28 | 29 | 30 | Useful console commands Vesta 31 | ----------- 32 | v-rebuild-web-domains USER [RESTART] - rebuild web domains 33 | -------------------------------------------------------------------------------- /rebuild.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Detect OS 4 | case $(head -n1 /etc/issue | cut -f 1 -d ' ') in 5 | Debian) OS_NAME="debian" ;; 6 | Ubuntu) OS_NAME="ubuntu" ;; 7 | Amazon) OS_NAME="amazon" ;; 8 | CentOS) OS_NAME="centos" ;; 9 | *) OS_NAME="rhel" ;; 10 | esac 11 | 12 | OS_GROUP=1 13 | DEF_OPENSSL_VER=1.1.1a 14 | DEF_NPS_VERSION=1.13.35.2-stable 15 | DEF_NGNX_VER=$(nginx -v 2>&1 | grep "/" | awk -F '/' '{print $2}') 16 | DIR_VESTA_NGNX_TPL="/usr/local/vesta/data/templates/web/nginx/" 17 | 18 | if [[ $OS_NAME == "debian" || $OS_NAME == "ubuntu" ]] 19 | then 20 | OS_GROUP=2 21 | fi 22 | 23 | echo -n "Enter version Nginx [$DEF_NGNX_VER]: " 24 | read NGNX_VER 25 | if [ -z $NGNX_VER ] 26 | then 27 | NGNX_VER=$DEF_NGNX_VER 28 | fi 29 | 30 | echo -n "Enter version OpenSSL [$DEF_OPENSSL_VER]: " 31 | read OPENSSL_VER 32 | if [ -z $OPENSSL_VER ] 33 | then 34 | OPENSSL_VER=$DEF_OPENSSL_VER 35 | fi 36 | 37 | echo -n "Enter version PageSpeed [$DEF_NPS_VERSION]: " 38 | read NPS_VERSION 39 | if [ -z $NPS_VERSION ] 40 | then 41 | NPS_VERSION=$DEF_NPS_VERSION 42 | fi 43 | 44 | echo "Start install dependecies" 45 | #install dependecies 46 | if [[ $OS_GROUP == 1 ]] 47 | then 48 | sudo yum check-update || sudo yum update -y 49 | sudo yum install gcc-c++ pcre-devel zlib-devel make unzip libuuid-devel gcc 50 | else 51 | sudo apt-get update 52 | sudo apt-get upgrade 53 | sudo apt-get install libpcre3 libpcre3-dev checkinstall zlib1g-dev uuid-dev build-essential unzip libssl-dev -y 54 | sudo apt-get build-dep nginx -y 55 | fi 56 | 57 | if [[ $OS_NAME == "centos" ]] 58 | then 59 | PS_NGX_EXTRA_FLAGS="--with-cc=/opt/rh/devtoolset-2/root/usr/bin/gcc" 60 | sudo rpm --import http://linuxsoft.cern.ch/cern/slc6X/i386/RPM-GPG-KEY-cern 61 | sudo wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo 62 | sudo yum install devtoolset-2-gcc-c++ devtoolset-2-binutils 63 | fi 64 | 65 | 66 | echo "Start download Nginx" 67 | #download nginx 68 | wget http://nginx.org/download/nginx-${NGNX_VER}.tar.gz 69 | if [[ $? -ne 0 ]]; then 70 | echo "Error download Nginx" 71 | exit 1; 72 | fi 73 | tar -xvzf nginx-${NGNX_VER}.tar.gz 74 | cd nginx-${NGNX_VER}/ 75 | 76 | 77 | echo "Start download PageSpeed" 78 | #pagespeed module 79 | wget https://github.com/pagespeed/ngx_pagespeed/archive/v${NPS_VERSION}.zip 80 | if [[ $? -ne 0 ]]; then 81 | echo "Error download PageSpeed" 82 | exit 1; 83 | fi 84 | unzip v${NPS_VERSION}.zip 85 | 86 | nps_dir=$(find . -name "*pagespeed-ngx-${NPS_VERSION}" -type d) 87 | cd "$nps_dir" 88 | NPS_RELEASE_NUMBER=${NPS_VERSION/beta/} 89 | NPS_RELEASE_NUMBER=${NPS_VERSION/stable/} 90 | psol_url=https://dl.google.com/dl/page-speed/psol/${NPS_RELEASE_NUMBER}.tar.gz 91 | [ -e scripts/format_binary_url.sh ] && psol_url=$(scripts/format_binary_url.sh PSOL_BINARY_URL) 92 | 93 | echo "Start download PSOL" 94 | wget ${psol_url} 95 | if [[ $? -ne 0 ]]; then 96 | echo "Error download PSOL $psol_url" 97 | exit 1; 98 | fi 99 | 100 | tar -xzvf $(basename ${psol_url}) 101 | cd .. 102 | 103 | 104 | echo "Start download OpenSSL" 105 | #download openssl 106 | wget https://www.openssl.org/source/openssl-${OPENSSL_VER}.tar.gz 107 | if [[ $? -ne 0 ]]; then 108 | echo "Error download OpenSSL" 109 | exit 1; 110 | fi 111 | tar -xzvf openssl-${OPENSSL_VER}.tar.gz 112 | 113 | echo "Start configure Nginx" 114 | #configure 115 | make clean 116 | 117 | configure="./configure " 118 | configure+=$(nginx -V 2>&1 | grep "configure arguments:" | awk -F'configure arguments: ' '{print $2}') 119 | configure+=" --with-openssl=openssl-${OPENSSL_VER}" 120 | configure+=" --add-module=$nps_dir ${PS_NGX_EXTRA_FLAGS}" 121 | echo $configure; 122 | eval $configure 123 | 124 | if [[ $? -ne 0 ]]; then 125 | echo "Error configure Nginx" 126 | exit 1; 127 | fi 128 | 129 | echo "Start make Nginx" 130 | #compile 131 | make 132 | 133 | if [[ $? -ne 0 ]]; then 134 | echo "Error make Nginx" 135 | exit 1; 136 | fi 137 | 138 | 139 | if [[ $OS_GROUP == 1 ]] 140 | then 141 | sudo make install 142 | else 143 | sudo checkinstall -y 144 | fi 145 | 146 | 147 | if [[ $? -ne 0 ]]; then 148 | echo "Error build package Nginx" 149 | exit 1; 150 | fi 151 | nginx -V 152 | 153 | 154 | echo -n "Overwrite web templates Nginx? [yes] (Y/n) " 155 | read overwrite 156 | if [[ $overwrite = y || $overwrite = Y || -z $overwrite ]] 157 | then 158 | cd ../tpl 159 | for file in *; do 160 | oldFile="$DIR_VESTA_NGNX_TPL$file" 161 | if [ -f $oldFile ]; then 162 | mv $oldFile "${oldFile}.old" 163 | fi 164 | cp $file "$DIR_VESTA_NGNX_TPL$file" 165 | done 166 | fi 167 | 168 | 169 | echo -n "Rebuild config Nginx for all sites? [yes] (Y/n) " 170 | read rebuild 171 | if [[ $rebuild = y || $rebuild = Y || -z $rebuild ]] 172 | then 173 | for user in $(v-list-sys-users plain); do v-rebuild-web-domains $user; done 174 | nginx -t 175 | fi 176 | 177 | echo -n "Restart Nginx? [yes] (Y/n) " 178 | read restart 179 | if [[ $restart = n || $restart = N ]] 180 | then 181 | exit 1 182 | fi 183 | 184 | if [[ $OS_GROUP == 2 ]] 185 | then 186 | systemctl daemon-reload 187 | fi 188 | 189 | service nginx restart -------------------------------------------------------------------------------- /tpl/default.stpl: -------------------------------------------------------------------------------- 1 | server { 2 | listen %ip%:%proxy_ssl_port% ssl http2; 3 | server_name %domain_idn% %alias_idn%; 4 | ssl on; 5 | ssl_certificate %ssl_pem%; 6 | ssl_certificate_key %ssl_key%; 7 | error_log /var/log/%web_system%/domains/%domain%.error.log error; 8 | 9 | location / { 10 | proxy_pass https://%ip%:%web_ssl_port%; 11 | location ~* ^.+\.(%proxy_extentions%)$ { 12 | root %sdocroot%; 13 | access_log /var/log/%web_system%/domains/%domain%.log combined; 14 | access_log /var/log/%web_system%/domains/%domain%.bytes bytes; 15 | expires max; 16 | try_files $uri @fallback; 17 | } 18 | } 19 | 20 | location /error/ { 21 | alias %home%/%user%/web/%domain%/document_errors/; 22 | } 23 | 24 | location @fallback { 25 | proxy_pass https://%ip%:%web_ssl_port%; 26 | } 27 | 28 | location ~ /\.ht {return 404;} 29 | location ~ /\.svn/ {return 404;} 30 | location ~ /\.git/ {return 404;} 31 | location ~ /\.hg/ {return 404;} 32 | location ~ /\.bzr/ {return 404;} 33 | 34 | pagespeed On; 35 | #pagespeed Off; 36 | pagespeed RewriteLevel PassThrough; 37 | pagespeed FileCachePath /var/cache/pagespeed; 38 | 39 | ## Text / HTML 40 | #Удаляет излишки пробелы в HTML - файлах 41 | #pagespeed EnableFilters collapse_whitespace; 42 | #pagespeed EnableFilters convert_meta_tags; 43 | #pagespeed EnableFilters elide_attributes; 44 | #pagespeed EnableFilters remove_comments; 45 | #pagespeed EnableFilters remove_quotes; 46 | 47 | ## JavaScript 48 | pagespeed EnableFilters combine_javascript; 49 | pagespeed EnableFilters inline_javascript; 50 | 51 | ## CSS 52 | pagespeed EnableFilters outline_css; 53 | pagespeed EnableFilters combine_css; 54 | pagespeed EnableFilters inline_import_to_link; 55 | pagespeed EnableFilters inline_css; 56 | pagespeed EnableFilters inline_google_font_css; 57 | pagespeed EnableFilters move_css_above_scripts; 58 | #pagespeed EnableFilters move_css_to_head; 59 | #pagespeed EnableFilters prioritize_critical_css; 60 | pagespeed EnableFilters rewrite_css; 61 | pagespeed EnableFilters fallback_rewrite_css_urls; 62 | #pagespeed EnableFilters rewrite_style_attributes_with_url; 63 | 64 | ## Images 65 | pagespeed EnableFilters resize_mobile_images; 66 | pagespeed EnableFilters lazyload_images; 67 | #pagespeed EnableFilters convert_gif_to_png; 68 | pagespeed EnableFilters convert_jpeg_to_progressive; 69 | pagespeed EnableFilters recompress_jpeg; 70 | pagespeed EnableFilters recompress_png; 71 | pagespeed EnableFilters recompress_webp; 72 | #pagespeed EnableFilters strip_image_color_profile; 73 | #pagespeed EnableFilters strip_image_meta_data; 74 | #pagespeed EnableFilters convert_png_to_jpeg; 75 | #pagespeed EnableFilters resize_images; 76 | #pagespeed EnableFilters resize_rendered_image_dimensions; 77 | pagespeed EnableFilters convert_jpeg_to_webp; 78 | #pagespeed EnableFilters convert_to_webp_lossless; 79 | #pagespeed EnableFilters insert_image_dimensions; 80 | #pagespeed EnableFilters make_google_analytics_async; 81 | 82 | ## Miscellaneous 83 | pagespeed EnableFilters add_instrumentation; 84 | pagespeed EnableFilters insert_dns_prefetch; 85 | 86 | ## Cache 87 | pagespeed EnableFilters extend_cache; 88 | pagespeed EnableFilters extend_cache_pdfs; 89 | pagespeed EnableFilters local_storage_cache; 90 | 91 | pagespeed JpegRecompressionQuality 85; 92 | pagespeed ImageRecompressionQuality 85; 93 | 94 | 95 | # Максимальный размер кэша 96 | pagespeed FileCacheSizeKb 102400; 97 | # Интервал для очистки кэша 98 | pagespeed FileCacheCleanIntervalMs 360000; 99 | # Максимальное количество дескрипторов 100 | pagespeed FileCacheInodeLimit 500000; 101 | 102 | #SSL 103 | pagespeed FetchHttps enable; 104 | pagespeed SslCertDirectory %home%/%user%/conf/web/; 105 | pagespeed SslCertFile %home%/%user%/conf/web/%domain%.crt; 106 | pagespeed MapOriginDomain "localhost" "https://%domain%"; 107 | pagespeed LoadFromFile "https://%domain%" "%home%/%user%/web/%domain%/public_html/"; 108 | 109 | 110 | pagespeed Statistics on; 111 | pagespeed StatisticsLogging on; 112 | pagespeed StatisticsLoggingIntervalMs 60000; 113 | pagespeed StatisticsLoggingMaxFileSizeKb 1024; 114 | pagespeed LogDir /var/log/pagespeed; 115 | pagespeed AdminPath /pagespeed_admin; 116 | 117 | location ~ ^/pagespeed_admin { 118 | allow 127.0.0.1; 119 | deny all; 120 | } 121 | 122 | location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; } 123 | location ~ "^/pagespeed_static/" { } 124 | location ~ "^/ngx_pagespeed_beacon$" { } 125 | 126 | include %home%/%user%/conf/web/snginx.%domain%.conf*; 127 | } 128 | 129 | -------------------------------------------------------------------------------- /tpl/default.tpl: -------------------------------------------------------------------------------- 1 | server { 2 | listen %ip%:%proxy_port%; 3 | server_name %domain_idn% %alias_idn%; 4 | error_log /var/log/%web_system%/domains/%domain%.error.log error; 5 | 6 | location / { 7 | proxy_pass http://%ip%:%web_port%; 8 | location ~* ^.+\.(%proxy_extentions%)$ { 9 | root %docroot%; 10 | access_log /var/log/%web_system%/domains/%domain%.log combined; 11 | access_log /var/log/%web_system%/domains/%domain%.bytes bytes; 12 | expires max; 13 | try_files $uri @fallback; 14 | } 15 | } 16 | 17 | location /error/ { 18 | alias %home%/%user%/web/%domain%/document_errors/; 19 | } 20 | 21 | location @fallback { 22 | proxy_pass http://%ip%:%web_port%; 23 | } 24 | 25 | location ~ /\.ht {return 404;} 26 | location ~ /\.svn/ {return 404;} 27 | location ~ /\.git/ {return 404;} 28 | location ~ /\.hg/ {return 404;} 29 | location ~ /\.bzr/ {return 404;} 30 | 31 | pagespeed On; 32 | #pagespeed Off; 33 | pagespeed RewriteLevel PassThrough; 34 | pagespeed FileCachePath /var/cache/pagespeed; 35 | 36 | ## Text / HTML 37 | #Удаляет излишки пробелы в HTML - файлах 38 | #pagespeed EnableFilters collapse_whitespace; 39 | #pagespeed EnableFilters convert_meta_tags; 40 | #pagespeed EnableFilters elide_attributes; 41 | #pagespeed EnableFilters remove_comments; 42 | #pagespeed EnableFilters remove_quotes; 43 | 44 | ## JavaScript 45 | pagespeed EnableFilters combine_javascript; 46 | pagespeed EnableFilters inline_javascript; 47 | 48 | ## CSS 49 | pagespeed EnableFilters outline_css; 50 | pagespeed EnableFilters combine_css; 51 | pagespeed EnableFilters inline_import_to_link; 52 | pagespeed EnableFilters inline_css; 53 | pagespeed EnableFilters inline_google_font_css; 54 | pagespeed EnableFilters move_css_above_scripts; 55 | #pagespeed EnableFilters move_css_to_head; 56 | #pagespeed EnableFilters prioritize_critical_css; 57 | pagespeed EnableFilters rewrite_css; 58 | pagespeed EnableFilters fallback_rewrite_css_urls; 59 | #pagespeed EnableFilters rewrite_style_attributes_with_url; 60 | 61 | ## Images 62 | pagespeed EnableFilters resize_mobile_images; 63 | pagespeed EnableFilters lazyload_images; 64 | #pagespeed EnableFilters convert_gif_to_png; 65 | pagespeed EnableFilters convert_jpeg_to_progressive; 66 | pagespeed EnableFilters recompress_jpeg; 67 | pagespeed EnableFilters recompress_png; 68 | pagespeed EnableFilters recompress_webp; 69 | #pagespeed EnableFilters strip_image_color_profile; 70 | #pagespeed EnableFilters strip_image_meta_data; 71 | #pagespeed EnableFilters convert_png_to_jpeg; 72 | #pagespeed EnableFilters resize_images; 73 | #pagespeed EnableFilters resize_rendered_image_dimensions; 74 | pagespeed EnableFilters convert_jpeg_to_webp; 75 | #pagespeed EnableFilters convert_to_webp_lossless; 76 | #pagespeed EnableFilters insert_image_dimensions; 77 | #pagespeed EnableFilters make_google_analytics_async; 78 | 79 | ## Miscellaneous 80 | pagespeed EnableFilters add_instrumentation; 81 | pagespeed EnableFilters insert_dns_prefetch; 82 | 83 | ## Cache 84 | pagespeed EnableFilters extend_cache; 85 | pagespeed EnableFilters extend_cache_pdfs; 86 | pagespeed EnableFilters local_storage_cache; 87 | 88 | pagespeed JpegRecompressionQuality 85; 89 | pagespeed ImageRecompressionQuality 85; 90 | 91 | 92 | # Максимальный размер кэша 93 | pagespeed FileCacheSizeKb 102400; 94 | # Интервал для очистки кэша 95 | pagespeed FileCacheCleanIntervalMs 360000; 96 | # Максимальное количество дескрипторов 97 | pagespeed FileCacheInodeLimit 500000; 98 | 99 | 100 | pagespeed Statistics on; 101 | pagespeed StatisticsLogging on; 102 | pagespeed StatisticsLoggingIntervalMs 60000; 103 | pagespeed StatisticsLoggingMaxFileSizeKb 1024; 104 | 105 | location ~ ^/pagespeed_admin { 106 | allow 127.0.0.1; 107 | deny all; 108 | } 109 | 110 | location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; } 111 | location ~ "^/pagespeed_static/" { } 112 | location ~ "^/ngx_pagespeed_beacon$" { } 113 | 114 | include %home%/%user%/conf/web/nginx.%domain%.conf*; 115 | } 116 | 117 | --------------------------------------------------------------------------------