nginx一键安装脚本
nginx一键安装脚本
[root@cc nginx]# cat nginx_install.sh #!/bin/bash # > File Name: nginx_install.sh # > Author: cc # > mail: 547253687@qq.com # > Created Time: Fri 16 Nov 2018 11:02:58 AM CST INSTALL_DIR=/usr/local SRC_DIR=/root NGINX_LUA="nginx-tengine+lua" GEOIP="GeoIP-1.4.8" SOCK="sock" CONF="/root/nginx-tengine+lua/conf" NGINX_DIR="/usr/local/tengine" system_version=`grep -o "[0-9].*[0-9]" /etc/redhat-release | awk '{print int($0)}'` [ ! -d ${INSTALL_DIR} ] && mkdir -p ${INSTALL_DIR} [ ! -d ${SRC_DIR} ] && mkdir -p ${SRC_DIR} [ ! -d ${SRC_DIR}$SOCK ] && mkdir -p ${INSTALL_DIR}/$SOCK if [ $(id -u) != "0" ]; then echo "Error: you must be root to run this script!" exit 1 fi ##颜色输出函数 red_echo(){ local what=$* echo -e "\e[1;31m ********************* \e[0m" echo -e "\e[1;31m ${what} \e[0m" echo -e "\e[1;31m ********************* \e[0m" } blue_echo() { local what=$* echo -e "\e[1;32m --------------------- \e[0m" echo -e "\e[1;32m ${what} \e[0m" echo -e "\e[1;32m --------------------- \e[0m" } ##yum安装相关变量包 Install_Package() { for Package in lrzsz openssl-devel zlib zlib-devel pcre pcre-devel geoip-devel patch iptables iptables-services c++ gcc-c++ telnet curl curl-devel vim make wget lua lua-devel tcl ipset patch ntpdate do yum -y install $Package done } If_Success() { if [ $? -eq 0 ] then echo -e "\033[32m ------------------- \033[0m" echo -e "\033[32m $1 $2 Success!!! \033[0m" echo -e "\033[32m ------------------- \033[0m" else echo -e "\033[31m ******************* \033[0m" echo -e "\033[31m $1 $2 Failure!!! \033[0m" echo -e "\033[31m ******************* \033[0m" fi sleep 5 } ##centos7以下手动编译Geoip库,在下面函数将此函数调用即可 If_GeoIp() { cd ${SRC_DIR}/${NGINX_LUA}/${GEOIP} ./configure If_Success "Configure" "GeoIp" make If_Success "Make" "GeoIp" make install If_Success "Install" "GeoIp" } Install_Nginx() { NGINX="tengine-2.2.2" PCRE="pcre-8.40" ZLIB="zlib-1.2.11" OPENSSL="openssl-1.0.2p" ACCESSKEY="nginx-accesskey-2.0.3" ##解压准备好的包 cd ${SRC_DIR} echo "Extracting ${NGINX_LUA}" tar -xzf ${NGINX_LUA}.tar.gz cd ${SRC_DIR}/${NGINX_LUA} echo "Done..." ##下载安装包 :<<! cd ${SRC_DIR}/${NGINX_LUA} echo 'Downloading NGINX' if [ ! -f ${NGINX}.tar.gz ] then wget -c http://nginx.org/download/${NGINX}.tar.gz else echo 'Skipping: NGINX already downloaded' fi echo 'Downloading PCRE' if [ ! -f ${PCRE}.tar.gz ] then wget -c https://sourceforge.net/projects/pcre/files/pcre/8.35/${PCRE}.tar.gz else echo 'Skipping: PCRE already downloaded' fi echo 'Downloading ZLIB' if [ ! -f ${ZLIB}.tar.gz ] then wget -c http://zlib.net/${ZLIB}.tar.gz else echo 'Skipping: ZLIB already downloaded' fi echo 'Downloading OPENSSL' if [ ! -f ${OPENSSL}.tar.gz ] then wget -c http://www.openssl.org/source/${OPENSSL}.tar.gz else echo 'Skipping: OPENSSL already downloaded' fi echo '----------Unpacking downloaded archives. This process may take serveral minutes---------' echo "Extracting ${NGINX}..." tar xzf ${NGINX}.tar.gz echo 'Done.' echo "Extracting ${PCRE}..." tar xzf ${PCRE}.tar.gz echo 'Done.' echo "Extracting ${ZLIB}..." tar xzf ${ZLIB}.tar.gz echo 'Done.' echo "Extracting ${OPENSSL}..." tar xzf ${OPENSSL}.tar.gz echo 'Done.' ! ##创建用户 groupadd nginx useradd -g nginx nginx ##系统为7以下时打开 if [ $system_version -ne 7 ] then If_GeoIp else echo "pass..." fi ##编译 echo '###################' echo 'Compile NGINX' echo '###################' cd ${SRC_DIR}/${NGINX_LUA}/${NGINX} ./configure --prefix=${INSTALL_DIR}/tengine \ --user=nginx --group=nginx \ --lock-path=/var/run/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --with-http_secure_link_module \ --with-http_random_index_module \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_auth_request_module \ --with-http_v2_module \ --with-http_addition_module \ --with-http_sub_module \ --with-file-aio \ --with-http_geoip_module \ --with-pcre=../${PCRE} \ --with-openssl=../${OPENSSL} \ --with-zlib=../${ZLIB} \ --add-module=../ngx_cache_purge-master \ --add-module=../echo-nginx-module \ --add-module=../file-md5-master \ --add-module=../${ACCESSKEY} \ --add-module=../lua-nginx-module-master \ --add-module=../nginx_tcp_proxy_module-master \ --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' \ --with-ld-opt=-Wl,-rpath,/usr/local/lib If_Success "Configure" make If_Success "Make" "NGINX" make install If_Success "Install" "NGINX" } ##创建sock Create_Sock() { SOCKPACK="sockproc-master" SHELL="shell" cd ${SRC_DIR}/${NGINX_LUA}/${SOCKPACK} chmod u+x sockproc ./sockproc /tmp/$SHELL.sock chmod 0666 /tmp/$SHELL.sock } ##安装redis Install_Redis() { REDIS="redis-5.0.0" WORK_REDIS="/etc/redis" [ ! -d ${WORK_REDIS} ] && mkdir -p ${WORK_REDIS} cd ${SRC_DIR}/${NGINX_LUA} echo 'Downloading Redis...' if [ ! -f ${REDIS}.tar.gz ] then wget -c http://download.redis.io/releases/${REDIS}.tar.gz else echo "Skipping: REDIS already downloaded..." fi echo "Extracting ${REDIS}..." tar xzf ${REDIS}.tar.gz -C ${INSTALL_DIR} echo "Done..." cd ${INSTALL_DIR}/${REDIS} make If_Success "Make" "REDIS" make install If_Success "Install" "REDIS" cd ${INSTALL_DIR}/${REDIS}/src cp -a redis-server redis-benchmark redis-cli ${WORK_REDIS} cp -a ${CONF}/redis.conf ${WORK_REDIS} cd ${WORK_REDIS} ./redis-server redis.conf > /dev/null 2>&1 & sleep 3 netstat -tunlp | grep redis > /dev/null 2>&1 if [ $? -eq 0 ] then blue_echo "Redis in started..." else red_echo "Error:Redis started failed..." fi } ##安装ipset以及创建ipset表 Install_Ipset() { IPSET="ipset-6.38" IPTABLES_CONF="/etc/sysconfig" IPSET_CONF="/usr/local/ipset" ##安装 cd ${SRC_DIR}/${NGINX_LUA} ipset version > /dev/null 2>&1 if [ $? -ne 0 ] then wget http://ipset.netfilter.org/${IPSET}.tar.bz2 echo "Extracting ${IPSET}..." tar xf ${SRC_DIR}/${NGINX_LUA}/${IPSET}.tar.bz2 echo "Done..." cd ${SRC_DIR}/${NGINX_LUA}/${IPSET} ./configure > /dev/null 2>&1 if [ $? -eq 0 ] then If_Success "Configure" "IPSET" make If_Success "Make" "IPSET" make install If_Success "Install" "IPSET" else wget http://www.rpmfind.net/linux/centos/6.10/updates/x86_64/Packages/kernel-devel-2.6.32-754.3.5.el6.x86_64.rpm rpm -ivh kernel-devel-2.6.32-754.3.5.el6.x86_64.rpm ./configure If_Success "Configure" "IPSET" make If_Success "Make" "IPSET" make install If_Success "Install" "IPSET" fi else echo "Skipping: IPSET already install..." fi ##创建 ipset create timeout hash:ip maxelem 100000 timeout 300 ##参数说明,timeout是表(集合)名,以 hash 方式存储,存储内容是 IP 地址,ipset默认可以存储65536个element,使用maxelem指定数量,只存放300秒,即300秒后解除限制 ipset create bmd hash:ip maxelem 100000 ##白名单列表,永久生效 ipset create black hash:ip maxelem 100000 ##黑名单,永久限制 ipset create ssh hash:ip maxelem 100000 ##办公出口ip表 ##添加ssh白名单 ipset add ssh 192.168.2.200 ##添加防火墙规则 /usr/bin/systemctl stop firewalld.service > /dev/null 2>&1 /usr/bin/systemctl disable firewalld.service > /dev/null 2>&1 \cp -a ${CONF}/iptables* ${IPTABLES_CONF} if [ $system_version -eq 7 ] then /usr/bin/systemctl restart iptables > /dev/null 2>&1 if [ $? -eq 0 ] then iptables -I INPUT -m set --match-set timeout src -j DROP #添加定时黑名单 iptables -I INPUT -m set --match-set black src -j DROP #添加黑名单 iptables -I INPUT -m set --match-set bmd src -j ACCEPT #添加白名单 iptables -I INPUT -m set --match-set ssh src -p tcp --destination-port 22 -j ACCEPT #创建防火墙规则,与此同时,允许ssh这个ipset里的ip访问22端口 iptables -I INPUT -p tcp --dport 80 -j ACCEPT #允许80访问 iptables -I INPUT -p tcp --dport 443 -j ACCEPT #允许443访问 service iptables save /usr/bin/systemctl restart iptables > /dev/null 2>&1 if [ $? -eq 0 ] then blue_echo "Iptables is started..." else red_echo "Error:Iptables started failed..." fi else red_echo "Error:Iptables started failed..." fi else service iptables restart > /dev/null 2>&1 if [ $? -eq 0 ] then iptables -I INPUT -m set --match-set timeout src -j DROP #添加定时黑名单 iptables -I INPUT -m set --match-set black src -j DROP #添加黑名单 iptables -I INPUT -m set --match-set bmd src -j ACCEPT #添加白名单 iptables -I INPUT -m set --match-set ssh src -p tcp --destination-port 22 -j ACCEPT #创建防火墙规则,与此同时,允许ssh这个ipset里的ip访问22端口 iptables -I INPUT -p tcp --dport 80 -j ACCEPT #允许80访问 iptables -I INPUT -p tcp --dport 443 -j ACCEPT #允许443访问 service iptables save service iptables restart > /dev/null 2>&1 if [ $? -eq 0 ] then blue_echo "IPTALBES is started..." else red_echo "Error:Iptables started failed..." fi else red_echo "Error:Iptables started failed..." fi fi ##配置文件持久化 [ ! -d ${IPSET_CONF} ] && mkdir -p ${IPSET_CONF} echo '''0 */8 * * * /usr/sbin/ntpdate ntp1.aliyun.com;/sbin/hwclock -w */1 * * * * /usr/sbin/ipset save black > /usr/local/ipset/black.txt */1 * * * * /usr/sbin/ipset save timeout > /usr/local/ipset/timeout.txt */1 * * * * /usr/sbin/ipset save bmd > /usr/local/ipset/bmd.txt */1 * * * * /usr/sbin/ipset save ssh > /usr/local/ipset/ssh.txt''' >> /var/spool/cron/root } ##系统优化 System_Optimization() { echo ulimit -n 65535 >> /etc/profile source /etc/profile echo '''fs.nr_open = 1048576 fs.nr_open = 1048576 fs.file-max = 51200 net.ipv4.tcp_congestion_control = hybla net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_synack_retries = 3 net.ipv4.tcp_syn_retries = 3 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30 kernel.pid_max = 32768 #net.ipv4.ip_conntrack_max = 10240 net.ipv4.ip_local_port_range = 1024 65535 vm.overcommit_memory=1''' >> /etc/sysctl.conf sysctl -p cp -a /etc/security/limits.conf /etc/security/limits.conf.bak echo '''* soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535''' >> /etc/security/limits.conf cp -a /etc/security/limits.d/20-nproc.conf /etc/security/limits.d/20-nproc.conf.bak echo '''* soft nproc 65535 root soft nproc unlimited''' > /etc/security/limits.d/20-nproc.conf } ##拷贝文件 Copy_File() { NGINX_FILE="/root/nginx-tengine+lua" mkdir -p /home/nginx/logs mkdir -p /data/proxy_cache_path mkdir -p /data/proxy_temp_path chown nginx:nginx /data -R cd ${NGINX_FILE} \cp -a geoip lua lualib ${NGINX_DIR}/conf \cp -a ${CONF}/nginx.conf ${NGINX_DIR}/conf mkdir ${NGINX_DIR}/conf/vhosts chown nginx:nginx ${NGINX_DIR} -R } ##启动nginx NGINX_START() { ${NGINX_DIR}/sbin/nginx if [ $? -eq 0 ] then blue_echo "Nginx is started..." else red_echo "Error:Nginx started faild..." fi } Install_Package Install_Nginx Create_Sock Install_Redis Install_Ipset System_Optimization Copy_File NGINX_START
开机脚本
[root@cc nginx]# cat inotify.sh #!/bin/bash # > File Name: inotify.sh # > Author: cc # > mail: 547253687@qq.com # > Created Time: Fri 16 Nov 2018 11:02:58 AM CST system_version=`grep -o "[0-9].*[0-9]" /etc/redhat-release | awk '{print int($0)}'` rm -rf /usr/local/ipset/shell.sock && /root/nginx-tengine+lua/sockproc-master/sockproc /tmp/shell.sock && chmod 0666 /tmp/shell.sock /etc/redis/redis-server /etc/redis/redis.conf >/dev/null 2>&1 & /usr/sbin/ipset restore </usr/local/ipset/black.txt /usr/sbin/ipset restore </usr/local/ipset/timeout.txt /usr/sbin/ipset restore </usr/local/ipset/bmd.txt /usr/sbin/ipset restore </usr/local/ipset/ssh.txt if [ $system_version -eq 7 ] then /usr/bin/systemctl restart iptables else /sbin/service iptables restart fi