apache-2.4.sh 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #!/bin/bash
  2. # Author: yeho <lj2007331 AT gmail.com>
  3. # BLOG: https://blog.linuxeye.com
  4. #
  5. # Notes: OneinStack for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+
  6. #
  7. # Project home page:
  8. # https://oneinstack.com
  9. # https://github.com/lj2007331/oneinstack
  10. Install_Apache24() {
  11. pushd ${oneinstack_dir}/src
  12. tar xzf pcre-${pcre_version}.tar.gz
  13. pushd pcre-${pcre_version}
  14. ./configure
  15. make -j ${THREAD} && make install
  16. popd
  17. id -u ${run_user} >/dev/null 2>&1
  18. [ $? -ne 0 ] && useradd -M -s /sbin/nologin $run_user
  19. tar xzf httpd-${apache24_version}.tar.gz
  20. tar xzf nghttp2-${nghttp2_version}.tar.gz
  21. tar xzf apr-${apr_version}.tar.gz
  22. tar xzf apr-util-${apr_util_version}.tar.gz
  23. # install openssl-1.0.2
  24. if [ ! -e "${openssl_install_dir}/lib/libcrypto.a" ]; then
  25. tar xzf ${openssl_version}.tar.gz
  26. pushd ${openssl_version}
  27. ./config --prefix=${openssl_install_dir} -fPIC shared zlib
  28. make -j ${THREAD} && make install
  29. popd
  30. rm -rf ${openssl_version}
  31. fi
  32. # install nghttp2
  33. if [ ! -e "/usr/local/lib/libnghttp2.so" ]; then
  34. pushd nghttp2-${nghttp2_version}
  35. ./configure
  36. make -j ${THREAD} && make install
  37. popd
  38. echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf; ldconfig
  39. rm -rf nghttp2-${nghttp2_version}
  40. fi
  41. pushd httpd-${apache24_version}
  42. [ ! -d "${apache_install_dir}" ] && mkdir -p ${apache_install_dir}
  43. /bin/cp -R ../apr-${apr_version} ./srclib/apr
  44. /bin/cp -R ../apr-util-${apr_util_version} ./srclib/apr-util
  45. LDFLAGS=-ldl LD_LIBRARY_PATH=${openssl_install_dir}/lib ./configure --prefix=${apache_install_dir} --with-mpm=prefork --with-included-apr --enable-headers --enable-deflate --enable-so --enable-dav --enable-rewrite --enable-ssl --with-ssl=${openssl_install_dir} --enable-http2 --with-nghttp2=/usr/local --enable-expires --enable-static-support --enable-suexec --enable-modules=all --enable-mods-shared=all
  46. make -j ${THREAD} && make install
  47. unset LDFLAGS
  48. if [ -e "${apache_install_dir}/conf/httpd.conf" ]; then
  49. echo "${CSUCCESS}Apache installed successfully! ${CEND}"
  50. popd
  51. rm -rf httpd-${apache24_version}
  52. else
  53. rm -rf ${apache_install_dir}
  54. echo "${CFAILURE}Apache install failed, Please contact the author! ${CEND}"
  55. kill -9 $$
  56. fi
  57. [ -z "`grep ^'export PATH=' /etc/profile`" ] && echo "export PATH=${apache_install_dir}/bin:\$PATH" >> /etc/profile
  58. [ -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
  59. . /etc/profile
  60. sed -i "s@^export LD_LIBRARY_PATH.*@export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:${openssl_install_dir}/lib@" ${apache_install_dir}/bin/envvars
  61. /bin/cp ${apache_install_dir}/bin/apachectl /etc/init.d/httpd
  62. sed -i '2a # chkconfig: - 85 15' /etc/init.d/httpd
  63. sed -i '3a # description: Apache is a World Wide Web server. It is used to serve' /etc/init.d/httpd
  64. chmod +x /etc/init.d/httpd
  65. [ "$OS" == 'CentOS' ] && { chkconfig --add httpd; chkconfig httpd on; }
  66. [[ $OS =~ ^Ubuntu$|^Debian$ ]] && update-rc.d httpd defaults
  67. sed -i "s@^User daemon@User $run_user@" ${apache_install_dir}/conf/httpd.conf
  68. sed -i "s@^Group daemon@Group $run_user@" ${apache_install_dir}/conf/httpd.conf
  69. if [ "${Nginx_version}" == '4' -a ! -e "${web_install_dir}/sbin/nginx" ]; then
  70. sed -i 's/^#ServerName www.example.com:80/ServerName 0.0.0.0:80/' ${apache_install_dir}/conf/httpd.conf
  71. TMP_PORT=80
  72. elif [[ ${Nginx_version} =~ ^[1-3]$ ]] || [ -e "${web_install_dir}/sbin/nginx" ]; then
  73. sed -i 's/^#ServerName www.example.com:80/ServerName 127.0.0.1:88/' ${apache_install_dir}/conf/httpd.conf
  74. sed -i 's@^Listen.*@Listen 127.0.0.1:88@' ${apache_install_dir}/conf/httpd.conf
  75. TMP_PORT=88
  76. fi
  77. 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
  78. sed -i "s@#AddHandler cgi-script .cgi@AddHandler cgi-script .cgi .pl@" ${apache_install_dir}/conf/httpd.conf
  79. sed -ri 's@^#(.*mod_suexec.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  80. sed -ri 's@^#(.*mod_vhost_alias.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  81. sed -ri 's@^#(.*mod_rewrite.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  82. sed -ri 's@^#(.*mod_deflate.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  83. sed -ri 's@^#(.*mod_expires.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  84. sed -ri 's@^#(.*mod_ssl.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  85. sed -ri 's@^#(.*mod_http2.so)@\1@' ${apache_install_dir}/conf/httpd.conf
  86. sed -i 's@DirectoryIndex index.html@DirectoryIndex index.html index.php@' ${apache_install_dir}/conf/httpd.conf
  87. sed -i "s@^DocumentRoot.*@DocumentRoot \"$wwwroot_dir/default\"@" ${apache_install_dir}/conf/httpd.conf
  88. sed -i "s@^<Directory \"${apache_install_dir}/htdocs\">@<Directory \"$wwwroot_dir/default\">@" ${apache_install_dir}/conf/httpd.conf
  89. sed -i "s@^#Include conf/extra/httpd-mpm.conf@Include conf/extra/httpd-mpm.conf@" ${apache_install_dir}/conf/httpd.conf
  90. #logrotate apache log
  91. cat > /etc/logrotate.d/apache << EOF
  92. $wwwlogs_dir/*apache.log {
  93. daily
  94. rotate 5
  95. missingok
  96. dateext
  97. compress
  98. notifempty
  99. sharedscripts
  100. postrotate
  101. [ -e /var/run/httpd.pid ] && kill -USR1 \`cat /var/run/httpd.pid\`
  102. endscript
  103. }
  104. EOF
  105. mkdir ${apache_install_dir}/conf/vhost
  106. cat > ${apache_install_dir}/conf/vhost/0.conf << EOF
  107. <VirtualHost *:$TMP_PORT>
  108. ServerAdmin admin@linuxeye.com
  109. DocumentRoot "$wwwroot_dir/default"
  110. ServerName 127.0.0.1
  111. ErrorLog "$wwwlogs_dir/error_apache.log"
  112. CustomLog "$wwwlogs_dir/access_apache.log" common
  113. <Directory "$wwwroot_dir/default">
  114. SetOutputFilter DEFLATE
  115. Options FollowSymLinks ExecCGI
  116. Require all granted
  117. AllowOverride All
  118. Order allow,deny
  119. Allow from all
  120. DirectoryIndex index.html index.php
  121. </Directory>
  122. <Location /server-status>
  123. SetHandler server-status
  124. Order Deny,Allow
  125. Deny from all
  126. Allow from 127.0.0.1
  127. </Location>
  128. </VirtualHost>
  129. EOF
  130. cat >> ${apache_install_dir}/conf/httpd.conf <<EOF
  131. <IfModule mod_headers.c>
  132. AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
  133. <FilesMatch "\.(js|css|html|htm|png|jpg|swf|pdf|shtml|xml|flv|gif|ico|jpeg)\$">
  134. RequestHeader edit "If-None-Match" "^(.*)-gzip(.*)\$" "\$1\$2"
  135. Header edit "ETag" "^(.*)-gzip(.*)\$" "\$1\$2"
  136. </FilesMatch>
  137. DeflateCompressionLevel 6
  138. SetOutputFilter DEFLATE
  139. </IfModule>
  140. ProtocolsHonorOrder On
  141. Protocols h2 http/1.1
  142. PidFile /var/run/httpd.pid
  143. ServerTokens ProductOnly
  144. ServerSignature Off
  145. Include conf/vhost/*.conf
  146. EOF
  147. if [ "${Nginx_version}" != '4' -o -e "${web_install_dir}/sbin/nginx" ]; then
  148. cat > ${apache_install_dir}/conf/extra/httpd-remoteip.conf << EOF
  149. LoadModule remoteip_module modules/mod_remoteip.so
  150. RemoteIPHeader X-Forwarded-For
  151. RemoteIPInternalProxy 127.0.0.1
  152. EOF
  153. 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
  154. sed -i "s@LogFormat \"%h %l@LogFormat \"%h %a %l@g" ${apache_install_dir}/conf/httpd.conf
  155. fi
  156. ldconfig
  157. service httpd start
  158. popd
  159. }