liunx配置 Nginx 从粘贴 到 运行

nginx arm 服务器 安装

1、 下载

下载地址

Mainline version # 抢先版
Stable version # 稳定版
Legacy versions # 历史版本

日志 1Liunx 版本win版本
CHANGES-1.28nginx-1.28.0 pgpnginx/Windows-1.28.0 pgp

2、 安装编译环境

sudo apt update
sudo apt install -y build-essential libpcre3-dev zlib1g-dev libssl-dev

#或
yum makecache
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel

3、 新建一个文件夹 nginx cd进入目录copy paste并解压

mkdir /usr/local/nginx           # 新建文件夹
cd /usr/local/nginx/              # 进入文件夹
# 将源码压缩包 复制到此,并解压缩
tar -zxvf nginx-1.24.0.tar.gz  # 解压源码包
# 再新建一个用于装 编译后的文件的文件夹
mkdir nginx
# 此时 /root/nginx/ 文件下下有   源码压缩包nginx-1.24.0.tar.gz  源码解压后的包nginx-1.24.0  空的文件夹nginx   
cd nginx-1.24.0                # 进入源码目录

4、配置编译选项

指定安装路径为 /usr/local/nginx/nginx,并启用常用模块(如 HTTPS 支持):

# prefix 指定的路径为 刚才新建的空的文件夹
./configure --prefix=/usr/local/nginx/nginx \
            --with-http_ssl_module \
            --with-http_v2_module \
            --with-http_realip_module

关键参数说明:

  • –prefix=/root/nginx/nginx:指定安装目录。
  • –with-http_ssl_module:启用 HTTPS 支持。
  • –with-http_v2_module:启用 HTTP/2 支持。

4.1 安装完成之后会出现这些东西,这只是 configure 脚本给出的“安装蓝图”——它告诉你编译完成后,nginx 的所有文件将被放到哪里。

Configuration summary

  + using system PCRE2 library
  + using system OpenSSL library
  + using system zlib library

  nginx path prefix: "/usr/local/nginx/nginx"
  nginx binary file: "/usr/local/nginx/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/nginx/conf"
  nginx configuration file: "/usr/local/nginx/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

5、 编译并安装

cd /usr/local/nginx/nginx-1.24.0 # 进入你的源码目录
make          # 编译源码
make install  # 安装到指定目录

6、验证安装

/root/nginx/nginx/sbin/nginx -v  # 查看版本
# 出现这个就对 nginx version: nginx/1.24.0

/root/nginx/nginx/sbin/nginx -t  # 测试配置文件
# nginx: the configuration file /usr/local/nginx/nginx/conf/nginx.conf syntax is ok
# nginx: configuration file /usr/local/nginx/nginx/conf/nginx.conf test is successful

7、 添加到系统环境变量

# 先查看环境变量内容 
echo $PATH  #记住结果
# 添加到环境变量里 这里的路径为你的nginx 安装的sbin 路径
echo 'export PATH=$PATH:/usr/local/nginx/nginx/sbin/' >> ~/.bashrc
source ~/.bashrc

8、检查是否操作成功

echo $PATH 
# 对比之下之前执行的命令,如果多出了 //usr/local/nginx/nginx/sbin/  即可

which nginx 
# 出现路径地址即可

nginx -v 
# 出现版本号即可

9、定义启动命令

vi /usr/lib/systemd/system/nginx.service

将下面内容复制到 nginx.service中,其中/usr/local/nginx/nginx/ 这段是nginx的安装目录,可根据4.1 出现的安装蓝图 对应填写

[Unit]
Description=The Nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

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

[Install]
WantedBy=multi-user.target

10、重新加载一下系统服务

systemctl daemon-reload

11、 现在可以直接运行以下命令使用nginx

# 操作命令

systemctl start nginx    # 启动 Nginx 服务
systemctl restart nginx  # 重启 Nginx 服务
systemctl reload nginx   # 重新加载配置(不重启服务)
systemctl stop nginx     # 停止 Nginx	服务 
systemctl status nginx   # 查看 Nginx 服务状态

systemctl enable nginx   # 设置开机 自启
systemctl disable nginx  # 禁止开机 自启

# 打开日志文件
tail -n  /usr/local/nginx/nginx/logs/error.log 
tail -n  /usr/local/nginx/nginx/logs/success.log	

12、配置nginx

# 一个基础的 Nginx 配置,根据需求改成自己项目的。

# 全局配置段
user  nginx;                     # 运行nginx的用户
worker_processes  auto;          # 自动根据CPU核心数设置工作进程数
error_log  /var/log/nginx/error.log warn;  # 错误日志路径和级别
pid        /var/run/nginx.pid;   # 进程ID文件位置

# 事件模块配置
events {
    worker_connections  1024;     # 每个工作进程的最大连接数
    use epoll;                   # 使用epoll高效模式(Linux)
    multi_accept on;             # 同时接受多个新连接
}

