CentOS安装Nginx完整指南(含步骤详解)
CentOS 安装 Nginx 完整指南(含步骤详解)
Nginx (engine x) 是一个高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3 代理服务。Nginx 以其稳定性、丰富的功能集、简单的配置文件和低系统资源消耗而闻名。本文将详细介绍在 CentOS 系统上安装和配置 Nginx 的完整过程,包括安装前的准备、多种安装方式、基本配置、安全性加固以及常见问题排查。
一、安装前准备
在开始安装 Nginx 之前,需要确保你的 CentOS 系统满足以下条件:
- CentOS 版本: 本文以 CentOS 7 和 CentOS 8 为例,但大部分步骤也适用于其他 CentOS 版本。
- 服务器访问: 确保你可以通过 SSH 连接到你的 CentOS 服务器。
- root 权限: 你需要拥有 root 用户权限或者具有 sudo 权限的用户。
- 网络连接: 服务器需要能够访问互联网,以便下载 Nginx 软件包和依赖项。
- 关闭 SELinux(可选): SELinux(Security-Enhanced Linux)是 CentOS 的一个安全增强模块。在某些情况下,SELinux 可能会阻止 Nginx 的正常运行。为了简化安装过程,你可以选择临时禁用 SELinux(不推荐在生产环境中禁用):
bash
sudo setenforce 0
如果你想永久禁用 SELinux,需要编辑/etc/selinux/config
文件,将SELINUX=enforcing
改为SELINUX=disabled
,然后重启服务器。 - 防火墙配置(可选): 如果你的服务器启用了防火墙(如 firewalld),你需要允许 HTTP (80) 和 HTTPS (443) 端口的流量通过。
对于CentOS 7
bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
对于CentOS 8
bash
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
二、安装 Nginx
在 CentOS 上安装 Nginx 有多种方式,包括:
- 使用 EPEL 仓库(推荐)
- 从 Nginx 官方仓库安装
- 从源码编译安装
下面分别介绍这三种安装方式:
1. 使用 EPEL 仓库安装(推荐)
EPEL (Extra Packages for Enterprise Linux) 是一个由 Fedora 社区维护的软件包仓库,提供了许多额外的软件包,包括 Nginx。使用 EPEL 仓库安装 Nginx 是最简单、最推荐的方式。
步骤:
-
安装 EPEL 仓库:
bash
sudo yum install epel-release -y -
安装 Nginx:
bash
sudo yum install nginx -y -
启动 Nginx:
bash
sudo systemctl start nginx -
设置 Nginx 开机自启:
bash
sudo systemctl enable nginx -
验证 Nginx 安装:
bash
systemctl status nginx
如果 Nginx 正在运行,你会看到类似 "active (running)" 的输出。你也可以在浏览器中访问服务器的 IP 地址或域名,如果看到 Nginx 的欢迎页面,则表示安装成功。
2. 从 Nginx 官方仓库安装
Nginx 官方也提供了自己的软件包仓库,可以从中安装最新版本的 Nginx。
步骤:
-
创建 Nginx 仓库文件:
创建一个名为
/etc/yum.repos.d/nginx.repo
的文件,并将以下内容复制到文件中(根据你的 CentOS 版本选择对应的内容):CentOS 7:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1CentOS 8:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/8/$basearch/
gpgcheck=0
enabled=1 -
安装 Nginx:
bash
sudo yum install nginx -y -
启动 Nginx 并设置开机自启:
bash
sudo systemctl start nginx
sudo systemctl enable nginx -
验证安装: 与使用 EPEL 仓库安装的验证方法相同。
3. 从源码编译安装
从源码编译安装 Nginx 可以让你自定义编译选项,安装最新版本的 Nginx,但过程相对复杂。
步骤:
-
安装编译所需的工具和依赖项:
bash
sudo yum groupinstall "Development Tools" -y
sudo yum install pcre-devel openssl-devel zlib-devel -y -
下载 Nginx 源码包:
访问 Nginx 官网下载页面 (http://nginx.org/en/download.html),找到最新稳定版的源码包链接,然后使用wget
命令下载:
bash
wget http://nginx.org/download/nginx-1.24.0.tar.gz # 替换为最新版本链接 -
解压源码包:
bash
tar -zxvf nginx-1.24.0.tar.gz # 替换为实际的文件名 -
进入解压后的目录:
bash
cd nginx-1.24.0 # 替换为实际的目录名 -
配置编译选项:
bash
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module
这里是一些常用的编译选项:--prefix
: Nginx 安装目录--conf-path
: Nginx 配置文件路径--sbin-path
: Nginx 可执行文件路径--pid-path
: Nginx 进程 ID 文件路径
*--with-http_ssl_module
: 启用 HTTPS 支持--with-http_v2_module
: 启用 HTTP/2 支持--with-http_realip_module
: 获取客户端真实 IP 地址--with-http_stub_status_module
: 启用 Nginx 状态监控模块
你可以根据自己的需求添加或删除编译选项。
-
编译和安装:
bash
make
sudo make install -
创建nginx.service文件
在/usr/lib/systemd/system/
文件夹下创建nginx.service文件:
bash
sudo vi /usr/lib/systemd/system/nginx.service
添加如下内容
```
[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=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID[Install]
WantedBy=multi-user.target
```
-
启动 Nginx 并设置开机自启:
bash
sudo systemctl start nginx
sudo systemctl enable nginx -
验证安装: 与使用 EPEL 仓库安装的验证方法相同。
三、Nginx 基本配置
安装完成后,你需要对 Nginx 进行基本配置才能使其正常工作。Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf
。
-
备份配置文件: 在修改配置文件之前,建议先备份一份:
bash
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak -
编辑配置文件: 使用你喜欢的文本编辑器打开配置文件:
bash
sudo vi /etc/nginx/nginx.conf -
主要配置项:
Nginx 配置文件使用一种简洁的语法,主要由指令和块组成。以下是一些重要的配置项:
user
: 指定 Nginx 工作进程的用户和组。通常设置为nginx
。worker_processes
: 指定 Nginx 工作进程的数量。通常设置为 CPU 核心数或auto
。error_log
: 指定错误日志文件的路径和日志级别。pid
: 指定 Nginx 进程 ID 文件的路径。events
块: 配置 Nginx 的事件处理模型。worker_connections
:指定每个工作进程的最大连接数。
http
块: 配置 HTTP 服务器。include
:包含其他配置文件。default_type
:设置默认的 MIME 类型。sendfile
:启用 sendfile() 系统调用,提高文件传输效率。keepalive_timeout
:设置 keep-alive 连接的超时时间。server
块:定义一个虚拟主机。listen
:指定监听的端口。server_name
:指定服务器的域名或 IP 地址。root
:指定网站的根目录。index
:指定默认的索引文件。location
块:定义 URL 匹配规则和处理方式。proxy_pass
:将请求转发到后端服务器。try_files
:尝试按顺序查找文件。
-
配置示例:
下面是一个简单的 Nginx 配置示例,用于托管一个静态网站:
```nginx
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name example.com www.example.com; # 替换为你的域名
root /var/www/html; # 替换为你的网站根目录
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
}
5. **创建网站根目录(如果尚不存在):**
sudo mkdir -p /var/www/html
在该文件夹下创建index.html文件,用于测试
html
Welcome to Nginx on CentOS!
If you see this page, the Nginx web server is successfully installed and working.
```
-
检查配置文件语法:
bash
sudo nginx -t
如果配置文件语法正确,你会看到 "syntax is ok" 和 "test is successful" 的输出。 -
重新加载 Nginx 配置:
bash
sudo systemctl reload nginx
或者
bash
sudo nginx -s reload
四、Nginx 安全性加固
为了提高 Nginx 服务器的安全性,建议采取以下措施:
- 更新 Nginx: 及时更新 Nginx 到最新版本,以修复已知的安全漏洞。
- 隐藏 Nginx 版本号: 在
http
块中添加以下指令:
server_tokens off;
- 限制请求方法: 只允许必要的 HTTP 方法(如 GET、POST、HEAD),拒绝其他方法(如 DELETE、TRACE)。在
server
或location
块中添加以下指令:
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
} - 防止缓冲区溢出攻击: 调整以下指令的值:
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k; - 配置 SSL/TLS: 如果你的网站需要使用 HTTPS,你需要配置 SSL/TLS 证书。可以使用 Let's Encrypt 等免费证书颁发机构获取证书。
- 限制 IP 地址访问: 使用
allow
和deny
指令限制特定 IP 地址或 IP 地址段的访问。 - 使用防火墙: 确保你的服务器启用了防火墙,并只允许必要的端口(如 80、443)的流量通过。
- 定期审查日志: 定期检查 Nginx 的错误日志和访问日志,以及时发现和解决安全问题。
- 防止点击劫持
在 http, server 或 location 配置中添加:
add_header X-Frame-Options SAMEORIGIN;
- 禁用服务器签名
在server配置下添加:
server_tokens off;
五、常见问题排查
-
Nginx 无法启动:
- 检查 Nginx 配置文件语法是否正确:
sudo nginx -t
- 检查错误日志:
sudo tail -f /var/log/nginx/error.log
- 检查端口是否被占用:
sudo netstat -tulpn | grep :80
或sudo ss -tulpn | grep :80
- 检查 SELinux 是否阻止了 Nginx 的运行:
sudo getenforce
- 查看nginx状态:
sudo systemctl status nginx
- 检查 Nginx 配置文件语法是否正确:
-
无法访问网站:
- 检查防火墙是否允许 80 和 443 端口的流量通过。
- 检查 Nginx 是否正在运行:
sudo systemctl status nginx
- 检查 DNS 解析是否正确。
- 检查网站根目录和文件权限是否正确。
-
403 Forbidden 错误:
- 检查 Nginx 工作进程的用户是否对网站根目录有读取权限。
- 检查
index
指令是否正确配置了默认的索引文件。
-
502 Bad Gateway错误
- Nginx作为反向代理时,后面的服务器没有正确响应时,报这个错误。
- 检查代理的端口是否正确,服务器是否正常启动。
六、总结
本文详细介绍了在 CentOS 系统上安装和配置 Nginx 的完整过程,包括多种安装方式、基本配置、安全性加固以及常见问题排查。希望这份指南能帮助你成功搭建和管理 Nginx 服务器。请记住,根据你的具体需求,你可能需要进一步调整 Nginx 的配置。建议参考 Nginx 官方文档 (http://nginx.org/en/docs/) 以获取更多信息。