前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx - 一键实现Nginx的快速安装和优化配置

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

作者头像
小小工匠
发布2024-05-26 13:53:05
570
发布2024-05-26 13:53:05
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构

思路

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

实现

代码语言:javascript
复制
#!/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

二次优化

代码语言:javascript
复制
#!/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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路
  • 实现
  • 二次优化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档