1. 环境准备与依赖安装
在开始Nginx的安装之前,我们需要确保系统具备所有必要的编译环境和依赖库。对于基于RPM的Linux发行版(如CentOS、RHEL等),可以使用yum包管理器来安装这些依赖。
1.1 基础编译环境配置
Nginx作为高性能的Web服务器,其编译安装需要以下核心组件:
- gcc:GNU编译器集合,用于将源代码编译为可执行程序
- pcre-devel:Perl兼容正则表达式库,Nginx的rewrite模块依赖于此
- zlib/zlib-devel:压缩库,用于支持gzip压缩功能
- openssl/openssl-devel:安全套接字层工具包,启用HTTPS必备
执行以下命令一次性安装所有依赖:
bash复制yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
注意:在生产环境中,建议先执行
yum update更新软件包列表,确保安装的是最新版本的依赖库。如果系统启用了SELinux,还需要考虑适当配置安全策略或临时将其设置为permissive模式。
1.2 可选工具安装
为了方便后续操作,建议安装以下实用工具:
bash复制yum install -y wget vim lsof
- wget:用于直接从终端下载文件
- vim:更强大的文本编辑器
- lsof:列出打开文件的工具,便于端口冲突排查
2. Nginx源码获取与解压
2.1 版本选择策略
Nginx官网提供了多个版本分支:
- Mainline version:主线开发版,包含最新功能但可能不够稳定
- Stable version:稳定版,生产环境推荐选择
- Legacy version:历史版本,特殊兼容需求时使用
建议访问Nginx官方下载页查看最新的稳定版本。本文以nginx-1.19.9为例,但实际操作时应替换为最新的稳定版本号。
2.2 下载与解压流程
推荐在/usr/local目录下创建专用目录:
bash复制mkdir -p /usr/local/nginx
cd /usr/local/nginx
有两种获取源码的方式:
方法一:本地下载后上传
- 从官网下载.tar.gz包到本地
- 使用SFTP工具(如WinSCP)或SCP命令上传到服务器:
bash复制scp nginx-1.19.9.tar.gz user@server_ip:/usr/local/nginx/
方法二:服务器直接下载
bash复制wget http://nginx.org/download/nginx-1.19.9.tar.gz
解压源码包:
bash复制tar -xvf nginx-1.19.9.tar.gz
经验提示:使用
tar xvzf可以显示更详细的解压过程,其中z参数自动解压gzip压缩包。解压后建议保留原始压缩包作为备份。
3. 编译安装与配置
3.1 编译参数解析
进入解压后的目录开始编译:
bash复制cd nginx-1.19.9
./configure --with-http_stub_status_module --with-http_ssl_module
关键编译选项说明:
| 参数 | 作用 | 生产环境重要性 |
|---|---|---|
| --with-http_stub_status_module | 启用状态监控页面 | ★★★★ |
| --with-http_ssl_module | 启用HTTPS支持 | ★★★★★ |
| --with-http_gzip_static_module | 预压缩文件支持 | ★★★ |
| --with-http_realip_module | 获取真实客户端IP | ★★★★ |
| --with-threads | 线程池支持 | ★★★ |
建议添加的额外参数:
bash复制./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-threads \
--with-file-aio
3.2 编译与安装
执行编译:
bash复制make
编译完成后安装:
bash复制make install
安装完成后,Nginx将被部署到/usr/local/nginx目录(由--prefix指定),目录结构如下:
code复制/usr/local/nginx/
├── sbin/ # 主程序目录
│ └── nginx # 可执行文件
├── conf/ # 配置文件目录
│ ├── nginx.conf # 主配置文件
│ └── ... # 其他配置文件
├── logs/ # 日志目录
└── html/ # 默认网站根目录
3.3 基础配置调整
编辑主配置文件:
bash复制vim /usr/local/nginx/conf/nginx.conf
推荐的基础优化配置:
nginx复制user nginx;
worker_processes auto; # 自动匹配CPU核心数
events {
worker_connections 1024; # 每个worker的最大连接数
use epoll; # 使用epoll高效I/O模型
multi_accept on; # 同时接受多个连接
}
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; # 优化数据包发送
tcp_nodelay on; # 禁用Nagle算法
keepalive_timeout 65; # 连接保持时间
# 启用gzip压缩
gzip on;
gzip_min_length 1k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;
include /usr/local/nginx/conf/conf.d/*.conf; # 包含其他配置文件
}
4. Nginx服务管理
4.1 手动启动与测试
启动Nginx:
bash复制/usr/local/nginx/sbin/nginx
检查进程:
bash复制ps -ef | grep nginx
验证服务:
bash复制curl -I 127.0.0.1
应返回类似以下响应:
code复制HTTP/1.1 200 OK
Server: nginx/1.19.9
Date: ...
Content-Type: text/html
4.2 Systemd服务集成
创建systemd单元文件:
bash复制vim /usr/lib/systemd/system/nginx.service
写入以下内容:
ini复制[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
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
PrivateTmp=true
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
重新加载systemd配置:
bash复制systemctl daemon-reload
4.3 常用管理命令
| 命令 | 作用 | 使用场景 |
|---|---|---|
systemctl start nginx |
启动服务 | 初次启动 |
systemctl stop nginx |
停止服务 | 维护期间 |
systemctl restart nginx |
重启服务 | 配置变更后 |
systemctl reload nginx |
重载配置 | 不中断服务的配置更新 |
systemctl status nginx |
查看状态 | 故障排查 |
systemctl enable nginx |
开机自启 | 服务器重启后自动运行 |
5. 安全加固与优化
5.1 文件权限设置
创建专用用户:
bash复制useradd -r -s /sbin/nologin nginx
设置目录权限:
bash复制chown -R nginx:nginx /usr/local/nginx
chmod 750 /usr/local/nginx
5.2 防火墙配置
开放HTTP/HTTPS端口:
bash复制firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
5.3 性能调优建议
- worker_processes:设置为CPU核心数
- worker_connections:根据可用内存调整(每个连接约占用10KB)
- keepalive_timeout:长连接超时时间,建议15-30秒
- gzip:启用压缩减少传输量
- 缓存设置:对静态资源设置expires头
6. 常见问题排查
6.1 启动失败分析
错误现象:nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
解决方案:
bash复制lsof -i :80 # 查看占用80端口的进程
kill -9 <PID> # 终止冲突进程
# 或者修改nginx监听端口
6.2 配置语法检查
在修改配置后,务必执行:
bash复制/usr/local/nginx/sbin/nginx -t
输出nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful表示配置正确。
6.3 日志分析技巧
查看实时访问日志:
bash复制tail -f /usr/local/nginx/logs/access.log
统计HTTP状态码:
bash复制awk '{print $9}' access.log | sort | uniq -c | sort -rn
7. 进阶配置建议
7.1 虚拟主机配置
在conf/conf.d/目录下创建独立的配置文件:
nginx复制server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example.access.log main;
location / {
root /var/www/example;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
7.2 HTTPS配置示例
获取SSL证书后配置:
nginx复制server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /var/www/example;
index index.html index.htm;
}
}
7.3 负载均衡设置
配置上游服务器:
nginx复制upstream backend {
server 192.168.1.100:8080 weight=5;
server 192.168.1.101:8080;
server 192.168.1.102:8080 backup;
}
server {
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
在实际部署中,建议将不同功能的配置拆分到单独的.conf文件中,通过主配置的include指令加载,这样更易于管理和维护。Nginx的强大功能远不止于此,后续还可以根据需要添加缓存、安全防护、流量限制等高级功能。