Nginx - 一键实现Nginx的快速安装和优化配置

文章目录

  • 思路
  • 实现
  • 二次优化

在这里插入图片描述


思路

  1. 初始化下载工具目录并下载依赖
    • 创建临时目录 /tmp/tools
    • 下载 OpenSSL、PCRE 和 Zlib 的压缩包。
    • 解压这些依赖包到指定目录。
  2. 设置NGINX的用户和脚本
    • 添加 nginx 用户。
    • 创建目录和启动、停止、重载NGINX的脚本。
  3. 安装NGINX
    • 解压NGINX源码包并配置、编译、安装。
  4. 初始化NGINX配置
    • 备份默认配置文件。
    • 创建并写入自定义的 NGINX 主配置文件和服务器配置文件。
    • 启动 NGINX。
  5. 帮助信息
    • 提供帮助信息,描述配置文件路径和控制命令。

在这里插入图片描述


实现

#!/bin/bash

NGINX_VERSION="nginx-1.22.1"

init(){
  mkdir -p /tmp/tools
  echo "wget 下载包中...."
  sleep 6
  cd /tmp/tools
  for i in openssl-1.1.1t pcre-8.45 zlib-1.2.13; do
    wget https://d.frps.cn/file/tools/nginx/${i}.tar.gz
  done
  wget https://d.frps.cn/file/tools/nginx/nginx-1.22.1.tar.gz
  for i in openssl-1.1.1t pcre-8.45 zlib-1.2.13; do
    tar zxvf ${i}.tar.gz -C /usr/local/src
  done
}

touch(){
  NGINX_PATH="/opt/${NGINX_VERSION}/sbin/nginx"
  useradd nginx -s /sbin/nologin -M
  mkdir /opt/bin
  echo "${NGINX_PATH} -s reload" >/opt/bin/nginx_reload.sh
  echo "${NGINX_PATH} -c /opt/${NGINX_VERSION}/conf/nginx.conf" >/opt/bin/nginx_start.sh
  echo "killall -9 nginx" >/opt/bin/nginx_stop.sh
  chmod 755 /opt/bin/nginx_*.sh
}

install(){
  cd /tmp/tools && tar xf ${NGINX_VERSION}.tar.gz && cd ${NGINX_VERSION}
  ./configure --prefix=/opt/${NGINX_VERSION} \
              --with-openssl=/usr/local/src/openssl-1.1.1t \
              --with-pcre=/usr/local/src/pcre-8.45 \
              --with-zlib=/usr/local/src/zlib-1.2.13 \
              --with-http_ssl_module \
              --with-http_stub_status_module \
              --with-stream \
              --with-http_gzip_static_module
  make && make install
}

