Server 11 ,⭐通过脚本在全新 Ubuntu 系统中安装 Nginx 环境,安装到指定目录( 脚本安装Nginx )

发布于:2025-06-14 ⋅ 阅读:(21) ⋅ 点赞:(0)

目录

前言
一、准备工作
1.1 系统要求
1.2 创建目录
1.3 创建粘贴
1.4 授权脚本
1.5 执行脚本
1.6 安装完成
二、实际部署
2.1 赋予权限
2.2 粘贴文件
2.3 重启服务
三、脚本解析
步骤 1: 安装编译依赖
步骤 2: 创建安装目录
步骤 3: 下载解压源码
步骤 4: 配置编译参数
步骤 5: 编译并安装
步骤 6: 创建基本配置
步骤 7: 创建测试页面
步骤 8: 创建服务文件
步骤 9: 启动验证服务
步骤 10: 检查服务状态
四、更多操作

前言

在 Web 服务部署中,Nginx 以其高性能和稳定性成为开发者和运维工程师的首选。虽然可以通过 apt install nginx 快速安装,但往往版本较旧、模块固定、不够灵活。为了支持更高版本、更丰富模块、更自定义部署方式,通过脚本源码安装并部署到指定目录是一种更高级且可控的做法

对于需要定制 Nginx 环境或者想避免使用系统自带包管理器版本的开发者和运维人员来说,源码编译安装 Nginx 是常见方案。本文将带你一步步完成在 Ubuntu 新环境下,如何通过一个自动化脚本完成 Nginx 源码下载、依赖安装、编译、安装、配置、服务注册与启动全过程,并将 Nginx 安装在指定目录 /usr/local/devapp,方便管理和维护,适用于全新 Ubuntu 系统环境,

我们将实现以下目标:

  • ✅ 编译安装最新版 Nginx 到 /usr/local/devapp

  • ✅ 自动完成配置文件、服务文件、默认网站等设置

  • ✅ 实现 systemd 管理,支持 systemctl 启动/停止 Nginx

  • ✅ 实现 nginx -v 等命令全局可用等

一、准备工作

准备工作:系统环境与脚本创建

1.1 系统要求

  1. Ubuntu 20.04 或 22.04(其他 Debian 系兼容)

  2. 已联网,具备普通用户 sudo 权限

1.2 创建目录

创建安装目录(可选)

如需将所有脚本和部署管理文件统一管理,可以手动准备一个目录:

sudo mkdir -p devapp        # 创建存放脚本的目录(可选)

进入创建文件目录

cd devapp        # 进入目录

注意,这里根据实际情况,进入目标目录 /usr/local后,创建devapp文件后进入。

1.3 创建粘贴

创建文件,并粘贴脚本

使用 nano 创建脚本文件:

sudo nano install_nginx.sh        # 创建并打开脚本编辑器

将以下内容粘贴进去:

🧩 此处插入 Nginx 安装脚本代码

脚本代码:

#!/bin/bash

# Nginx 源码编译安装脚本(优化版)
# 安装目录:/usr/local/devapp

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

# 自动判断是否需要 sudo
if [ "$(id -u)" -ne 0 ]; then
  SUDO='sudo'
else
  SUDO=''
fi

echo -e "${GREEN}==== 开始安装 Nginx 到 /usr/local/devapp ====${NC}"

# 步骤 1: 安装编译依赖
echo -e "${YELLOW}正在安装编译依赖...${NC}"
$SUDO apt update -y
$SUDO apt install -y gcc make libpcre3-dev zlib1g-dev libssl-dev wget tar nano

# 步骤 2: 创建安装目录
echo -e "${YELLOW}正在创建安装目录...${NC}"
$SUDO mkdir -p /usr/local/devapp
$SUDO chmod 755 /usr/local/devapp

# 步骤 3: 下载并解压 Nginx 源码
echo -e "${YELLOW}正在下载 Nginx 源码...${NC}"
cd /tmp || exit
$SUDO wget "http://nginx.org/download/nginx-1.24.0.tar.gz"
$SUDO tar -zxvf "nginx-1.24.0.tar.gz"
cd "nginx-1.24.0" || exit

