从源代码构建 Nginx 可以让您自定义编译选项,启用或禁用特定模块,以满足您的具体需求。
# 安装编译工具
sudo apt install build-essential
# 安装依赖库
sudo apt install libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
# 安装 Xcode 命令行工具
xcode-select --install
# 使用 Homebrew 安装依赖
brew install pcre openssl
# 创建源代码目录
mkdir -p /usr/local/src
cd /usr/local/src
# 下载最新稳定版
curl -O http://nginx.org/download/nginx-1.24.0.tar.gz
# 或下载主线版
curl -O http://nginx.org/download/nginx-1.25.0.tar.gz
# 解压
tar -xzvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
使用 ./configure 脚本配置编译选项:
# 基本配置
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--lock-path=/usr/local/nginx/logs/nginx.lock \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-file-aio \
--with-http_secure_link_module
| 选项 | 说明 | 默认值 |
|---|---|---|
--prefix= | 指定安装目录 | /usr/local/nginx |
--sbin-path= | Nginx 可执行文件路径 | <prefix>/sbin/nginx |
--conf-path= | 配置文件路径 | <prefix>/conf/nginx.conf |
--error-log-path= | 错误日志路径 | <prefix>/logs/error.log |
--http-log-path= | 访问日志路径 | <prefix>/logs/access.log |
--pid-path= | PID 文件路径 | <prefix>/logs/nginx.pid |
--lock-path= | 锁文件路径 | <prefix>/logs/nginx.lock |
# HTTP 核心模块
--with-http_ssl_module # 启用 SSL/TLS 支持
--with-http_v2_module # 启用 HTTP/2 支持
--with-http_v3_module # 启用 HTTP/3 支持
--with-http_realip_module # 启用真实 IP 模块
--with-http_gzip_static_module # 启用静态 gzip 压缩
--with-http_gunzip_module # 启用 gzip 解压缩
--with-http_stub_status_module # 启用状态页面
--with-http_sub_module # 启用字符串替换
--with-http_addition_module # 启用添加文本
--with-http_flv_module # 启用 FLV 流媒体
--with-http_mp4_module # 启用 MP4 流媒体
--with-http_gunzip_module # 启用解压缩
--with-http_random_index_module # 启用随机首页
--with-http_secure_link_module # 启用安全链接
--with-http_degradation_module # 启用降级
--with-http_slice_module # 启用切片
--with-http_perl_module # 启用 Perl 支持
# 邮件代理模块
--with-mail # 启用邮件代理
--with-mail_ssl_module # 启用邮件 SSL
# TCP/UDP 代理模块
--with-stream # 启用 TCP/UDP 代理
--with-stream_ssl_module # 启用 TCP/UDP SSL
--with-stream_realip_module # 启用真实 IP
--with-stream_geoip_module # 启用 GeoIP
# 其他模块
--with-file-aio # 启用文件异步 I/O
--with-threads # 启用线程池
--with-pcre # 使用 PCRE 库
--with-pcre-jit # 启用 PCRE JIT
--with-zlib # 使用 zlib 库
--with-openssl # 使用 OpenSSL 库
--with-debug # 启用调试日志
--without-http_charset_module # 禁用字符集模块
--without-http_gzip_module # 禁用 gzip 模块
--without-http_ssi_module # 禁用 SSI 模块
--without-http_userid_module # 禁用 userid 模块
--without-http_access_module # 禁用访问控制模块
--without-http_auth_basic_module # 禁用基本认证模块
--without-http_autoindex_module # 禁用自动索引模块
--without-http_geo_module # 禁用 GeoIP 模块
--without-http_map_module # 禁用 map 模块
--without-http_split_clients_module # 禁用 split_clients 模块
--without-http_referer_module # 禁用 referer 模块
--without-http_rewrite_module # 禁用 rewrite 模块
--without-http_proxy_module # 禁用 proxy 模块
--without-http_fastcgi_module # 禁用 FastCGI 模块
--without-http_uwsgi_module # 禁用 uWSGI 模块
--without-http_scgi_module # 禁用 SCGI 模块
--without-http_memcached_module # 禁用 Memcached 模块
--without-http_limit_conn_module # 禁用连接限制模块
--without-http_limit_req_module # 禁用请求限制模块
--without-http_empty_gif_module # 禁用空 GIF 模块
--without-http_browser_module # 禁用浏览器模块
--without-http_upstream_hash_module # 禁用 upstream hash 模块
--without-http_upstream_ip_hash_module # 禁用 upstream ip_hash 模块
--without-http_upstream_least_conn_module # 禁用 upstream least_conn 模块
--without-http_upstream_keepalive_module # 禁用 upstream keepalive 模块
--without-http_upstream_zone_module # 禁用 upstream zone 模块
--with-cc-opt=OPTIONS # 设置额外的 C 编译器选项
--with-ld-opt=OPTIONS # 设置额外的链接器选项
--with-cpu-opt=CPU # 为特定 CPU 优化
CPU 选项:
pentium, pentiumpro, pentium3, pentium4athlon, opteron, athlon64, athlon-fxsparc32, sparc64, ppc64# 示例:为 CPU 优化
./configure --with-cpu-opt=pentium4
# 示例:设置编译器选项
./configure --with-cc-opt="-I /usr/local/include" \
--with-ld-opt="-L /usr/local/lib"
# 编译
make
# 安装
sudo make install
# 创建 nginx 命令的符号链接
sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
# 创建配置目录的符号链接(可选)
sudo ln -s /usr/local/nginx/conf /usr/local/etc/nginx
创建服务文件 /etc/systemd/system/nginx.service:
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
# 重新加载 systemd
sudo systemctl daemon-reload
# 启动 Nginx
sudo systemctl start nginx
# 设置开机自启
sudo systemctl enable nginx
# 查看状态
sudo systemctl status nginx
# 检查版本
nginx -v
# 测试配置
nginx -t
# 查看编译参数
nginx -V
# 指定 OpenSSL 路径
./configure --with-openssl=/usr/local/opt/openssl
# 指定 PCRE 路径
./configure --with-pcre=/usr/local/opt/pcre
# 清理编译文件
make clean
# 重新配置和编译
./configure ...
make
# 使用 sudo 安装
sudo make install
# 修改权限
sudo chown -R $USER:$USER /usr/local/nginx
# 下载新版本
cd /usr/local/src
curl -O http://nginx.org/download/nginx-1.24.1.tar.gz
tar -xzvf nginx-1.24.1.tar.gz
cd nginx-1.24.1
# 配置(使用与之前相同的选项)
./configure ... # 使用之前的配置选项
# 编译
make
# 备份旧版本
sudo cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
# 替换新版本
sudo cp objs/nginx /usr/local/nginx/sbin/nginx
# 测试新版本
sudo /usr/local/nginx/sbin/nginx -t
# 升级(平滑升级)
sudo make upgrade
# 查看所有可用模块
./configure --help
# 查看特定模块信息
./configure --help | grep ssl