init_conf(){
  if [ -d "/opt/${NGINX_VERSION}" ]; then
    mv /opt/${NGINX_VERSION}/conf/nginx.conf /opt/${NGINX_VERSION}/conf/nginx.conf.bak
    mkdir -p /opt/${NGINX_VERSION}/conf/conf.d
    cat > /opt/${NGINX_VERSION}/conf/nginx.conf <<-EOF
user nginx;
error_log  logs/nginx_error.log;
worker_processes  1;
events {
    worker_connections  4096;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '\$remote_addr | \$remote_user | \$time_local | \$request | \$http_host |'
                      '\$status | \$upstream_status | \$body_bytes_sent | \$http_referer '
                      '\$http_user_agent | \$upstream_addr | \$request_time | \$upstream_response_time';
    sendfile        on;
    charset utf-8;
    keepalive_timeout  65;
    large_client_header_buffers 8 128k;
    server_tokens off;
    proxy_buffering on;
    proxy_hide_header X-Powered-By;
    proxy_hide_header Server;
    proxy_buffer_size 1024k;
    proxy_buffers 32 1024k;
    proxy_busy_buffers_size 2048k;
    proxy_temp_file_write_size 2048k;
    proxy_connect_timeout 300s;
    proxy_read_timeout 300s;
    proxy_send_timeout 300s;
    proxy_ignore_headers Set-Cookie;
    client_header_timeout 120s;
    client_max_body_size 100M;
    client_body_buffer_size 100M;
    client_header_buffer_size 128k;
    fastcgi_connect_timeout 600;
    fastcgi_send_timeout 600;
    fastcgi_read_timeout 600;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 128k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    gzip on;
    gzip_min_length 1000;
    gzip_buffers 16 8k;
    gzip_comp_level 8;
    gzip_proxied any;
    gzip_disable "MSIE [1-6]\.";
    gzip_types  text/plain text/css application/javascript application/x-javascript text/xml application/json application/xml application/xml+rss text/javascript image/jpg image/jpeg image/png image/gif;
    tcp_nopush on;
    tcp_nodelay on;
    server_names_hash_bucket_size 128;
    add_header Nginx-Server "\$hostname";
    max_ranges 1;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    include /opt/${NGINX_VERSION}/conf/conf.d/*.conf;
}
EOF
  else
    exit 3
  fi

  if [ -d "/opt/${NGINX_VERSION}/conf/conf.d" ]; then
    cat > /opt/${NGINX_VERSION}/conf/conf.d/nginx.conf <<-EOF 
server {
  listen       80;
  server_name  localhost;
  location / {
    root   html;
    index  index.html index.htm;
  }
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   html;
  }
}
EOF
  else
    exit 4
  fi

  if [ -d "/opt/${NGINX_VERSION}/conf" ]; then
    /opt/bin/nginx_start.sh
  else
    exit 5
  fi
}

help(){
  echo "######################"
  echo "修改配置文件路径"
  echo "/opt/${NGINX_VERSION}/conf/conf.d/nginx.conf"
  echo "启动停止"
  echo "systemctl start nginx"
  echo "systemctl stop nginx"
  echo "启动停止"
  echo "/opt/bin/nginx_start.sh"
  echo "/opt/bin/nginx_stop.sh"
  echo "重载配置"
  echo "/opt/bin/nginx_reload.sh"
  echo "######################"
}

init
touch
install
init_conf
help

二次优化

#!/bin/bash

set -e  # 如果遇到错误就退出脚本
set -u  # 使用未初始化的变量就退出脚本

NGINX_VERSION="nginx-1.22.1"
DEPENDENCIES=("openssl-1.1.1t" "pcre-8.45" "zlib-1.2.13")
TOOL_DIR="/tmp/tools"
SRC_DIR="/usr/local/src"
NGINX_PREFIX="/opt/${NGINX_VERSION}"
NGINX_SBIN="${NGINX_PREFIX}/sbin/nginx"
BIN_DIR="/opt/bin"
LOG_FILE="/var/log/nginx_install.log"

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOG_FILE
}

check_dependencies() {
    for cmd in wget tar make gcc; do
        if ! command -v $cmd &> /dev/null; then
            log "依赖 $cmd 不存在,请安装后再运行此脚本。"
            exit 1
        fi
    done
}

init() {
    log "初始化工具目录和下载依赖包..."
    mkdir -p ${TOOL_DIR}
    cd ${TOOL_DIR}
    for dep in "${DEPENDENCIES[@]}"; do
        wget https://d.frps.cn/file/tools/nginx/${dep}.tar.gz
    done
    wget https://d.frps.cn/file/tools/nginx/${NGINX_VERSION}.tar.gz
    for dep in "${DEPENDENCIES[@]}"; do
        tar zxvf ${dep}.tar.gz -C ${SRC_DIR}
    done
}

create_user_and_scripts() {
    log "创建 nginx 用户和管理脚本..."
    useradd nginx -s /sbin/nologin -M || true
    mkdir -p ${BIN_DIR}
    echo "${NGINX_SBIN} -s reload" >${BIN_DIR}/nginx_reload.sh
    echo "${NGINX_SBIN} -c ${NGINX_PREFIX}/conf/nginx.conf" >${BIN_DIR}/nginx_start.sh
    echo "killall -9 nginx" >${BIN_DIR}/nginx_stop.sh
    chmod 755 ${BIN_DIR}/nginx_*.sh
}

install_nginx() {
    log "编译和安装 Nginx..."
    cd ${TOOL_DIR} && tar xf ${NGINX_VERSION}.tar.gz && cd ${NGINX_VERSION}
    ./configure --prefix=${NGINX_PREFIX} \
                --with-openssl=${SRC_DIR}/openssl-1.1.1t \
                --with-pcre=${SRC_DIR}/pcre-8.45 \
                --with-zlib=${SRC_DIR}/zlib-1.2.13 \
                --with-http_ssl_module \
                --with-http_stub_status_module \
                --with-stream \
                --with-http_gzip_static_module
    make && make install
}

init_nginx_conf() {
    log "初始化 Nginx 配置文件..."
    if [ -d "${NGINX_PREFIX}" ]; then
        mv ${NGINX_PREFIX}/conf/nginx.conf ${NGINX_PREFIX}/conf/nginx.conf.bak
        mkdir -p ${NGINX_PREFIX}/conf/conf.d
        cat > ${NGINX_PREFIX}/conf/nginx.conf <<-EOF
user nginx;
error_log  logs/nginx_error.log;
worker_processes  1;
events {
    worker_connections  4096;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '\$remote_addr | \$remote_user | \$time_local | \$request | \$http_host |'
                      '\$status | \$upstream_status | \$body_bytes_sent | \$http_referer '
                      '\$http_user_agent | \$upstream_addr | \$request_time | \$upstream_response_time';
    sendfile        on;
    charset utf-8;
    keepalive_timeout  65;
    large_client_header_buffers 8 128k;
    server_tokens off;
    proxy_buffering on;
    proxy_hide_header X-Powered-By;
    proxy_hide_header Server;
    proxy_buffer_size 1024k;
    proxy_buffers 32 1024k;
    proxy_busy_buffers_size 2048k;
    proxy_temp_file_write_size 2048k;
    proxy_connect_timeout 300s;
    proxy_read_timeout 300s;
    proxy_send_timeout 300s;
    proxy_ignore_headers Set-Cookie;
    client_header_timeout 120s;
    client_max_body_size 100M;
    client_body_buffer_size 100M;
    client_header_buffer_size 128k;
    fastcgi_connect_timeout 600;
    fastcgi_send_timeout 600;
    fastcgi_read_timeout 600;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 128k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    gzip on;
    gzip_min_length 1000;
    gzip_buffers 16 8k;
    gzip_comp_level 8;
    gzip_proxied any;
    gzip_disable "MSIE [1-6]\.";
    gzip_types  text/plain text/css application/javascript application/x-javascript text/xml application/json application/xml application/xml+rss text/javascript image/jpg image/jpeg image/png image/gif;
    tcp_nopush on;
    tcp_nodelay on;
    server_names_hash_bucket_size 128;
    add_header Nginx-Server "\$hostname";
    max_ranges 1;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    include ${NGINX_PREFIX}/conf/conf.d/*.conf;
}
EOF
    else
        log "Nginx 目录 ${NGINX_PREFIX} 不存在,初始化配置失败。"
        exit 3
    fi

    if [ -d "${NGINX_PREFIX}/conf/conf.d" ]; then
        cat > ${NGINX_PREFIX}/conf/conf.d/nginx.conf <<-EOF
server {
  listen       80;
  server_name  localhost;
  location / {
    root   html;
    index  index.html index.htm;
  }
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   html;
  }
}
EOF
    else
        log "Nginx 配置目录 ${NGINX_PREFIX}/conf/conf.d 不存在,初始化服务器配置失败。"
        exit 4
    fi

    if [ -d "${NGINX_PREFIX}/conf" ]; then
        ${BIN_DIR}/nginx_start.sh
    else
        log "Nginx 配置目录 ${NGINX_PREFIX}/conf 不存在,启动失败。"
        exit 5
    fi
}

help() {
    log "提供帮助信息..."
    echo "######################"
    echo "修改配置文件路径"
    echo "/opt/${NGINX_VERSION}/conf/conf.d/nginx.conf"
    echo "启动停止"
    echo "systemctl start nginx"
    echo "systemctl stop nginx"
    echo "启动停止"
    echo "/opt/bin/nginx_start.sh"
    echo "/opt/bin/nginx_stop.sh"
    echo "重载配置"
    echo "/opt/bin/nginx_reload.sh"
    echo "######################"
}

main() {
    check_dependencies
    init
    create_user_and_scripts
    install_nginx
    init_nginx_conf
    help
}

main

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/636473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何异地组网添加摄像机?

本文将介绍如何使用天联技术实现异地组网添加摄像机&#xff0c;并保障数据的安全性。 安防摄像机的应用愈发广泛&#xff0c;无论是家庭安防还是企业监控&#xff0c;摄像机都扮演着重要角色。在一些特殊场合或者特殊需求下&#xff0c;我们需要将摄像机添加到异地网络中进行监…

Web开发——HTMLCSS

1、概述 Web开发分前端开发和后端开发&#xff0c;前端开发负责展示数据&#xff0c;后端开发负责处理数据。 HTML&CSS是浏览器数据展示相关的内容。 1&#xff09;网页的组成部分 文字、图片、音频、视频、超链接、表格等等 2&#xff09;网页背后的本质 程序员写的前端…

神经网络基础结构

1. 神经网络 在神经网络中&#xff0c;每个神经元都有一个与之关联的权重和偏置&#xff0c;它们用于计算神经元的输出值。神经元接收来自上一层神经元的输入&#xff0c;并将这些输入与权重相乘并加上偏置&#xff0c;然后通过激活函数进行非线性处理&#xff0c;最终产生输出…

Qt案例练习(有源码)

项目源码和资源&#xff1a;Qt案例练习: qt各种小案例练习,有完整资源和完整代码 1.案例1 项目需求&#xff1a;中间为文本框&#xff0c;当点击上面的复选框和单选按钮时&#xff0c;文本框内的文本会进行相应的变化。 代码如下&#xff1a; #include "dialog.h" …

【全开源】智能名片系统源码(Fastadmin+ThinkPHP和Uniapp)

数字时代的新名片&#xff0c;连接未来的桥梁 引言 在数字化浪潮的推动下&#xff0c;传统名片已经逐渐淡出人们的视线。取而代之的是智能名片系统&#xff0c;它以其高效、便捷和智能化的特点&#xff0c;成为了商务交流的新宠。而智能名片系统源码&#xff0c;作为其核心驱…

nextcloud 安装部署

php版本不对 ubuntu nginx 配置php 网站-CSDN博客 抄自chatgpt ubuntu完全卸载干净某个包-CSDN博客 以及设置基本的php nginx环境参照上面两篇博文 然后参照官方文档 Example installation on Ubuntu 22.04 LTS — Nextcloud latest Administration Manual latest document…

datasheet芯片数据手册—新手入门学习(二)【8-18】

参考芯片手册已经上传&#xff0c;可自行下载 因为芯片参考手册内容比较多&#xff0c;故再一次介绍本文内容主要讲解章节。 目录 8、内容介绍 命令真值表 9、Command Definitions 10、READ Operations &#xff08;1&#xff09;页面读取操作 &#xff08;2&#xff…

Docker 开启 SSL 验证

最近看 OJ 项目的远程开发阶段&#xff0c;然后踩坑踩了 2 天&#x1f602; Docker 版本&#xff1a;在 CentOS 安装 sudo yum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io Client: Docker Engine - CommunityVersion: 20.10.9API version: …

1673. 找出最具竞争力的子序列

题目 给定一个整数数组 nums 和一个正整数 k&#xff0c;返回长度为 k 且最具竞争力的 nums 子序列。 数组的子序列是从数组中删除一些元素&#xff08;可能不删除元素&#xff09;得到的序列。 在子序列 a 和子序列 b 第一个不相同的位置上&#xff0c;如果 a 中的数字小于…

Redis系统架构中各个处理模块是干什么的?no.19

Redis 系统架构 通过前面的学习&#xff0c;相信你已经掌握了 Redis 的原理、数据类型及访问协议等内容。本课时&#xff0c;我将进一步分析 Redis 的系统架构&#xff0c;重点讲解 Redis 系统架构的事件处理机制、数据管理、功能扩展、系统扩展等内容。 事件处理机制 Redis…

[论文精读]Variational Bayesian Last Layers

论文网址&#xff1a;Variational Bayesian Last Layers (arxiv.org) 论文代码&#xff1a;GitHub - VectorInstitute/vbll: Simple (and cheap!) neural network uncertainty estimation 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以…

leetcode437 路径总和III-哈希表+前缀和

题目 给定一个二叉树的根节点 root &#xff0c;和一个整数 targetSum &#xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xff0c;也不需要在叶子节点结束&#xff0c;但是路径方向必须是向下的&#xff08;只能从父节点到子节…

服务器数据恢复—EVA存储多块硬盘离线导致部分LUN丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 1台某品牌EVA4400控制器3台EVA4400扩展柜28块FC硬盘。 服务器故障&#xff1a; 由于两块磁盘掉线导致存储中某些LUN不可用&#xff0c;某些LUN丢失&#xff0c;导致存储崩溃。 服务器数据恢复过程&#xff1a; 1、由于EVA4400存储故障是某些磁…

Web API——获取DOM元素

目录 1、根据选择器来获取DOM元素 2.、根据选择器来获取DOM元素伪数组 3、根据id获取一个元素 4、通过标签类型名获取所有该标签的元素 5、通过类名获取元素 目标&#xff1a;能查找/获取DOM对象 1、根据选择器来获取DOM元素 语法&#xff1a; document.querySelector(css选择…

python从0开始学习(十二)

目录 前言 1、字符串的常用操作 2、字符串的格式化 2.1 格式化字符串的详细格式&#xff08;针对format形式&#xff09; ​编辑 总结 前言 上一篇文章我们讲解了两道关于组合数据类型的题目&#xff0c;本篇文章我们将学习新的章节&#xff0c;学习字符串及正则表达式。 …

C++|红黑树(分析+模拟实现插入)

目录 一、概念 二、红黑树插入的实现 2.1红黑树节点的定义 2.2红黑树基础架构 2.3红黑树的插入 2.3.1按照二叉搜索树的规则插入新结点 2.3.2检测新插入节点&#xff0c;是否破坏红黑树性质来进行调整 2.3.2.1cur为红&#xff0c;p为红&#xff0c;g为黑&#xff0c;u存…

好用的桌面备忘录是哪个?备忘录软件哪个更好用?

备忘录软件已成为我们日常生活和工作中不可或缺的工具&#xff0c;它能帮助我们记录重要事项、安排日程&#xff0c;从而提高工作效率&#xff0c;减少遗忘。在繁忙的工作和生活中&#xff0c;一款好用的备忘录软件往往能让我们事半功倍。 在众多的备忘录软件中&#xff0c;敬…

Jenkins 构建 Web 项目:构建服务器和部署服务器分离的情况

构建命令 #!/bin/bash node -v pnpm -v pnpm install pnpm build:prod # 将dist打包成dist.zip zip -r dist.zip dist

2024年艺术鉴赏与文化传播国际会议(AACC 2024)

2024年艺术鉴赏与文化传播国际会议&#xff08;AACC 2024&#xff09; 2024 International Conference on Art Appreciation and Cultural Communication 【重要信息】 大会地点&#xff1a;贵阳 大会官网&#xff1a;http://www.icaacc.com 投稿邮箱&#xff1a;icaaccsub-co…

VS QT 里头文件的<>和““的区别

今天在跑项目的时候遇到这么个问题&#xff0c;在添加api宏定义的时候&#xff0c;不加显示无法识别的外部错误&#xff0c;加了显示找不到文件。反正就是怎么都是错的&#xff0c;但是我检查了CmakeLists、模块所在文件夹、项目路径都是没有问题的。非常奇怪。 然后就开始尝试…