最新要闻
- 环球实时:国产PCSK9抑制剂 ,即将迎来商业爆发?
- 全球观速讯丨韩国主持人流鼻血仍淡定直播 本人回应没事:网友看笑但直呼真敬业
- 热文:钟南山亲自颁发!理想L9获颁“五星健康车”:383.4分创造历史
- 全球热头条丨文峰股份:3月31日融券卖出5300股,融资融券余额1.56亿元
- 加满一箱油少花13元!油价迎今年来最大降幅
- 天天热资讯!2020广州大佛寺中秋佳节拜月法会安排一览
- 汉唐元三车齐发!比亚迪乘用车在西班牙正式开售
- 【世界独家】不虚标!比亚迪汉EV冠军版实测光电续航达成率93.1%
- 世界今热点:中国最畅销手机出炉:“十三香”传奇上演 安卓高端难成
- 内存狂魔第一次冲上8200MHz!芝奇带来96GB DDR5
- 佛山企业标准“领跑者”数量连续三年全国第一
- 当前视点!腮腺炎初期有什么症状?_腮腺炎初期有什么症状
- 今日要闻!验证码被攻破!谷歌AI已能精准识别 GPT-4则装瞎求人帮忙
- 美女博主在家拍擦边视频?穿瑜伽服涨粉百万!真相是...
- 全球今头条!3DMark加入AMD FSR专项测试:终于追上NVIDIA、Intel
- 全球报道:广汽埃安AION Y Plus 2023款上市:14万级唯一纯电610KM续航
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
shell 脚本之一键部署安装 Nginx
今天咸鱼给大家分享个源码编译安装 Nginx 的 shell 脚本
(资料图片)
这个 shell 脚本可重复执行
完整源码放在最后
定义一个变量来存放 nginx 版本号
version=1.15.4
nginx 下载地址:http://nginx.org/download/
下列函数功能则是判断当前步骤是否执行成功,并将结果输出出来
创建 nginx 用户和用户组
建议用大于 1000 的 GID 和 UID 号,表示普通用户
这段代码里我做了一个条件判断:
如果在 /etc/passwd
和 /etc/group
文件中过滤出 nginx,表示已经创建了 nginx 用户和 nginx 用户组,就不再创建了
安装一些扩展包
下载 Nginx 并解压缩
编译安装 Nginx
这里也做了一个条件判断:
如果 /usr/local/nginx
目录存在,则说明 nginx 已经成功安装好了
建立软连接
这一步看个人习惯可做可不做
注册服务
将 nginx 注册成服务之后就可以使用 systemctl 控制它了
内核参数优化
启动 nginx 并设置开机自启动
负责配置写入的函数
在上面的内核参数优化函数里面,我并没有使用 echo 将配置直接重定向到 /etc/sysctl.conf
文件里面
而是用了 add_config_tofile
函数,第一个参数是配置项,第二个参数是文件名
main 函数
完整代码
执行结果如下:
#! /bin/bashversion=1.15.4#判断函数是否执行成功function show_result(){ if [ "$1" -eq 0 ] then echo -e "\e[32m$2 is Success . [ OK ] \e[0m" else echo -e "\e[31m$2 is Fail . [ FAIL ] \e[0m" fi}#创建 nginx 用户和用户组function user_create(){ local item="Create User and Group" if [ `cat /etc/{passwd,group} | grep nginx | wc -l ` -ge 2 ]; then echo -e "\e[31mUser and Group exist! \e[0m" else groupadd -g 1004 nginx && \ useradd -u 1004 -g 1004 -M -s /sbin/nologin nginx show_result $? "${item}" fi}#下载一些拓展包function nginx_pkg(){ local item="Packages Install" yum -y install gcc openssl-devel pcre-devel zlib-devel > /dev/null 2>&1 show_result $? "${item}"}#下载nginxfunction nginx_download(){ local item="Nginx Download" cd /usr/local/src && \ wget http://nginx.org/download/nginx-${version}.tar.gz > /dev/null 2>&1 test -e /usr/local/src/nginx-${version} || tar zxf nginx-${version}.tar.gz rm -rf /usr/local/src/nginx-${version}.tar.gz show_result $? "${item}"}#编译安装function nginx_compile(){ local item="Nginx Compile" cd /usr/local/src/nginx-${version} if [ `ls -l /usr/local/ | grep "nginx" | wc -l` -ge 1 ]; then echo -e "\e[31mNginx exist! \e[0m" else ./configure --prefix=/usr/local/nginx > /dev/null 2>&1 && make > /dev/null 2>&1 && make install > /dev/null 2>&1 fi show_result $? "${item}"}#软连接建立function nginx_softlink(){ local item="Nginx Softlink" test -d /etc/nginx/ || ln -s /usr/local/nginx/conf/ /etc/nginx test -e /usr/sbin/nginx || ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ show_result $? "${item}"}#注册服务function nginx_service(){ local item="Nginx Service" test -e /usr/lib/systemd/system/nginx.service || \ echo "[Unit]Description=The nginx HTTP and reverse proxy serverAfter=network-online.target remote-fs.target nss-lookup.targetWants=network-online.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pid# Nginx will fail to start if /run/nginx.pid already exists but has the wrong# SELinux context. This might happen when running `nginx -t` from the cmdline.# https://bugzilla.redhat.com/show_bug.cgi?id=1268621ExecStartPre=/usr/bin/rm-f /usr/local/nginx/logs/nginx.pidExecStartPre=/usr/local/nginx/sbin/nginx -tExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx -s reloadKillSignal=SIGQUITTimeoutStopSec=5KillMode=processPrivateTmp=true " > /usr/lib/systemd/system/nginx.service systemctl daemon-reload show_result $? "${item}"}#内核优化function nginx_kernel(){ local item="Optimize Kernel Arguments" cp /etc/sysctl.conf /etc/sysctl.conf.${current_time} > /dev/null 2>&1 arch_ratio=$([[ ! -z $(uname -a | grep x86_64) ]] && expr 64 / 32 || expr 32 / 32) memory_size=$(free -b| awk "NR==2{print $2}") nf_conntrack_size=$(expr ${memory_size} / 16384 / ${arch_ratio}) #开启反向路径过滤 add_config_tofile "net.ipv4.conf.default.rp_filter = 1" /etc/sysctl.conf add_config_tofile "net.ipv4.conf.all.rp_filter = 1" /etc/sysctl.conf #处理无源路由包 add_config_tofile "net.ipv4.conf.all.accept_source_route = 0" /etc/sysctl.conf add_config_tofile "net.ipv4.conf.default.accept_source_route = 0" /etc/sysctl.conf #core文件名中添加pid作为扩展名 add_config_tofile "kernel.core_uses_pid = 1" /etc/sysctl.conf #开启syn洪水攻击保护 add_config_tofile "net.ipv4.tcp_syncookies = 1" /etc/sysctl.conf #修改消息队列长度 add_config_tofile "kernel.msgmnb = 65536" /etc/sysctl.conf add_config_tofile "kernel.msgmax = 65536" /etc/sysctl.conf #修改最大内存共享段大小bytes add_config_tofile "kernel.shmmax = 68719476736" /etc/sysctl.conf add_config_tofile "kernel.shmall = 4294967296" /etc/sysctl.conf #timewait数量默认18000 add_config_tofile "net.ipv4.tcp_max_tw_buckets = 600" /etc/sysctl.conf add_config_tofile "net.ipv4.tcp_sack = 1" /etc/sysctl.conf add_config_tofile "net.ipv4.tcp_window_scaling = 1" /etc/sysctl.conf add_config_tofile "net.ipv4.tcp_rmem = 4096 87380 16777216" /etc/sysctl.conf add_config_tofile "net.ipv4.tcp_wmem = 4096 65536 16777216" /etc/sysctl.conf add_config_tofile "net.core.rmem_default = 8388608" /etc/sysctl.conf add_config_tofile "net.core.wmem_max = 16777216" /etc/sysctl.conf #未收到客户端确认信息连接请求的最大值 add_config_tofile "net.ipv4.tcp_max_syn_backlog = 262144" /etc/sysctl.conf #放弃建立连接之前发送的synack包 add_config_tofile "net.ipv4.tcp_syn_retries = 2" /etc/sysctl.conf #开启重用,允许time—wait socket 重新用语新的tcp连接 add_config_tofile "net.ipv4.tcp_tw_reuse = 1" /etc/sysctl.conf add_config_tofile "net.ipv4.tcp_fin_timeout = 1" /etc/sysctl.conf #防止简单的ddos攻击 add_config_tofile "net.ipv4.tcp_max_orphans = 3276800" /etc/sysctl.conf #启用timewait快速收回 add_config_tofile "net.ipv4.tcp_tw_recycle = 0" /etc/sysctl.conf #keeptime启用时tcp发送keepalive消息的频度,默认2h add_config_tofile "net.ipv4.tcp_keepalive_time = 600" /etc/sysctl.conf #允许系统打开的端口范围 add_config_tofile "net.ipv4.ip_local_port_range = 1024 65535" /etc/sysctl.conf #资源回收 add_config_tofile "net.ipv4.tcp_tw_recycle = 0" /etc/sysctl.conf #路由转发 add_config_tofile "net.ipv4.ip_forward = 1" /etc/sysctl.conf #修改防火墙连接跟踪表大小,默认65535 add_config_tofile "net.netfilter.nf_conntrack_max = ${nf_conntrack_size}" /etc/sysctl.conf add_config_tofile "net.nf_conntrack_max = ${nf_conntrack_size}" /etc/sysctl.conf #解禁ping add_config_tofile "net.ipv4.icmp_echo_ignore_all = 0" /etc/sysctl.conf modprobe bridge sysctl -p > /dev/null 2>&1 show_result $? "${item}"}#启动 nginxfunction nginx_start(){ local item="Nginx start" systemctl enable nginx --now > /dev/null 2>&1 show_result $? "${item}"}#负责写入配置的函数function add_config_tofile(){ local keywords=`echo $1| awk -F "[= ]+" "{print $1}"` local SearchResult=`grep "^${keywords}" "$2"` if [ -z "${SearchResult}" ] then echo $1 >> $2 else sed -i "s/^${keywords}.*/$1/" $2 fi}#主函数function main(){ user_create nginx_pkg nginx_download nginx_compile nginx_softlink nginx_service nginx_kernel nginx_start}main
关键词:
shell 脚本之一键部署安装 Nginx
环球实时:国产PCSK9抑制剂 ,即将迎来商业爆发?
全球观速讯丨韩国主持人流鼻血仍淡定直播 本人回应没事:网友看笑但直呼真敬业
热文:钟南山亲自颁发!理想L9获颁“五星健康车”:383.4分创造历史
全球热头条丨文峰股份:3月31日融券卖出5300股,融资融券余额1.56亿元
全球动态:读SQL进阶教程笔记04_集合运算
加满一箱油少花13元!油价迎今年来最大降幅
天天热资讯!2020广州大佛寺中秋佳节拜月法会安排一览
Swift与OC混编
环球信息:知乎使用指南
汉唐元三车齐发!比亚迪乘用车在西班牙正式开售
【世界独家】不虚标!比亚迪汉EV冠军版实测光电续航达成率93.1%
世界今热点:中国最畅销手机出炉:“十三香”传奇上演 安卓高端难成
内存狂魔第一次冲上8200MHz!芝奇带来96GB DDR5
佛山企业标准“领跑者”数量连续三年全国第一
当前视点!腮腺炎初期有什么症状?_腮腺炎初期有什么症状
全球时讯:深度学习——用简单的线性模型构建识别鸟与飞机模型
Redhat/CentOS Linux 系统进入单用户模式
天天即时看!万恶的环境 二 java
今日要闻!验证码被攻破!谷歌AI已能精准识别 GPT-4则装瞎求人帮忙
美女博主在家拍擦边视频?穿瑜伽服涨粉百万!真相是...
全球今头条!3DMark加入AMD FSR专项测试:终于追上NVIDIA、Intel
全球报道:广汽埃安AION Y Plus 2023款上市:14万级唯一纯电610KM续航
天天信息:V观财报|科达制造股东广东联塑短线交易致歉
世界消息!Teamcenter_SOA开发:使用查询构建器查询数据
即时:flatMap
热讯:React Native 备忘清单_开发速查表分享
世界信息:5.98万起售还嫌贵?五菱缤果上市即热销:当天交付522台
每日热议!想买车的抓紧 广州新能源汽车也有补贴了:最高1万元
世界微头条丨《原神》开发商新作:米哈游《崩坏:星穹铁道》预约超2000万
环球热推荐:米香四溢:袁隆平品牌隆平农场东北晶米10斤39.9元发车
华硕ROG游戏手机7真机曝光:无挖孔全面屏、后置三摄
天天讯息:华天科技2022年营收119亿元 拟实施先进封测研发及产业化项目
当前焦点!Leetcode Practice --- 栈和队列
我的第一个项目(七):(解决问题)Vue中canvas无法绘制图片
观点:确认引进内地!《小美人鱼》新泄露镜头:爱丽儿深情抚摸王子的脸
全球首个商用海底数据中心在海南下水:算力高、散热不费电
今日关注:不挑路面、转得很稳 仰望U8如何实现原地掉头?官方详解
大学生应聘饭店洗碗工被HR婉拒 HR:第一份工作很重要 这会害了他
不等发布会!vivo X Fold2真机抢先看:素皮+玻璃设计惊艳
现场丨圆桌对话:抓住确定性——楼宇经济的大周期和小趋势
讯息:awk 处理 Git 提交信息生成 Release Note
最长上升子序列 II
视焦点讯!day3 函数的定义和调用,练习编写简单的程序(记录1)
天天热文:内存/SSD白菜价甩卖 美光芯片大减产:工厂停机率创纪录
任泽平:在中国做生意没任何理由抱怨 燃油车正迎来诺基亚时刻
世界新资讯:宏碁推出W系列4K电视:QLED面板、30W扬声器
油价“二连降” 今年来最大降幅!加满一箱油少花13元
【全球热闻】网络时钟同步设备(NTP时间同步服务器)技术设计应用方案
全球实时:记录--你可能忽略的10种JavaScript快乐写法
聚焦:无所畏惧的求和题解
今亮点!商品日报(3月31日):焦炭低位反弹菜油补涨 纸浆、玻璃主力合约跌超2%
保姆级教程!12306官方详解“免费坐高铁”
环球速递!RTX 40系显卡才能“撑得住”!《赛博朋克2077》实现路径光追
夏季必备 圈叉潮品纯棉印花T恤/短裤24.9元起
【新视野】编程神童立志写最棒的程序改变世界 严重偏科只能选职高 妈妈无奈
世界视讯!成龙自豪发声:不是我要去好莱坞 而是好莱坞要我
“19鑫苑01”到期日期将延期一年
Excel批量检查5列数据是否一致(存在不规则空值)
【密码管理器】上海道宁为您提供存储和使用强密码的简单方法工具软件——1Password
【环球报资讯】MQTT协议介绍
世界热资讯!开心档之Go 语言环境安装
DIM中的一些知识点(慢更)
新消息丨每日机构分析:3月31日
全球实时:国家发展改革委:国内汽、柴油价格每吨分别降低335元和320元
焦点简讯:吃日料、听京剧 库克时隔3年再访中国:6年前还去过ofo小黄车总部
全球观焦点:酷派新品发布会定档4月3日:三款新机待发
世界聚焦:2023增长最快的手机品牌!一加Ace 2首销日销量在第三方平台遥遥领先
天天观察:B站弹幕射击《爆裂魔女》5月30日停运 共运营592天
任天堂Switch 2不会远了!开发者已收到新主机开发工具
世界信息:周日阳光可期抓紧洗晒 下周四冷空气再袭降水将达到中雨
每日快讯!卸载SQL Server 2012图文教程
环球报道:你还在手写 join 联表查询?MyBatis-Plus 这样写太香了!
天天新动态:Python 数字类型之 int float
每日观点:收评:两市红盘震荡创指涨0.69% 人工智能板块涨幅居前
世界百事通!比亚迪F品牌再曝谍照 主攻40-60万市场/下半年预售
天天资讯:38岁985文科硕士被迫送外卖!本人再发声:已脱下孔乙己长衫 应聘道士被拒
云南一县城禁止“脏车入城”:有明显污迹、车轮粘泥不许在城区行驶
百元就能畅享8K 流畅清爽无广告!当贝盒子H3视频评测
当前快讯:刘浩存在新片《龙马精神》首映礼上哭了:感谢成龙带自己拍戏
环球今头条!GPT-4被指威胁公共安全!OpenAI遭第三方组织投诉
基于Go/Grpc/kubernetes/Istio开发微服务的最佳实践尝试 - 2/3
【焦点热闻】如何实现根据环境切换不同配置?
数据丢失不用怕,火山引擎 DataLeap 提供排查解决方案
英特尔以强大产品力,迎接生成式AI的广阔机遇
【全球快播报】北京启动存量住房交易“带押过户”模式
热消息:直播间卖卫星 最低200万!罗永浩:真的 把卫星价格打下来
Redmi Note 12 Turbo晒战绩:16GB+1TB开售5分钟超过全行业历史销量之和
每日热闻!这就离谱!A7S3传感器用来拍Vlog 索尼ZV-E1开启预售
vivo X Fold2影像曝光:IMX866主摄、潜望长焦取消
天天实时:一键获取测试脚本,轻松验证“TSBS 时序数据库性能基准测试报告”
天天快看点丨windows系统 批量处理文件名称
Python Django投稿系统代码
环球今头条!日本最早将于2024年度在新东名高速公路部分区间设置自动驾驶车道
环球即时看!小姐姐秒种草!雅迪冠能摩登发布:独创复古女王风
当前速讯:你家乡上榜没?中国省级“癌症地图”出炉:肺癌列第一 “穷癌”下降“富癌”上升
3299元性价比封神!AMD Zen4 104MB缓存锐龙7 7800X3D价格公布
迅雷临时文件读取错误怎么回事?迅雷临时文件读取错误怎么解决?
色带打印机怎么换色带?色带的正确安装方法是什么?
win10版本号与操作系统版本号有什么区别?怎么查看win10版本号?