# HTTP模块配置
http {
    # 基础设置
    include       /etc/nginx/mime.types;  # MIME类型映射文件
    default_type  application/octet-stream; # 默认MIME类型
    
    # 日志格式
    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  /var/log/nginx/access.log  main; # 访问日志路径和格式
    
    # 性能调优
    sendfile        on;          # 启用高效文件传输模式
    tcp_nopush     on;          # 仅在sendfile为on时有效,优化数据包发送
    tcp_nodelay    on;          # 禁用Nagle算法,提高实时性
    keepalive_timeout  65;      # 保持连接的超时时间
    types_hash_max_size 2048;   # types哈希表大小
    
    # Gzip压缩配置
    gzip  on;                   # 启用gzip压缩
    gzip_min_length 1k;         # 最小压缩文件大小
    gzip_comp_level 2;          # 压缩级别(1-9)
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
    # 包含其他配置文件
    include /etc/nginx/conf.d/*.conf;  # 包含其他配置文件
    
    # 示例server配置(也可以放在单独的conf.d文件中)
    server {
        listen       80;        # 监听端口
        server_name  localhost; # 域名
        
        # 静态文件服务配置
        # 如果webpack/vite中配置了 publicPath , location /`这里的路径地址要与 publicPath的值相同`
        location / {
            alias   /usr/share/nginx/html; # 网站根目录
            index  index.html index.htm;  # 默认索引文件
            try_files $uri $uri/ /index.html; # 尝试查找文件规则
        }
		# 后台接口代理
		location /api/ {
		    proxy_pass http://localhost/api/;
		    proxy_set_header Host $host;
		    proxy_set_header X-Real-IP $remote_addr;
		    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		    
		    # 超时设置
		    proxy_connect_timeout 60s;
		    proxy_read_timeout 60s;
		}
        
        # 错误页面配置
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
        
        # 禁止访问隐藏文件
        location ~ /\. {
            deny all;
        }
    }
    
    # 可以添加更多server块来配置虚拟主机
}

<think> 我们正在处理用户关于将Nginx从1.24.0升级到1.28.0的请求。根据提供的引用,我们可以总结出升级Nginx的一般步骤,特别是编译安装方式下的平滑升级。由于引用中提到了使用信号进行升级和编译安装的方式,我们将结合这些信息给出步骤。 注意:用户当前版本是1.24.0,目标版本是1.28.0。我们假设用户之前是通过编译安装的方式安装的Nginx(因为引用[3]提到了编译安装的步骤)。 平滑升级的基本原理: 1. 备份旧版本的Nginx二进制文件。 2. 编译新版本的Nginx,注意配置参数要与旧版本保持一致(可以通过旧版本的nginx -V命令获取配置参数)。 3. 将新编译的二进制文件替换旧版本二进制文件(此时先不要覆盖,而是先复制到另一个位置)。 4. 向旧版本的Nginx主进程发送USR2信号,使其启动新版本的master进程(此时新旧进程并存)。 5. 向旧版本的master进程发送WINCH信号,使其旧的worker进程优雅退出(这时新版本的worker进程已经在工作)。 6. 检查新版本是否正常工作,如果正常,则向旧版本master进程发送QUIT信号,关闭旧master;如果新版本有问题,则可以回退(向旧master发送HUP信号重新加载旧配置并重启旧worker,然后向新master发送QUIT信号关闭新进程)。 具体步骤: 步骤1:获取当前Nginx配置参数 在升级之前,我们需要知道当前Nginx编译时的配置参数,以便新版本使用相同的配置。可以通过以下命令查看: ``` nginx -V ``` 将输出中的配置参数保存下来(注意,输出可能包含在引号中,复制时去掉引号),在编译新版本时使用。 步骤2:下载新版本的Nginx源码包 前往Nginx官网下载1.28.0版本的源码包,例如: ``` wget http://nginx.org/download/nginx-1.28.0.tar.gz ``` 解压: ``` tar xvfz nginx-1.28.0.tar.gz cd nginx-1.28.0 ``` 步骤3:编译新版本 使用步骤1中获取的配置参数进行配置(注意:如果之前有指定依赖库的路径,如pcre、zlib等,需要确保这些依赖库仍然可用,或者重新指定)。例如: ``` ./configure --user=www --group=www --prefix=/usr/local/nginx ... (其他参数) ``` 然后编译: ``` make ``` 注意:这里不要执行`make install`,因为这会覆盖原有的安装。 步骤4:备份旧版本二进制文件 备份当前Nginx的二进制文件(通常在/usr/local/nginx/sbin/nginx): ``` cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old ``` 步骤5:替换二进制文件 将新编译的二进制文件(位于objs目录下)复制到旧版本二进制文件的位置: ``` cp objs/nginx /usr/local/nginx/sbin/nginx ``` 步骤6:向旧版本主进程发送USR2信号 首先获取旧版本master进程的PID,通常位于/usr/local/nginx/logs/nginx.pid(如果配置了pid文件的话),或者使用`ps -ef | grep nginx`找到master进程的PID。 然后发送信号: ``` kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` ``` 此时,会启动一个新的master进程(新版本的nginx),并且新旧worker进程会同时处理请求。 步骤7:向旧版本master进程发送WINCH信号 发送信号让旧的worker进程优雅退出: ``` kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin` ``` 注意:此时旧master进程还在,但是不再有worker进程(所以不会处理新连接),而新master进程的worker进程在处理请求。 步骤8:测试新版本 使用浏览器或者命令(如curl)测试新版本是否正常工作。 步骤9:关闭旧master进程 如果新版本工作正常,则可以关闭旧master进程: ``` kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin` ``` 这样,升级完成。 如果升级过程中出现问题,需要回退: 1. 恢复旧版本的二进制文件(将备份的nginx.old重命名为nginx,并覆盖新版本) 2. 向旧master进程发送HUP信号,重新加载配置并启动worker进程: ``` kill -HUP `cat /usr/local/nginx/logs/nginx.pid.oldbin` ``` 3. 向新master进程发送QUIT信号,关闭新进程: ``` kill -QUIT `cat /usr/local/nginx/logs/nginx.pid` ``` 4. 然后重新启动旧版本的worker进程后,再停止新master(如果新master还在运行的话)。 注意:如果使用systemctl管理Nginx服务(如引用[2]提到),在升级过程中不要使用systemctl restart nginx,因为这可能会导致升级失败。建议在升级完成后,检查systemctl的启动文件(/usr/lib/systemd/system/nginx.service)是否指向正确的二进制文件,并可能需要重新加载systemd配置。 另外,如果之前是通过yum安装的(如引用[4]提到),则升级方法不同。但用户当前是1.24.0,而引用[4]是设置yum源的方法,但用户没有说明安装方式。根据用户的问题,我们假设是编译安装。如果用户之前是yum安装,那么升级可以简单地使用yum update nginx,但是版本可能受限于仓库的版本。由于用户要求升级到1.28.0,而官方仓库可能已经提供,但需要确认仓库中是否有1.28.0版本。不过,根据引用[4]的配置,仓库分为稳定版(stable)和主线版(mainline),1.28.0可能是主线版,因此需要启用mainline仓库。 但是,用户的问题中没有明确安装方式,所以我们需要分情况。但用户要求从1.24.0升级到1.28.0,且引用中提到了编译安装的升级,所以我们主要提供编译安装的升级方法。 如果用户是通过yum安装的,那么升级步骤为: 1. 检查仓库中是否有1.28.0版本。在/etc/yum.repos.d/nginx.repo文件中,将[nginx-mainline]的enabled改为1(启用主线仓库)。 2. 执行更新: ``` yum update nginx ``` 3. 重启nginx服务: ``` systemctl restart nginx ``` 由于用户没有明确安装方式,我们提供两种方案的步骤,但根据引用[1][2][3]的内容,重点在编译安装的平滑升级,所以我们以编译安装的平滑升级为主要步骤。 因此,我们给用户的回答应该包括两种情况,但优先考虑编译安装的情况(因为用户当前版本1.24.0,而引用[3]也是编译安装升级到1.24.0,所以推测用户可能是编译安装)。 最后,建议用户在升级前备份重要数据和配置文件。 根据以上分析,我们为用户提供以下步骤: </think>在Linux系统中将Nginx从1.24.0升级到1.28.0版本,推荐通过编译方式进行平滑升级(无需停机)。以下是详细步骤: ### 📦 1. 获取当前配置参数 ```bash nginx -V 2>&1 | grep configure ``` 记录输出结果(如`--prefix=/usr/local/nginx --with-http_ssl_module`等),这是旧版编译参数,新版本需保持一致[^3]。 ### ⬇️ 2. 下载并解压新版源码 ```bash wget http://nginx.org/download/nginx-1.28.0.tar.gz tar -zxvf nginx-1.28.0.tar.gz cd nginx-1.28.0 ``` ### 🔧 3. 编译新版(使用旧版配置) ```bash # 粘贴步骤1记录的configure参数 ./configure --prefix=/usr/local/nginx --with-http_ssl_module ... make # 注意不要make install ``` ### 🔄 4. 备份并替换二进制文件 ```bash # 备份旧版 mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old # 复制新版 cp objs/nginx /usr/local/nginx/sbin/nginx ``` ### ⚙️ 5. 平滑升级操作 ```bash # 获取主进程ID ps -ef | grep nginx | grep master # 发送USR2信号启动新版 kill -USR2 <旧master_PID> # 发送WINCH信号关闭旧worker kill -WINCH <旧master_PID> # 验证新版运行后关闭旧master kill -QUIT <旧master_PID> ``` ### ✅ 6. 验证升级 ```bash nginx -v # 应显示 nginx/1.28.0 curl -I http://localhost # 检查服务响应 ``` ### ⚠️ 注意事项 1. **配置一致性**:新版的`./configure`参数必须与旧版完全一致[^3] 2. **依赖更新**:若使用第三方模块(如PCRE、OpenSSL),需同步升级依赖库 3. **回滚准备**:保留旧版二进制文件(`nginx.old`),异常时可快速恢复 4. **服务管理**:若使用systemctl,需检查`/usr/lib/systemd/system/nginx.service`指向新路径[^2] > 升级过程中Nginx会保持服务状态,通过信号切换实现零停机[^1]。测试建议先用`nginx -t`验证配置正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值