🌱在Linux系统下通过源码编译方式安装nginx是一种灵活且可控的方式,适用于需要自定义模块或特定版本的场景。
01在线安装依赖环境工具
源码编译需要基础编译工具及部分依赖库(如正则、压缩、https支持等)。在linux系统下安装任何新软件包之前,更新你的软件包列表是一个好习惯。
安装gcc
安装nginx需要先将下载的源码进行编译,编译依赖gcc环境。
-
centos/rhel系
sudo dnf update && sudo dnf install -y gcc gcc-c++ //8+版本
sudo yum update && sudo yum install -y gcc gcc-c++
亦可安装开发工具集合:
sudo yum groupinstall -y "Development Tools"
-
ubuntu/debian
sudo apt update && sudo apt install -y build-essential //包含了GCC编译器以及其他一些开发工具,例如make和g++
-
fedora
sudo dnf update && sudo dnf install -y gcc gcc-c++ //22+版本
sudo yum update && sudo yum install -y gcc gcc-c++
-
arch linux
sudo pacman -Suy && sudo pacman -S base-devel //包含了GCC编译器以及其他一些开发工具,例如make和g++
-
openSUSE
sudo zypper refresh && sudo zypper install --type pattern devel_basis
-
验证是否成功安装
gcc --version
安装pcre pcre-devel
nginx的rewrite模块和http核心模块会使用到pcre正则表达式语法,这里需要安装两个安装包pcre和pcre-devel,第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码。
-
centos/rhel系
sudo yum install -y epel-release && sudo yum install -y pcre pcre-devel //7版本
-
ubuntu/debian
sudo apt update &&sudo apt install -y libpcre3 libpcre3-dev
-
fedora
sudo dnf update && sudo dnf install -y pcre pcre-devel
-
arch linux
sudo pacman -Suy && sudo pacman -S pcre pcre-devel
-
openSUSE
sudo zypper refresh && sudo zypper install pcre pcre-devel
-
验证是否成功安装
ls /usr/include | grep pcre.h
安装zlib
zlib库提供了开发人员的压缩算法,在nginx的各种模块中需要使用gzip压缩。
-
centos/rhel系
sudo yum install -y epel-release && sudo yum install -y zlib zlib-devel
-
ubuntu/debian
sudo apt update && sudo apt-get install -y zlib1g zlib1g-dev
-
fedora
sudo dnf update && sudo dnf install -y zlib-devel
-
arch linux
sudo pacman -Suy && sudo pacman -S zlib-devel
-
openSUSE
sudo zypper refresh && sudo zypper install zlib1 zlib-devel
-
验证是否成功安装
ls /usr/include/zlib.h
安装openSSL
nginx不仅支持http协议,还支持https,如果要使用https协议,需要安装 openSSL库
-
centos/rhel系
sudo yum install -y epel-release && sudo yum install -y openssl openssl-devel
-
ubuntu/debian
sudo apt update && sudo apt-get install -y openssl libssl-dev
-
fedora
sudo dnf update && sudo dnf install -y openssl openssl-devel
-
arch linux
sudo pacman -Suy && sudo pacman -S openssl
-
openSUSE
sudo zypper refresh && sudo zypper install openssl
-
验证是否成功安装
openssl version
ls /usr/include/openssl/
02nginx源码编译安装
iptables是Linux内核netfilter框架的前端工具,直接操作防火墙规则,适合需要精细控制的场景(如nat、复杂流量过滤)。注意:iptables 规则重启后会丢失,需手动持久化。
下载nginx源码包
从nginx官网获取最新稳定版,https://nginx.org/en/download.html
下载源码包(替换为最新版本号)
wget https://nginx.org/download/nginx-1.26.3.tar.gz
解压
tar -zxvf nginx-1.26.3.tar.gz
cd nginx-1.26.3
创建nginx组与nginx用户
groupadd nginx
useradd -g nginx -s /sbin/nologin nginx # 无登录权限的安全用户
配置编译选项
执行 ./configure 脚本配置编译参数(根据自己需求调整),推荐示例配置:
./configure \
--prefix=/chris/xrx/nginx-1.26.3 \ # 安装路径
--sbin-path=/chris/xrx/nginx-1.26.3/sbin/nginx \ # 可执行文件的安装路径
--conf-path=/chris/xrx/nginx-1.26.3/conf/nginx.conf \ # 主配置文件路径
--error-log-path=/chris/xrx/nginx-1.26.3/logs/error.log \ # 错误日志路径
--http-log-path=/chris/xrx/nginx-1.26.3/logs/access.log \ # 访问日志路径
--pid-path=/chris/xrx/nginx-1.26.3/logs/nginx.pid \ # pid文件路径
--lock-path=/chris/xrx/nginx-1.26.3/logs/nginx.lock \ # 锁文件路径
--http-client-body-temp-path=/chris/xrx/nginx-1.26.3/temp/client_temp \ # 客户端临时文件
--http-proxy-temp-path=/chris/xrx/nginx-1.26.3/temp/proxy_temp \ # 代理临时文件
--http-fastcgi-temp-path=/chris/xrx/nginx-1.26.3/temp/fastcgi_temp \ # fastcgi临时文件
--http-uwsgi-temp-path=/chris/xrx/nginx-1.26.3/temp/uwsgi_temp \ # uwsgi临时文件
--http-scgi-temp-path=/chris/xrx/nginx-1.26.3/temp/scgi_temp \ # scgi临时文件
--with-http_ssl_module \ # https支持
--with-http_v3_module \ # http/3支持
--with-http_gzip_static_module \ # 静态gzip
--with-http_realip_module \ # 真实IP
--with-http_stub_status_module \ # 状态统计
--user=nginx \ # 运行用户(需提前创建)
--group=nginx \ # 运行组(需提前创建)
编译安装
make -j2 && make install # -j 参数根据cpu核心数优化速度,如4核用 -j4
权限授予
chown -R nginx:nginx /chris/xrx/nginx-1.26.3/sbin/nginx
03初始化配置
可将下列命令以文本编辑工具存为.sh脚本,与nginx安装目录同层,便于启动、停止与重启nginx,亦可创建systemd服务文件管理nginx。
启动nginx
cd nginx-1.26.3
chmod +x ./sbin/*
./sbin/nginx -p ./
停止nginx
cd nginx-1.26.3
chmod +x ./sbin/*
./sbin/nginx -p ./ -s stop
重启nginx
cd nginx-1.26.3
chmod +x ./sbin/*
./sbin/nginx -s reload ./
配置系统服务
sudo vi /etc/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
PIDFile=/chris/xrx/nginx-1.26.3/logs/nginx.pid
ExecStartPre=/chris/xrx/nginx-1.26.3/sbin/nginx -t
ExecStart=/chris/xrx/nginx-1.26.3/sbin/nginx
ExecReload=/chris/xrx/nginx-1.26.3/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT \$MAINPID
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重新加载systemd 配置
sudo systemctl daemon-reload
启动nginx
sudo systemctl start nginx
设置开机自启
sudo systemctl enable nginx
查看 Nginx 主进程
ps -ef | grep nginx
浙公网安备 33010602011771号