思路
初始化下载工具目录并下载依赖 :
创建临时目录 /tmp/tools
。 下载 OpenSSL、PCRE 和 Zlib 的压缩包。 解压这些依赖包到指定目录。 设置NGINX的用户和脚本 :
添加 nginx 用户。 创建目录和启动、停止、重载NGINX的脚本。 安装NGINX :
初始化NGINX配置 :
备份默认配置文件。 创建并写入自定义的 NGINX 主配置文件和服务器配置文件。 启动 NGINX。 帮助信息 :
实现
#!/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