1. 为什么选择Nginx作为Web服务器?
在开始安装之前,我们先聊聊为什么Nginx会成为众多Linux系统管理员的首选。Nginx是一个高性能的HTTP和反向代理服务器,以其稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。根据最新的W3Techs统计,全球超过33%的网站使用Nginx作为Web服务器或反向代理。
与传统的Apache相比,Nginx采用事件驱动的异步架构,能够轻松处理C10K问题(即单机同时处理1万个连接)。我在实际运维工作中发现,同样的硬件配置下,Nginx通常能比Apache多承载3-5倍的并发连接,特别是在处理静态内容时,性能差异更为明显。
提示:如果你的应用场景主要是静态内容(如图片、CSS、JS文件)或需要高并发的API服务,Nginx是绝佳选择。但如果是需要.htaccess支持的动态内容,可能需要结合Apache使用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与系统检查
2.1 CentOS版本确认
首先我们需要确认系统版本,不同版本的CentOS在软件源和依赖管理上略有差异。打开终端执行:
bash复制cat /etc/redhat-release
典型输出可能是:
code复制CentOS Linux release 7.9.2009 (Core)
目前CentOS主要有7.x和8.x两个主流版本(虽然CentOS 8已停止维护,但很多企业仍在用)。本文以CentOS 7为例,但步骤同样适用于其他版本。
2.2 系统更新与基础依赖
在安装Nginx前,建议先更新系统并安装基础开发工具:
bash复制sudo yum update -y
sudo yum install -y epel-release
sudo yum groupinstall -y "Development Tools"
这里有几个关键点需要注意:
epel-release是Extra Packages for Enterprise Linux的仓库,提供了许多CentOS默认仓库中没有的软件包- 安装开发工具组是为了后续可能的源码编译做准备
-y参数自动确认所有提示,适合脚本化安装
2.3 防火墙与SELinux配置
CentOS默认启用了firewalld和SELinux,这可能会阻止Nginx的正常访问。根据你的安全需求,可以选择:
方案A:临时方案(测试环境)
bash复制sudo systemctl stop firewalld
sudo setenforce 0
方案B:生产环境推荐
bash复制# 放行HTTP(80)和HTTPS(443)端口
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
# 设置SELinux允许Nginx网络访问
sudo setsebool -P httpd_can_network_connect 1
3. 两种安装方式详解
3.1 YUM仓库安装(推荐新手)
这是最简单快捷的方式,适合大多数场景:
bash复制sudo yum install -y nginx
安装完成后,关键文件位置:
- 主配置文件:
/etc/nginx/nginx.conf - 默认站点配置:
/etc/nginx/conf.d/default.conf - 日志文件:
/var/log/nginx/ - 网页根目录:
/usr/share/nginx/html
启动Nginx并设置开机自启:
bash复制sudo systemctl start nginx
sudo systemctl enable nginx
验证安装:
bash复制curl -I 127.0.0.1
应看到类似输出:
code复制HTTP/1.1 200 OK
Server: nginx/1.20.1
...
3.2 源码编译安装(高级定制)
如果你需要特定版本的Nginx或自定义模块,源码安装是更好的选择。以下是详细步骤:
步骤1:下载源码包
bash复制wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar zxvf nginx-1.20.1.tar.gz
cd nginx-1.20.1
步骤2:安装编译依赖
bash复制sudo yum install -y pcre-devel zlib-devel openssl-devel
步骤3:配置编译选项
bash复制./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-threads \
--with-stream
常用模块说明:
--with-http_ssl_module:支持HTTPS--with-http_stub_status_module:启用状态监控页--with-stream:支持TCP/UDP代理
步骤4:编译安装
bash复制make && sudo make install
步骤5:创建系统服务
创建/lib/systemd/system/nginx.service文件:
code复制[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/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
然后执行:
bash复制sudo systemctl daemon-reload
sudo systemctl start nginx
4. 常见问题排查与优化
4.1 端口冲突处理
如果启动时报错bind() to 0.0.0.0:80 failed (98: Address already in use),说明80端口已被占用。排查方法:
bash复制sudo netstat -tulnp | grep :80
常见解决方案:
- 停止占用程序(如Apache)
- 修改Nginx监听端口
- 使用
kill -9 PID强制结束占用进程
4.2 性能调优建议
编辑/etc/nginx/nginx.conf,在events块添加:
code复制worker_connections 10240;
multi_accept on;
use epoll;
在http块添加:
code复制keepalive_timeout 65;
keepalive_requests 100000;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
4.3 日志分析技巧
Nginx访问日志通常包含有价值的信息。常用分析命令:
bash复制# 统计访问量前10的IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
# 找出请求最多的URL
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
# 实时监控错误日志
tail -f /var/log/nginx/error.log
5. 进阶配置与安全加固
5.1 HTTPS配置示例
使用Let's Encrypt免费证书:
bash复制sudo yum install -y certbot python2-certbot-nginx
sudo certbot --nginx -d yourdomain.com
自动续期证书:
bash复制sudo crontab -e
添加:
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
5.2 防止常见攻击
在nginx.conf的http块添加:
code复制server_tokens off; # 隐藏Nginx版本号
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
限制请求大小:
code复制client_max_body_size 10m;
client_body_buffer_size 128k;
5.3 负载均衡配置
在http块中添加:
code复制upstream backend {
server 192.168.1.101:8080 weight=5;
server 192.168.1.102:8080;
server 192.168.1.103:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
6. 维护与管理技巧
6.1 常用管理命令
bash复制# 测试配置是否正确
sudo nginx -t
# 重新加载配置(不中断服务)
sudo nginx -s reload
# 查看编译参数
nginx -V
# 查看运行中的Nginx进程
ps -ef | grep nginx
6.2 日志轮转配置
创建/etc/logrotate.d/nginx:
code复制/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
6.3 性能监控方法
启用stub_status模块:
code复制location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
访问http://服务器IP/nginx_status将显示:
code复制Active connections: 3
server accepts handled requests
100 100 200
Reading: 0 Writing: 1 Waiting: 2
7. 版本升级指南
7.1 YUM方式升级
bash复制sudo yum clean all
sudo yum update nginx
7.2 源码方式升级
- 备份现有配置
- 下载新版本源码
- 使用相同的configure参数重新编译
- 执行
make upgrade平滑升级
bash复制cd nginx-新版本
./configure 原参数
make
sudo make upgrade
升级过程中Nginx会保留旧的工作进程直到新进程准备就绪,实现无缝升级。
