Nginx 安装常见问题与排障方案

Nginx 源码编译报错:PCRE library not found?

原因:

在执行 ./configure 时,提示 the HTTP rewrite module requires the PCRE library

解决方案:

这是因为缺少正规表达式库依赖开发包。需要根据操作系统类型安装依赖包:

# Ubuntu/Debian
sudo apt install libpcre3 libpcre3-dev -y

# CentOS/RHEL
sudo yum install pcre pcre-devel -y

Nginx 启动失败:Address already in use?

原因:

启动 Nginx 时报错 bind() to 0.0.0.0:80 failed (98: Address already in use)

解决方案:

Nginx 配置端口已被占用(如 80 端口已被其他程序 Apache 或已运行的 Nginx 占用)。

1. 使用以下指令排查并关闭占用进程:

# 查找占用 80 端口的 PID
sudo lsof -i :80

# 或者使用
sudo netstat -tpln | grep :80

# 杀掉占用进程(替换 PID)
sudo kill -9 [PID]

2. 修改 Nginx 配置端口并重新启动 nginx。

配置 HTTPS 时提示 SSL 模块未开启?

原因:

在配置文件中写了 ssl onlisten 443 ssl,但报错 unknown directive "ssl" 或 the "ssl" parameter requires ngx_http_ssl_module。

解决方案:

如果是源码编译方式安装的,说明在 ./configure 时没有添加 SSL 模块。您需要重新编译 Nginx 源代码:

# 回到 Nginx 源码目录,重新配置并加入 ssl 模块并重新编译 Nginx 源代码
./configure --with-http_ssl_module [其他原有参数]
make
sudo make install

客户端访问出现 403 Forbidden 错误?

Nginx 已启动,但访问网页显示 403。

原因:

Nginx 启动用户读写权限不足或网站索引文件丢失。

解决方案:

1. 检查网站目录权限:确保 Nginx 运行用户对网页目录有读取权限。

sudo chmod -R 755 /var/www/html

2. 检查 SELinux(仅限 CentOS):

# 临时关闭测试
sudo setenforce 0

400 Bad Request 错误?

原因:

客户端请求头或 cookie 过大。

解决方案:

增大 client_header_buffer_size 和 large_client_header_buffers 的值。

Nginx 已正常启动,客户端无法访问错误?

原因:

检查系统防火墙未开放端口80

解决方案:

1. 执行命令开放端口。

# 查看系统已开放的端口
firewall-cmd --list-ports
# 添加系统防火墙端口
firewall-cmd --permanent --add-port=80/tcp && firewall-cmd --reload

Nginx 配置文件语法错误?

解决方案:

每次修改 Nginx 配置文件后,执行 nginx -t 测试配置文件是否正确有效。

Nginx 常用命令

# 检查配置
nginx -t
# 查看日志
tail -f /var/log/nginx/error.log
# 检查端口
netstat -tulnp | grep :80 或 ss -tulnp | grep :80
# 平滑重启
nginx -s reload