# 步骤 4: 配置编译参数
echo -e "${YELLOW}正在配置编译参数...${NC}"
$SUDO ./configure \
--prefix=/usr/local/devapp \
--sbin-path=/usr/local/devapp/sbin/nginx \
--conf-path=/usr/local/devapp/conf/nginx.conf \
--pid-path=/usr/local/devapp/logs/nginx.pid \
--error-log-path=/usr/local/devapp/logs/error.log \
--http-log-path=/usr/local/devapp/logs/access.log \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_gzip_static_module \
--with-threads \
--with-file-aio

# 步骤 5: 编译并安装
echo -e "${YELLOW}正在编译并安装 Nginx...${NC}"
$SUDO make -j "$(nproc)"
$SUDO make install

# 步骤 6: 创建基本配置文件和目录
echo -e "${YELLOW}正在创建基本配置和网站目录...${NC}"
$SUDO mkdir -p /usr/local/devapp/conf/sites-available
$SUDO mkdir -p /usr/local/devapp/conf/sites-enabled
$SUDO mkdir -p /usr/local/devapp/html/Dmx  # 修改为实际部署目录

# 创建默认网站配置文件
$SUDO bash -c 'cat > /usr/local/devapp/conf/sites-available/default << EOF
server {
    listen       192.168.110.205:80;
    server_name  localhost;

    location / {
        root   /usr/local/devapp/html/Dmx;
        index  index.html index.htm;
    }
}
EOF'

# 启用默认网站配置
$SUDO ln -sf /usr/local/devapp/conf/sites-available/default /usr/local/devapp/conf/sites-enabled/default

# 修改主配置文件包含 sites-enabled
$SUDO sed -i "s|include /etc/nginx/conf.d/.*|include /usr/local/devapp/conf/sites-enabled/*.conf;|" /usr/local/devapp/conf/nginx.conf

# 步骤 7: 创建测试页面
echo -e "${YELLOW}正在创建测试页面...${NC}"
$SUDO bash -c 'cat > /usr/local/devapp/html/Dmx/index.html << EOF
<!DOCTYPE html>
<html>
<head>
    <title>Welcome to Nginx!</title>
    <style>
        body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; }
    </style>
</head>
<body>
    <h1>Welcome to Nginx!</h1>
    <p>If you see this page, the Nginx web server is successfully installed and
    working. Further configuration is required.</p>
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    <p><em>Thank you for using Nginx.</em></p>
</body>
</html>
EOF'

# 步骤 8: 创建 systemd 服务文件
echo -e "${YELLOW}正在创建 systemd 服务...${NC}"
$SUDO bash -c 'cat > /etc/systemd/system/nginx-devapp.service << EOF
[Unit]
Description=Nginx (devapp)
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/devapp/logs/nginx.pid
ExecStart=/usr/local/devapp/sbin/nginx
ExecReload=/usr/local/devapp/sbin/nginx -s reload
ExecStop=/usr/local/devapp/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF'

# 步骤 9: 启动并验证服务
echo -e "${YELLOW}正在启动 Nginx 服务...${NC}"
$SUDO systemctl daemon-reload
$SUDO systemctl enable nginx-devapp
$SUDO systemctl start nginx-devapp

# 步骤 10: 检查服务状态
echo -e "${YELLOW}正在验证安装...${NC}"
if $SUDO systemctl is-active --quiet nginx-devapp; then
    echo -e "${GREEN}Nginx 服务已成功启动!${NC}"
    echo -e "${GREEN}访问地址:http://192.168.110.205${NC}"  # 修改为你的实际 IP
else
    echo -e "${RED}Nginx 启动失败,请检查日志:${NC}"
    $SUDO systemctl status nginx-devapp
fi

