系列文章索引:
- 第一篇:《Nginx入门与安装详解:从零开始搭建高性能Web服务器》
- 第二篇:《Nginx基础配置详解:nginx.conf核心配置与虚拟主机实战》
- 第三篇:《Nginx代理配置详解:正向代理与反向代理完全指南》
- 第四篇:《Nginx性能优化与安全配置:打造高性能Web服务器》
- 第五篇:《Nginx负载均衡配置详解:多种负载均衡策略实战》
- 第六篇:《Nginx高可用方案实战:Keepalived+双机热备部署》
前言
Nginx(发音为"engine-x")是一款轻量级、高性能的Web服务器和反向代理服务器,由俄罗斯程序员Igor Sysoev于2004年开发。凭借其卓越的并发处理能力、低内存消耗和丰富的功能特性,Nginx已成为全球最受欢迎的Web服务器之一,被广泛应用于大型网站如Netflix、GitHub、淘宝等。
本文将详细介绍Nginx的入门知识和安装过程,帮助你从零开始搭建属于自己的高性能Web服务器。
一、Nginx核心特性与优势
1.1 核心特性
高性能架构
- 采用事件驱动、异步非阻塞处理模型
- 单进程可处理数万并发连接
- 内存占用极小,约2.5MB-10MB
丰富功能模块
- HTTP服务器、反向代理、负载均衡
- 邮件代理服务器(IMAP/POP3/SMTP)
- TCP/UDP代理(Stream模块)
- 动态模块加载机制
扩展性强
- 支持第三方模块开发
- 支持Lua脚本扩展(OpenResty)
- 支持自定义过滤器
1.2 与Apache对比
特性 | Nginx | Apache |
---|---|---|
架构模型 | 事件驱动 | 进程/线程驱动 |
并发性能 | 极高(10万+) | 一般(几千) |
内存占用 | 极小 | 较大 |
配置复杂度 | 简单 | 复杂 |
动态内容 | 通过FastCGI | 原生支持 |
模块系统 | 静态模块为主 | 动态模块丰富 |
1.3 适用场景
Web服务器
- 静态文件服务
- 动态内容代理(PHP、Python等)
- 前端资源服务器
反向代理
- 应用服务器负载均衡
- API网关
- 微服务统一入口
负载均衡
- 四层负载均衡(TCP/UDP)
- 七层负载均衡(HTTP)
- 会话保持
二、Nginx安装前准备
2.1 系统要求
硬件要求
- CPU:建议2核以上
- 内存:建议4GB以上
- 硬盘:建议20GB以上可用空间
系统支持
- CentOS 7/8/9
- Ubuntu 18.04/20.04/22.04
- Debian 9/10/11
- RHEL 7/8/9
2.2 依赖包安装
CentOS/RHEL系统
bash
# 安装基础开发工具
yum groupinstall "Development Tools" -y
# 安装Nginx依赖包
yum install -y \
gcc \
gcc-c++ \
make \
cmake \
autoconf \
automake \
pcre \
pcre-devel \
zlib \
zlib-devel \
openssl \
openssl-devel \
libxml2 \
libxml2-devel \
libxslt \
libxslt-devel \
gd \
gd-devel \
perl-ExtUtils-Embed \
GeoIP \
GeoIP-devel \
gperftools \
gperftools-devel
Ubuntu/Debian系统
bash
# 更新软件包列表
apt update
# 安装基础开发工具
apt install -y build-essential
# 安装Nginx依赖包
apt install -y \
gcc \
g++ \
make \
cmake \
autoconf \
automake \
libpcre3 \
libpcre3-dev \
zlib1g \
zlib1g-dev \
libssl-dev \
libxml2-dev \
libxslt1-dev \
libgd-dev \
libgeoip-dev \
google-perftools \
libgoogle-perftools-dev \
libperl-dev
2.3 创建运行用户
bash
# 创建nginx运行用户组
groupadd nginx
# 创建nginx运行用户
useradd -r -g nginx -s /sbin/nologin nginx
# 查看用户信息
id nginx
安全建议:
- 使用nologin shell禁止登录
- 使用-r选项创建系统用户
- 不创建home目录
三、Nginx安装方式详解
3.1 包管理器安装(快速入门)
CentOS/RHEL系统
bash
# 安装EPEL仓库
yum install epel-release -y
# 安装Nginx
yum install nginx -y
# 启动Nginx服务
systemctl start nginx
# 设置开机自启
systemctl enable nginx
# 查看Nginx状态
systemctl status nginx
# 查看Nginx版本
nginx -v
Ubuntu/Debian系统
bash
# 更新软件包列表
apt update
# 安装Nginx
apt install nginx -y
# 启动Nginx服务
systemctl start nginx
# 设置开机自启
systemctl enable nginx
# 查看Nginx状态
systemctl status nginx
# 查看Nginx版本
nginx -v
包管理器安装优缺点:
- ✅ 安装简单,一键完成
- ✅ 自动处理依赖关系
- ✅ 系统服务自动配置
- ❌ 版本较旧,功能受限
- ❌ 模块选择不灵活
- ❌ 性能优化空间有限
3.2 源码编译安装(推荐生产环境)
3.2.1 下载Nginx源码
bash
# 创建工作目录
mkdir -p /usr/local/src/nginx
cd /usr/local/src/nginx
# 下载Nginx稳定版源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz
# 下载PCRE源码(正则表达式支持)
wget https://ftp.pcre.org/pub/pcre/pcre-8.45.tar.gz
# 下载OpenSSL源码(SSL支持)
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
# 下载zlib源码(压缩支持)
wget http://zlib.net/zlib-1.2.13.tar.gz
# 解压所有源码
tar -zxvf nginx-1.24.0.tar.gz
tar -zxvf pcre-8.45.tar.gz
tar -zxvf openssl-1.1.1w.tar.gz
tar -zxvf zlib-1.2.13.tar.gz
3.2.2 生产环境编译配置
bash
# 进入Nginx源码目录
cd nginx-1.24.0
# 生产环境编译配置
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_v2_module \
--with-http_auth_request_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-pcre \
--with-pcre-jit \
--with-zlib \
--with-openssl \
--with-openssl-opt="enable-weak-ssl-ciphers" \
--with-debug \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
3.2.3 编译参数详解
核心路径参数:
bash
--prefix=/usr/local/nginx # Nginx安装根目录
--sbin-path=/usr/local/nginx/sbin/nginx # Nginx可执行文件路径
--conf-path=/usr/local/nginx/conf/nginx.conf # 主配置文件路径
--error-log-path=/var/log/nginx/error.log # 错误日志路径
--http-log-path=/var/log/nginx/access.log # 访问日志路径
--pid-path=/var/run/nginx.pid # PID文件路径
--lock-path=/var/run/nginx.lock # 锁文件路径
--user=nginx # 运行用户
--group=nginx # 运行用户组
HTTP模块参数:
bash
--with-http_ssl_module # SSL/TLS支持(HTTPS必需)
--with-http_stub_status_module # 状态监控模块
--with-http_realip_module # 获取真实客户端IP
--with-http_gzip_static_module # 静态文件压缩
--with-http_v2_module # HTTP/2支持
--with-http_auth_request_module # HTTP认证请求
--with-http_addition_module # 响应内容追加
--with-http_sub_module # 响应内容替换
--with-http_dav_module # WebDAV支持
--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 # 分片请求
邮件代理模块:
bash
--with-mail # 邮件代理模块
--with-mail_ssl_module # 邮件SSL支持
Stream模块(TCP/UDP代理):
bash
--with-stream # TCP/UDP代理模块
--with-stream_realip_module # 获取真实客户端IP
--with-stream_ssl_module # Stream SSL支持
--with-stream_ssl_preread_module # SSL预读
第三方库支持:
bash
--with-pcre # PCRE正则表达式支持
--with-pcre-jit # PCRE JIT编译
--with-zlib # zlib压缩支持
--with-openssl # OpenSSL支持
编译优化参数:
bash
--with-debug # 启用调试模式
--with-cc-opt # C编译器优化参数
--with-ld-opt # 链接器优化参数
3.2.4 可选编译参数(按需添加)
性能优化类:
bash
--with-file-aio # 异步文件I/O
--with-threads # 线程池支持
--with-libatomic # 原子操作库
功能扩展类:
bash
--with-http_xslt_module # XSLT转换
--with-http_image_filter_module # 图像处理
--with-http_geoip_module # GeoIP地理位置识别
--with-http_perl_module # Perl支持
--with-google_perftools_module # Google性能工具
安全增强类:
bash
--with-openssl-opt="enable-weak-ssl-ciphers" # OpenSSL优化选项
--with-md5-asm # MD5汇编优化
--with-sha1-asm # SHA1汇编优化
3.2.5 编译安装
bash
# 编译(使用多核加速编译)
make -j$(nproc)
# 安装
make install
# 创建必要的目录
mkdir -p /var/log/nginx
mkdir -p /var/cache/nginx
mkdir -p /usr/local/nginx/conf/conf.d
# 设置目录权限
chown -R nginx:nginx /var/log/nginx
chown -R nginx:nginx /var/cache/nginx
chown -R nginx:nginx /usr/local/nginx
四、Nginx安装后配置
4.1 创建系统服务
bash
# 创建systemd服务文件
cat > /usr/lib/systemd/system/nginx.service << 'EOF'
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
# 重新加载systemd配置
systemctl daemon-reload
# 启动Nginx服务
systemctl start nginx
# 设置开机自启
systemctl enable nginx
4.2 配置环境变量
bash
# 添加Nginx到PATH环境变量
echo 'export PATH=/usr/local/nginx/sbin:$PATH' >> /etc/profile
# 立即生效
source /etc/profile
# 验证Nginx命令
nginx -v
4.3 防火墙配置
bash
# 开放HTTP端口
firewall-cmd --permanent --add-service=http
# 开放HTTPS端口
firewall-cmd --permanent --add-service=https
# 重新加载防火墙配置
firewall-cmd --reload
# 查看开放的端口
firewall-cmd --list-all
4.4 验证安装
bash
# 检查Nginx配置文件语法
nginx -t
# 查看Nginx编译参数
nginx -V
# 查看Nginx进程
ps aux | grep nginx
# 查看Nginx监听端口
netstat -tlnp | grep nginx
# 测试Nginx服务
curl -I http://localhost
五、常见问题与解决方案
5.1 编译错误处理
PCRE库未找到
bash
# 错误信息:./configure: error: the HTTP rewrite module requires the PCRE library.
# 解决方案:安装PCRE开发包
yum install pcre-devel -y # CentOS/RHEL
apt install libpcre3-dev -y # Ubuntu/Debian
OpenSSL库未找到
bash
# 错误信息:./configure: error: SSL modules require the OpenSSL library.
# 解决方案:安装OpenSSL开发包
yum install openssl-devel -y # CentOS/RHEL
apt install libssl-dev -y # Ubuntu/Debian
zlib库未找到
bash
# 错误信息:./configure: error: the HTTP gzip module requires the zlib library.
# 解决方案:安装zlib开发包
yum install zlib-devel -y # CentOS/RHEL
apt install zlib1g-dev -y # Ubuntu/Debian
5.2 运行时错误处理
端口被占用
bash
# 错误信息:nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
# 解决方案:停止占用端口的进程或修改Nginx监听端口
netstat -tlnp | grep :80
kill -9 <PID>
权限不足
bash
# 错误信息:nginx: [emerg] open() "/var/log/nginx/error.log" failed (13: Permission denied)
# 解决方案:设置正确的目录权限
chown -R nginx:nginx /var/log/nginx
chmod 755 /var/log/nginx
配置文件语法错误
bash
# 错误信息:nginx: [emerg] unknown directive "server_name" in /usr/local/nginx/conf/nginx.conf:25
# 解决方案:检查配置文件语法
nginx -t
# 根据错误提示修改配置文件
下一步学习建议:
- 深入学习Nginx配置文件结构和语法
- 掌握Nginx基础配置和虚拟主机设置
- 了解Nginx性能优化和安全配置
- 学习Nginx反向代理和负载均衡配置
Nginx作为现代Web架构的重要组成部分,掌握其安装和基本配置是每个运维和开发人员的必备技能。希望本文能够帮助你顺利入门Nginx,为后续的深入学习打下坚实基础。