1. Nginx安装前的环境准备
第一次在官网下载Nginx源码包进行编译安装时,很多新手会遇到各种"拦路虎"。作为处理过高并发架构的运维老兵,我见过太多人卡在基础环境配置这一步。让我们从最根本的系统环境开始梳理。
1.1 系统依赖检查
在CentOS 7上执行以下命令检查基础依赖:
bash复制rpm -q gcc pcre-devel zlib-devel openssl-devel
如果缺少任何包,用yum安装:
bash复制yum install -y gcc pcre-devel zlib-devel openssl-devel
注意:Ubuntu/Debian系对应的包名为build-essential、libpcre3-dev、zlib1g-dev、libssl-dev
1.2 用户权限规划
建议创建专用用户运行Nginx:
bash复制groupadd -r nginx
useradd -r -g nginx -s /sbin/nologin -M nginx
参数说明:
-r创建系统用户-s /sbin/nologin禁止登录-M不创建家目录
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 源码编译的典型问题解决
2.1 源码包获取与校验
从官网下载时建议使用国内镜像加速:
bash复制wget http://nginx.org/download/nginx-1.25.3.tar.gz
wget http://nginx.org/download/nginx-1.25.3.tar.gz.asc
gpg --verify nginx-1.25.3.tar.gz.asc
常见报错处理:
gpg: Can't check signature: No public key
导入开发者密钥:bash复制
gpg --keyserver pgp.mit.edu --recv-keys 13C82A63B603576156E30A4EA0EA981B66B0D967
2.2 编译参数优化
生产环境推荐配置:
bash复制./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-threads \
--with-file-aio
关键模块说明:
--with-threads启用线程池提升IO效率--with-file-aio异步文件IO支持--with-http_v2_moduleHTTP/2协议支持
2.3 编译失败排查
典型错误1:make: *** No rule to make target 'build'
解决方案:
bash复制make clean
./configure [你的参数]
make
典型错误2:src/os/unix/ngx_user.c: error: 'struct crypt_data' has no member named 'current_salt'
这是glibc版本兼容问题,修改源码:
c复制// 在ngx_user.c中找到
#if (NGX_CRYPT)
# if (__GLIBC__ >= 2 && __GLIBC_MINOR__ >= 2)
cd.current_salt = *salt;
# endif
#endif
// 改为
#if (NGX_CRYPT)
cd.current_salt[0] = *salt;
#endif
3. 服务管理配置技巧
3.1 systemd单元文件配置
创建/usr/lib/systemd/system/nginx.service:
ini复制[Unit]
Description=nginx - high performance web 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
User=nginx
Group=nginx
[Install]
WantedBy=multi-user.target
重载配置:
bash复制systemctl daemon-reload
systemctl enable nginx
3.2 环境变量设置
在/etc/profile.d/nginx.sh中添加:
bash复制export NGINX_HOME=/usr/local/nginx
export PATH=$NGINX_HOME/sbin:$PATH
4. 安装后必须的调优操作
4.1 关键配置文件调整
修改nginx.conf核心参数:
nginx复制worker_processes auto; # 自动匹配CPU核心数
worker_rlimit_nofile 65535; # 文件描述符限制
events {
worker_connections 4096;
use epoll; # Linux内核启用epoll
multi_accept on;
}
http {
server_tokens off; # 隐藏版本号
sendfile on; # 零拷贝传输
tcp_nopush on; # 优化数据包发送
keepalive_timeout 65;
gzip on; # 启用压缩
}
4.2 防火墙规则配置
放行HTTP/HTTPS端口:
bash复制firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
5. 高频问题解决方案
5.1 端口占用问题
检查端口占用:
bash复制ss -tulnp | grep ':80\b'
如果被其他服务占用:
bash复制systemctl stop httpd # 停止Apache
# 或者修改Nginx监听端口
sed -i 's/listen.*80;/listen 8080;/' /usr/local/nginx/conf/nginx.conf
5.2 权限拒绝错误
日志中出现Permission denied时:
bash复制chown -R nginx:nginx /usr/local/nginx
setsebool -P httpd_can_network_connect 1 # SELinux环境
5.3 动态模块加载
后期添加模块无需重新编译:
bash复制./configure --with-http_image_filter_module=dynamic
make modules
cp objs/ngx_http_image_filter_module.so /usr/local/nginx/modules/
在配置中添加:
nginx复制load_module modules/ngx_http_image_filter_module.so;
6. 性能监控与维护
6.1 状态监控配置
启用stub_status模块:
nginx复制server {
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
}
测试输出:
code复制Active connections: 3
server accepts handled requests
10 10 20
Reading: 0 Writing: 1 Waiting: 2
6.2 日志切割方案
使用logrotate配置/etc/logrotate.d/nginx:
code复制/usr/local/nginx/logs/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
[ -f /usr/local/nginx/logs/nginx.pid ] && \
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
endscript
}
6.3 性能测试方法
使用wrk进行压力测试:
bash复制wrk -t4 -c1000 -d30s http://localhost/
参数说明:
-t线程数-c并发连接数-d测试时长
7. 安全加固措施
7.1 隐藏敏感信息
在配置中添加:
nginx复制server {
# 禁用非必要HTTP方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
}
}
7.2 SSL优化配置
推荐SSL配置:
nginx复制ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
7.3 防DDoS基础设置
限制连接频率:
nginx复制limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20;
}
}