# 安装完成信息
echo -e "${GREEN}==== Nginx 安装完成 ====${NC}"
echo -e "${YELLOW}安装目录: /usr/local/devapp${NC}"
echo -e "${YELLOW}配置文件: /usr/local/devapp/conf/nginx.conf${NC}"
echo -e "${YELLOW}网站目录: /usr/local/devapp/html/Dmx${NC}"
echo -e "${YELLOW}管理命令:${NC}"
echo -e "  $SUDO systemctl start nginx-devapp    # 启动"
echo -e "  $SUDO systemctl stop nginx-devapp     # 停止"
echo -e "  $SUDO systemctl restart nginx-devapp  # 重启"
echo -e "  $SUDO systemctl status nginx-devapp   # 状态"

nano 编辑器保存并退出提示:

  1. Ctrl + O:保存文件

  2. 回车:确认文件名

  3. Ctrl + X:退出编辑器

1.4 授权脚本

sudo chmod +x install_nginx.sh        # 添加可执行权限

1.5 执行脚本

sudo ./install_nginx.sh        # 执行脚本(必须使用 sudo)

💡 这里为什么要加 sudo?因为安装过程涉及系统目录操作(如 /usr/local, /etc/systemd)、安装系统包等,必须具备管理员权限。

1.6 安装完成

脚本代码执行完毕,请看

可以看到脚本执行完成后,Nginx已经启动成功。

这是在 less 查看模式(因为底部有 [lines 1-13/13 (END)] 提示 ),可以按 q 键就能退出当前查看的 systemctl status 输出内容,回到命令行提示符继续操作 。


二、实际部署

在脚本执行完成以后,Nginx也安装启动完毕。这时我们需要根据实际情况,修改配置  nginx.conf文件,文件位于:/usr/local/devapp/conf/目录下,把配置文件里面IP地址改为服务器IP地址,端口号改为后端部署的端口。修改 nginx.conf 文件,必须为文件赋予权限。

2.1 赋予权限

sudo chmod -R 777 /usr/local/devapp

这句话的作用是递归修改权限,把/usr/local/devapp目录下所有文件和子目录的权限都设置为最高权限(777)。这里的777表示所有用户(拥有者、所属组、其他用户)都有 ** 读(r=4)、写(w=2)、执行(x=1)** 的权限。

注意事项

  1. 谨慎使用:在生产环境中,这种操作可能会带来安全风险。
  2. 适用场景:如果是在开发环境中,为了方便测试和部署,临时修改权限是可以的。但在生产环境中,建议针对特定的用户或用户组设置更精确的权限。
  3. sudo 权限:执行此命令需要管理员权限,因此需要使用sudo

当然,你也可以给指定的某个文件,赋予权限,这里是直接把整个 devapp 赋予权限。

2.2 粘贴文件

这是 nginx.conf 测试环境的基本配置文件,复制粘贴后,根据实际情况,进行修改

