1
0

apache.sh 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. #!/bin/bash
  2. # Author: yeho <lj2007331 AT gmail.com>
  3. # BLOG: https://linuxeye.com
  4. #
  5. # Notes: OneinStack for CentOS/RedHat 7+ Debian 8+ and Ubuntu 16+
  6. #
  7. # Project home page:
  8. # https://oneinstack.com
  9. # https://github.com/oneinstack/oneinstack
  10. Install_Apache() {
  11. pushd ${oneinstack_dir}/src > /dev/null
  12. tar xzf pcre-${pcre_ver}.tar.gz
  13. pushd pcre-${pcre_ver} > /dev/null
  14. ./configure
  15. make -j ${THREAD} && make install
  16. popd > /dev/null
  17. id -g ${run_group} >/dev/null 2>&1
  18. [ $? -ne 0 ] && groupadd ${run_group}
  19. id -u ${run_user} >/dev/null 2>&1
  20. [ $? -ne 0 ] && useradd -g ${run_group} -M -s /sbin/nologin ${run_user}
  21. tar xzf httpd-${apache_ver}.tar.gz
  22. # install apr
  23. if [ ! -e "${apr_install_dir}/bin/apr-1-config" ]; then
  24. tar xzf apr-${apr_ver}.tar.gz
  25. pushd apr-${apr_ver} > /dev/null
  26. ./configure --prefix=${apr_install_dir}
  27. make -j ${THREAD} && make install
  28. popd > /dev/null
  29. rm -rf apr-${apr_ver}
  30. fi
  31. # install apr-util
  32. if [ ! -e "${apr_install_dir}/bin/apu-1-config" ]; then
  33. tar xzf apr-util-${apr_util_ver}.tar.gz
  34. pushd apr-util-${apr_util_ver} > /dev/null
  35. ./configure --prefix=${apr_install_dir} --with-apr=${apr_install_dir}
  36. make -j ${THREAD} && make install
  37. popd > /dev/null
  38. rm -rf apr-util-${apr_util_ver}
  39. fi
  40. # install nghttp2
  41. if [ ! -e "/usr/local/lib/libnghttp2.so" ]; then
  42. tar xzf nghttp2-${nghttp2_ver}.tar.gz
  43. pushd nghttp2-${nghttp2_ver} > /dev/null
  44. ./configure
  45. make -j ${THREAD} && make install
  46. popd > /dev/null
  47. [ -z "`grep /usr/local/lib /etc/ld.so.conf.d/*.conf`" ] && echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
  48. ldconfig
  49. rm -rf nghttp2-${nghttp2_ver}
  50. fi
  51. if openssl version | grep -Eqi 'OpenSSL 1.1'; then
  52. with_ssl="--with-ssl"
  53. else
  54. with_old_ssl_flag='y'
  55. with_ssl="--with-ssl=${openssl_install_dir}"
  56. fi
  57. pushd httpd-${apache_ver} > /dev/null
  58. LDFLAGS=-ldl ./configure --prefix=${apache_install_dir} --enable-mpms-shared=all --with-pcre --with-apr=${apr_install_dir} --with-apr-util=${apr_install_dir} --enable-headers --enable-mime-magic --enable-deflate --enable-proxy --enable-so --enable-dav --enable-rewrite --enable-remoteip --enable-expires --enable-static-support --enable-suexec --enable-mods-shared=most --enable-nonportable-atomics=yes --enable-ssl ${with_ssl} --enable-http2 --with-nghttp2=/usr/local
  59. make -j ${THREAD} && make install
  60. popd > /dev/null
  61. unset LDFLAGS
  62. if [ -e "${apache_install_dir}/bin/httpd" ]; then
  63. echo "${CSUCCESS}Apache installed successfully! ${CEND}"
  64. rm -rf httpd-${apache_ver} pcre-${pcre_ver}
  65. else
  66. rm -rf ${apache_install_dir}
  67. echo "${CFAILURE}Apache install failed, Please contact the author! ${CEND}" && lsb_release -a
  68. kill -9 $$; exit 1;
  69. fi
  70. [ -z "`grep ^'export PATH=' /etc/profile`" ] && echo "export PATH=${apache_install_dir}/bin:\$PATH" >> /etc/profile
  71. [ -n "`grep ^'export PATH=' /etc/profile`" -a -z "`grep ${apache_install_dir} /etc/profile`" ] && sed -i "s@^export PATH=\(.*\)@export PATH=${apache_install_dir}/bin:\1@" /etc/profile
  72. . /etc/profile
  73. if [ -e /bin/systemctl ]; then
  74. /bin/cp ../init.d/httpd.service /lib/systemd/system/
  75. sed -i "s@/usr/local/apache@${apache_install_dir}@g" /lib/systemd/system/httpd.service
  76. systemctl enable httpd
  77. else
  78. /bin/cp ${apache_install_dir}/bin/apachectl /etc/init.d/httpd
  79. sed -i '2a # chkconfig: - 85 15' /etc/init.d/httpd
  80. sed -i '3a # description: Apache is a World Wide Web server. It is used to serve' /etc/init.d/httpd
  81. chmod +x /etc/init.d/httpd
  82. [ "${PM}" == 'yum' ] && { chkconfig --add httpd; chkconfig httpd on; }
  83. [ "${PM}" == 'apt-get' ] && update-rc.d httpd defaults
  84. fi
  85. sed -i "s@^User daemon@User ${run_user}@" ${apache_install_dir}/conf/httpd.conf
  86. sed -i "s@^Group daemon@Group ${run_group}@" ${apache_install_dir}/conf/httpd.conf
  87. if [[ ! ${nginx_option} =~ ^[1-3]$ ]] && [ ! -e "${web_install_dir}/sbin/nginx" ]; then
  88. sed -i 's/^#ServerName www.example.com:80/ServerName 0.0.0.0:80/' ${apache_install_dir}/conf/httpd.conf
  89. TMP_PORT=80
  90. elif [[ ${nginx_option} =~ ^[1-3]$ ]] || [ -e "${web_install_dir}/sbin/nginx" ]; then
  91. sed -i 's/^#ServerName www.example.com:80/ServerName 127.0.0.1:88/' ${apache_install_dir}/conf/httpd.conf
  92. sed -i 's@^Listen.*@Listen 127.0.0.1:88@' ${apache_install_dir}/conf/httpd.conf
  93. TMP_PORT=88
  94. fi
  95. sed -i "s@AddType\(.*\)Z@AddType\1Z\n AddType application/x-httpd-php .php .phtml\n AddType application/x-httpd-php-source .phps@" ${apache_install_dir}/conf/httpd.conf
  96. sed -i "s@#AddHandler cgi-script .cgi@AddHandler cgi-script .cgi .pl@" ${apache_install_dir}/conf/httpd.conf
  97. sed -ri 's@^#(LoadModule.*mod_proxy.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  98. sed -ri 's@^#(LoadModule.*mod_proxy_fcgi.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  99. sed -ri 's@^#(LoadModule.*mod_suexec.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  100. sed -ri 's@^#(LoadModule.*mod_vhost_alias.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  101. sed -ri 's@^#(LoadModule.*mod_rewrite.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  102. sed -ri 's@^#(LoadModule.*mod_deflate.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  103. sed -ri 's@^#(LoadModule.*mod_expires.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  104. sed -ri 's@^#(LoadModule.*mod_ssl.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  105. sed -ri 's@^#(LoadModule.*mod_http2.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  106. sed -i 's@DirectoryIndex index.html@DirectoryIndex index.html index.php@' ${apache_install_dir}/conf/httpd.conf
  107. sed -i "s@^DocumentRoot.*@DocumentRoot \"${wwwroot_dir}/default\"@" ${apache_install_dir}/conf/httpd.conf
  108. sed -i "s@^<Directory \"${apache_install_dir}/htdocs\">@<Directory \"${wwwroot_dir}/default\">@" ${apache_install_dir}/conf/httpd.conf
  109. sed -i "s@^#Include conf/extra/httpd-mpm.conf@Include conf/extra/httpd-mpm.conf@" ${apache_install_dir}/conf/httpd.conf
  110. if [ "${apache_mpm_option}" == '2' ]; then
  111. sed -ri 's@^(LoadModule.*mod_mpm_event.so)@#\1@' ${apache_install_dir}/conf/httpd.conf
  112. sed -i 's@^#LoadModule mpm_prefork_module@LoadModule mpm_prefork_module@' ${apache_install_dir}/conf/httpd.conf
  113. elif [ "${apache_mpm_option}" == '3' ]; then
  114. sed -ri 's@^(LoadModule.*mod_mpm_event.so)@#\1@' ${apache_install_dir}/conf/httpd.conf
  115. sed -i 's@^#LoadModule mpm_worker_module@LoadModule mpm_worker_module@' ${apache_install_dir}/conf/httpd.conf
  116. fi
  117. #logrotate apache log
  118. cat > /etc/logrotate.d/apache << EOF
  119. ${wwwlogs_dir}/*apache.log {
  120. daily
  121. rotate 5
  122. missingok
  123. dateext
  124. compress
  125. notifempty
  126. sharedscripts
  127. postrotate
  128. [ -e /var/run/httpd.pid ] && kill -USR1 \`cat /var/run/httpd.pid\`
  129. endscript
  130. }
  131. EOF
  132. mkdir ${apache_install_dir}/conf/vhost
  133. [ "${apache_mode_option}" != '2' ] && Apache_fcgi=$(echo -e "<Files ~ (\\.user.ini|\\.htaccess|\\.git|\\.svn|\\.project|LICENSE|README.md)\$>\n Order allow,deny\n Deny from all\n </Files>\n <FilesMatch \\.php\$>\n SetHandler \"proxy:unix:/dev/shm/php-cgi.sock|fcgi://localhost\"\n </FilesMatch>")
  134. cat > ${apache_install_dir}/conf/vhost/0.conf << EOF
  135. <VirtualHost *:$TMP_PORT>
  136. ServerAdmin admin@example.com
  137. DocumentRoot "${wwwroot_dir}/default"
  138. ServerName 127.0.0.1
  139. ErrorLog "${wwwlogs_dir}/error_apache.log"
  140. CustomLog "${wwwlogs_dir}/access_apache.log" common
  141. <Files ~ (\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)\$>
  142. Order allow,deny
  143. Deny from all
  144. </Files>
  145. ${Apache_fcgi}
  146. <Directory "${wwwroot_dir}/default">
  147. SetOutputFilter DEFLATE
  148. Options FollowSymLinks ExecCGI
  149. Require all granted
  150. AllowOverride All
  151. Order allow,deny
  152. Allow from all
  153. DirectoryIndex index.html index.php
  154. </Directory>
  155. <Location /server-status>
  156. SetHandler server-status
  157. Order Deny,Allow
  158. Deny from all
  159. Allow from 127.0.0.1
  160. </Location>
  161. </VirtualHost>
  162. EOF
  163. cat >> ${apache_install_dir}/conf/httpd.conf <<EOF
  164. <IfModule mod_headers.c>
  165. AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
  166. <FilesMatch "\.(js|css|html|htm|png|jpg|swf|pdf|shtml|xml|flv|gif|ico|jpeg)\$">
  167. RequestHeader edit "If-None-Match" "^(.*)-gzip(.*)\$" "\$1\$2"
  168. Header edit "ETag" "^(.*)-gzip(.*)\$" "\$1\$2"
  169. </FilesMatch>
  170. DeflateCompressionLevel 6
  171. SetOutputFilter DEFLATE
  172. </IfModule>
  173. ProtocolsHonorOrder On
  174. PidFile /var/run/httpd.pid
  175. ServerTokens ProductOnly
  176. ServerSignature Off
  177. Include conf/vhost/*.conf
  178. EOF
  179. [ "${nginx_option}" == '4' -a ! -e "${web_install_dir}/sbin/nginx" ] && echo 'Protocols h2 http/1.1' >> ${apache_install_dir}/conf/httpd.conf
  180. if [ "${nginx_option}" != '4' -o -e "${web_install_dir}/sbin/nginx" ]; then
  181. cat > ${apache_install_dir}/conf/extra/httpd-remoteip.conf << EOF
  182. LoadModule remoteip_module modules/mod_remoteip.so
  183. RemoteIPHeader X-Forwarded-For
  184. RemoteIPInternalProxy 127.0.0.1
  185. EOF
  186. sed -i "s@Include conf/extra/httpd-mpm.conf@Include conf/extra/httpd-mpm.conf\nInclude conf/extra/httpd-remoteip.conf@" ${apache_install_dir}/conf/httpd.conf
  187. sed -i "s@LogFormat \"%h %l@LogFormat \"%h %a %l@g" ${apache_install_dir}/conf/httpd.conf
  188. fi
  189. ldconfig
  190. [ "${with_old_ssl_flag}" == 'y' ] && sed -i "s@^export LD_LIBRARY_PATH.*@export LD_LIBRARY_PATH=${openssl_install_dir}/lib:\$LD_LIBRARY_PATH@" ${apache_install_dir}/bin/envvars
  191. service httpd start
  192. popd > /dev/null
  193. }