user  nobody;
worker_processes  auto;
error_log  logs/error.log  error;
pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush      on;
    keepalive_timeout  65;
    gzip  on;

    include /usr/local/devapp/conf/sites-enabled/*.conf;

    server {
        listen       192.168.112.131:80;
        server_name  localhost;

        location / {
            root   /usr/local/devapp/html/Dmx;
            index  index.html index.htm;
        }
    }
}

注释版本:

# Nginx基础配置
user  nobody;           # 工作进程运行用户
worker_processes  auto;  # 自动设置为CPU核心数

error_log  logs/error.log  error;  # 错误日志配置
pid        logs/nginx.pid;         # 主进程PID文件

# 事件模块配置
events {
    worker_connections  1024;  # 每个进程最大连接数
}

# HTTP核心配置
http {
    include       mime.types;              # MIME类型定义
    default_type  application/octet-stream; # 默认文件类型

    # 日志格式:记录客户端IP、请求、状态码等信息
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" "$http_user_agent"';
    access_log  logs/access.log  main;  # 访问日志配置

    # 性能优化设置
    sendfile        on;         # 高效文件传输
    tcp_nopush      on;         # 提高网络包传输效率
    keepalive_timeout  65;      # 连接超时时间
    gzip  on;                   # 启用内容压缩

    # 包含其他配置文件
    include /usr/local/devapp/conf/sites-enabled/*.conf;

    # 虚拟主机配置
    server {
        listen       192.168.112.131:80;  # 监听IP和端口
        server_name  localhost;            # 服务器名称

        # 根路径配置
        location / {
            root   /usr/local/devapp/html/Dmx;  # 网站根目录
            index  index.html index.htm;        # 默认首页
        }
    }
}

这份 Nginx 配置文件构建了一个基础但功能完整的 Web 服务器环境,核心配置包括:

  1. 以 nobody 用户 运行工作进程增强安全性,通过 worker_processes auto 自动适配 CPU 核心数优化性能;
  2. 启用 错误日志(error 级别) 和 访问日志 记录系统运行状态;
  3. 事件模块设置每个进程支持 1024 个并发连接
  4. HTTP 模块中,通过 sendfile 和 gzip 压缩 提升传输效率,设置 65 秒长连接超时,并通过 include 指令 动态加载外部配置支持多站点管理;
  5. 虚拟主机监听指定 IP 的 80 端口,将 /usr/local/devapp/html/Dmx 设为网站根目录,默认加载 index.html 作为首页。

该配置兼顾性能与安全,适合 中小型静态网站 或 开发测试环境 使用,可通过扩展 sites-enabled 目录 快速部署多站点。

针对生产环境,现有配置需要补充以下关键增强措施:

生产环境需要在现有配置基础上补充 HTTPS、安全头、缓存策略、请求限制 等关键组件,并确保 文件权限严格日志监控完善。建议先在测试环境验证配置,再迁移至生产环境。

user www-data;                 # 使用专用用户而非nobody
worker_processes auto;         # 自动调整进程数
worker_rlimit_nofile 65535;    # 提高文件描述符限制

error_log /var/log/nginx/error.log error;
pid /var/run/nginx.pid;

events {
    worker_connections 4096;   # 增加并发连接数
    multi_accept on;           # 允许一次接受多个连接
}

http {
    include mime.types;
    default_type application/octet-stream;
    
    # 安全设置
    server_tokens off;         # 隐藏版本号
    client_max_body_size 10M;  # 限制请求大小
    
    # 性能优化
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    gzip on;
    gzip_comp_level 5;         # 压缩级别折中选择
    
    # 安全头
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Frame-Options "SAMEORIGIN";
    
    # 静态资源缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
    
    # HTTP重定向HTTPS
    server {
        listen 80;
        server_name example.com;
        return 301 https://$host$request_uri;
    }
    
    # HTTPS服务器
    server {
        listen 443 ssl;
        server_name example.com;
        
        ssl_certificate /path/to/cert.pem;
        ssl_certificate_key /path/to/key.pem;
        ssl_protocols TLSv1.2 TLSv1.3;  # 禁用不安全协议
        
        location / {
            root /usr/local/devapp/html/Dmx;
            index index.html;
        }
    }
}

这份生产环境优化的 Nginx 配置通过将运行用户从 nobody 改为专用的 www-data、强制 HTTPS 并禁用旧版 TLS 协议、添加安全响应头(如 X-Frame-Options)和限制请求大小(10M)增强了安全性;通过自动调整 工作进程数、增加并发连接数至 4096、启用静态资源缓存(30 天)和优化 TCP 传输参数(sendfiletcp_nopush)提升了性能;同时通过明确 日志路径、提高 文件描述符限制 和压缩静态内容(gzip_comp_level 5)保障了可靠性,适合作为中小型系统及网站的基础配置模板。

2.3 重启服务

修改 nginx.conf 配置文件后,必须重新启动 nginx 才会生效,执行命令如下

sudo systemctl restart nginx-devapp        # 重启服务

查看状态

sudo systemctl status nginx-devapp        # 查看运行状态

停止服务

sudo systemctl stop nginx-devapp        # 停止服务

启动服务

sudo systemctl start nginx-devapp        # 启动服务

根据实际需求,执行相应命令,完成配置。


三、脚本解析

这个 Bash 脚本用于从源码编译安装 Nginx,并且进行了一些优化配置。整个过程分为10个步骤,下面结合代码讲解每个步骤具体做了什么:

步骤 1: 安装编译依赖

$SUDO apt update -y
$SUDO apt install -y gcc make libpcre3-dev zlib1g-dev libssl-dev wget tar nano

此步骤更新软件包列表并安装必要的编译工具和库文件,包括 gcc 编译器、make 构建工具以及 Nginx 需要的其他依赖项如 PCRE、zlib 和 OpenSSL。

步骤 2: 创建安装目录

$SUDO mkdir -p /usr/local/devapp
$SUDO chmod 755 /usr/local/devapp

创建 /usr/local/devapp 目录作为 Nginx 的安装路径,并设置其权限为 755。

步骤 3: 下载解压源码

下载并解压 Nginx 源码

cd /tmp || exit
$SUDO wget "http://nginx.org/download/nginx-1.24.0.tar.gz"
$SUDO tar -zxvf "nginx-1.24.0.tar.gz"
cd "nginx-1.24.0" || exit

切换到 /tmp 目录下,下载指定版本的 Nginx 源码压缩包,并解压该压缩包,然后进入解压后的目录。

步骤 4: 配置编译参数

$SUDO ./configure \
--prefix=/usr/local/devapp \
...

使用 ./configure 命令配置编译选项,这里指定了 Nginx 的安装路径、二进制文件位置、配置文件路径等信息,还启用了 SSL 支持和其他模块。

步骤 5: 编译并安装

$SUDO make -j "$(nproc)"
$SUDO make install

使用 make 命令开始编译 Nginx 源码,并行数根据 CPU 核心数确定(通过 nproc 获取)。之后用 make install 将编译好的程序安装到指定目录。

步骤 6: 创建基本配置

创建基本配置文件和目录

$SUDO mkdir -p /usr/local/devapp/conf/sites-available
$SUDO mkdir -p /usr/local/devapp/conf/sites-enabled
$SUDO mkdir -p /usr/local/devapp/html/Dmx

创建一些必要的目录结构,包括站点配置文件存放目录及默认网站内容目录。

接着生成一个默认站点配置文件,并启用它:

$SUDO bash -c 'cat > /usr/local/devapp/conf/sites-available/default << EOF ... EOF'
$SUDO ln -sf /usr/local/devapp/conf/sites-available/default /usr/local/devapp/conf/sites-enabled/default

修改主配置文件以包含这些站点配置文件:

$SUDO sed -i "s|include /etc/nginx/conf.d/.*|include /usr/local/devapp/conf/sites-enabled/*.conf;|" /usr/local/devapp/conf/nginx.conf

步骤 7: 创建测试页面

$SUDO bash -c 'cat > /usr/local/devapp/html/Dmx/index.html << EOF ... EOF'

在指定目录下创建一个简单的 HTML 文件作为测试页面,用于验证 Nginx 是否正确运行。

步骤 8: 创建服务文件

创建 systemd 服务文件

$SUDO bash -c 'cat > /etc/systemd/system/nginx-devapp.service << EOF ... EOF'

编写一个 Systemd 服务文件来管理 Nginx 的启动与停止,方便以后操作。

步骤 9: 启动验证服务

启动并验证服务

$SUDO systemctl daemon-reload
$SUDO systemctl enable nginx-devapp
$SUDO systemctl start nginx-devapp

重新加载 Systemd 配置,启用并启动 Nginx 服务。

步骤 10: 检查服务状态

if $SUDO systemctl is-active --quiet nginx-devapp; then
    echo -e "${GREEN}Nginx 服务已成功启动!${NC}"
else
    echo -e "${RED}Nginx 启动失败,请检查日志:${NC}"
    $SUDO systemctl status nginx-devapp
fi

检查 Nginx 服务是否正常运行,如果成功则输出成功消息,否则输出错误提示并显示服务状态。

该脚本提供了一个全面且自动化的解决方案,简化了从源码编译到部署 Nginx 的全过程。它不仅考虑到了基础的安装需求,还加入了对服务管理和故障排查的支持,非常适合那些希望在自定义环境中部署 Nginx 的用户。通过这种方式,可以更容易地适应不同的服务器环境和需求


四、更多操作

请看,Server 个人专栏

Server​https://blog.csdn.net/weixin_65793170/category_12128287.html