Nginx在CentOS上的安装与配置教程
Nginx 在 CentOS 上的安装与配置
1. 引言
Web 服务器是现代互联网基础设施的关键组成部分。在众多可用的 Web 服务器软件中,Nginx 以其高性能、稳定性、丰富的功能集和低资源消耗而脱颖而出。Nginx 不仅可以作为独立的 Web 服务器,还可以用作反向代理、负载均衡器和 HTTP 缓存。本报告旨在详细阐述 Nginx 在 CentOS 操作系统上的安装与配置过程,为系统管理员和 Web 开发人员提供实用指南。
2. 系统环境与预备条件
2.1. 操作系统
本报告以 CentOS 7/8 作为目标操作系统。CentOS 是一个基于 Red Hat Enterprise Linux (RHEL) 的、社区驱动的免费开源操作系统,以其稳定性和安全性著称。
2.2. 软件包管理
CentOS 使用 YUM (Yellowdog Updater, Modified) 作为其默认的软件包管理器。在安装 Nginx 之前,建议更新系统软件包到最新版本:
bash
sudo yum update -y
2.3. 防火墙配置 (可选)
如果系统启用了防火墙 (firewalld),需要开放 HTTP (80) 和 HTTPS (443) 端口:
bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
如果使用 iptables
,可以用以下命令:
bash
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
sudo service iptables save
2.4. SELinux (可选)
如果系统启用了 SELinux,可能需要调整相关策略以允许 Nginx 正常运行。为了简化安装过程,可以临时禁用 SELinux(不推荐在生产环境中使用):
bash
sudo setenforce 0
如果需要配置SELinux,可以安装policycoreutils-python
工具包后,运行下列命令:
bash
sudo yum install policycoreutils-python
sudo semanage port -a -t http_port_t -p tcp 80
sudo semanage port -a -t http_port_t -p tcp 443
3. Nginx 安装
3.1. 通过 EPEL 仓库安装 (推荐)
EPEL (Extra Packages for Enterprise Linux) 是一个由 Fedora 社区维护的、为 RHEL 和 CentOS 提供额外软件包的仓库。通过 EPEL 仓库安装 Nginx 可以获得较新的版本和及时的安全更新。
-
安装 EPEL 仓库:
bash
sudo yum install epel-release -y -
安装 Nginx:
bash
sudo yum install nginx -y
3.2. 从 Nginx 官方仓库安装
Nginx 官方也提供了自己的 yum 仓库。这种方式可以安装最新版本的 Nginx。
-
创建 Nginx 仓库文件:
bash
sudo vi /etc/yum.repos.d/nginx.repo在文件中添加以下内容(以 CentOS 7 为例):
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
对于 CentOS 8, 需要将7
改为8
. -
安装 Nginx:
bash
sudo yum install nginx -y
3.3 验证安装
安装完成后,启动 Nginx 服务并检查其状态:
bash
sudo systemctl start nginx
sudo systemctl status nginx
如果服务正常运行,应该看到类似 "active (running)" 的输出。
使用浏览器访问服务器的 IP 地址或域名,如果看到 Nginx 的默认欢迎页面,则表示安装成功。
4. Nginx 基本配置
Nginx 的主要配置文件是 /etc/nginx/nginx.conf
。该文件使用一种简洁的、层次化的配置语法。
4.1. 配置文件结构
Nginx 配置文件由多个上下文 (context) 组成,每个上下文包含一组指令 (directive)。主要的上下文包括:
events
: 配置影响 Nginx 连接处理的参数。http
: 配置 HTTP 服务器的核心功能。server
: 定义一个虚拟主机。location
: 定义如何处理特定 URI 的请求。
4.2. 常用指令
以下是一些常用的 Nginx 指令:
worker_processes
: 指定 Nginx 工作进程的数量。通常设置为 CPU 核心数或auto
。worker_connections
: 指定每个工作进程可以同时处理的最大连接数。listen
: 指定监听的端口和地址。server_name
: 指定虚拟主机的域名。root
: 指定网站的根目录。index
: 指定默认的索引文件。error_page
: 定义错误页面的处理方式。access_log
和error_log
: 指定访问日志和错误日志的位置。
4.3. 虚拟主机配置
虚拟主机允许在同一台服务器上托管多个网站。每个虚拟主机通常对应一个 server
块。
以下是一个简单的虚拟主机配置示例:
```nginx
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
```
在上述例子中:
listen 80;
: 表示监听所有网络接口80端口的连接server_name example.com www.example.com;
: 将example.com
和www.example.com
绑定到这个虚拟主机。root /var/www/example.com;
: 表示网站根目录位于/var/www/example.com
.index index.html;
: 表示在根目录访问的时候,默认访问文件是index.html
location /
: 匹配根 URL (/
).try_files $uri $uri/ =404;
: 尝试按顺序查找文件:首先尝试直接访问请求的 URI($uri
),如果找不到,尝试访问同名目录下的 index 文件($uri/
),如果仍然找不到,返回 404 错误。
4.4. 配置文件的组织
为了便于管理,可以将不同的虚拟主机配置放在单独的文件中,然后通过 include
指令包含到主配置文件中。通常,这些配置文件位于 /etc/nginx/conf.d/
目录下。
例如,可以在 /etc/nginx/conf.d/
目录下创建一个名为 example.com.conf
的文件,并将上述虚拟主机配置放入其中。然后在 /etc/nginx/nginx.conf
文件的 http
块中添加以下指令:
nginx
include /etc/nginx/conf.d/*.conf;
4.5. 检查配置并重新加载
修改配置文件后,需要检查配置文件的语法是否正确:
bash
sudo nginx -t
如果显示 "syntax is ok" 和 "test is successful",则表示配置语法正确。
然后,重新加载 Nginx 以应用新的配置:
bash
sudo systemctl reload nginx
或者使用
sudo nginx -s reload
这两种方式都可以实现Nginx配置文件的平滑重新加载。
5. Nginx 高级配置
5.1. 反向代理
Nginx 经常被用作反向代理服务器,将客户端的请求转发到后端服务器集群。这种方式可以提高安全性、负载均衡和性能。
以下是一个简单的反向代理配置示例:
```nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
在上述例子中:
proxy_pass
: 指定后端服务器的地址。proxy_set_header
: 设置传递给后端服务器的 HTTP 头。http://backend_server
应该被替换为后端服务器的IP和端口,例如http://127.0.0.1:8080
.
5.2. 负载均衡
Nginx 可以将请求分发到多个后端服务器,实现负载均衡。
以下是一个简单的负载均衡配置示例:
```nginx
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
在上述例子中:
upstream
: 定义一个后端服务器组。- 每个
server
指令指定一个后端服务器的地址。
Nginx 支持多种负载均衡算法,例如:
- 轮询 (round-robin): 默认算法,按顺序将请求分发到每个服务器。
- 最少连接 (least_conn): 将请求分发到当前连接数最少的服务器。
- IP 哈希 (ip_hash): 根据客户端 IP 地址的哈希值将请求分发到固定的服务器,可以实现会话保持。
可以在 upstream
块中使用 least_conn
或 ip_hash
指令来指定负载均衡算法。
5.3. HTTPS 配置
为了保证网站的安全性,建议启用 HTTPS。可以使用 Let's Encrypt 等免费的证书颁发机构 (CA) 来获取 SSL/TLS 证书。
以下是一个简单的 HTTPS 配置示例:
```nginx
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
```
在上述例子中:
- 第一个
server
块将 HTTP 请求重定向到 HTTPS。 - 第二个
server
块配置 HTTPS。 ssl_certificate
和ssl_certificate_key
: 指定 SSL/TLS 证书和私钥的路径。- 其他指令与 HTTP 配置类似。
5.4. 静态内容缓存
Nginx 可以缓存静态内容(例如图片、CSS 和 JavaScript 文件),减少对后端服务器的请求,提高性能。
以下是一个简单的静态内容缓存配置示例:
```nginx
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
# ... 其他配置 ...
location /static/ {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_pass http://backend;
}
}
}
```
在上述例子中:
proxy_cache_path
: 定义缓存的存储路径和参数。proxy_cache
: 指定要使用的缓存区域。proxy_cache_valid
: 定义不同状态码的缓存时间。
5.5. 性能调优相关参数比较
以下是一些常用的 Nginx 性能调优参数,以对比方式呈现其作用:
| 参数 | 描述 | 调整建议 | 影响 |
| :------------------ | :----------------------------------------------------------- | :----------------------------------------------------------- | :--------------------------------------------------------- |
| worker_processes
| Nginx 工作进程的数量。 | 设置为 CPU 核心数或 auto
。 | 过少会限制并发处理能力,过多会增加进程间切换开销。 |
| worker_connections
| 每个工作进程可以同时处理的最大连接数。 | 根据系统资源和预期负载调整。 | 过小会限制并发连接数,过大会消耗过多内存。 |
| sendfile
| 是否启用 sendfile()
系统调用来传输文件。 | 通常启用 (on
),可以提高文件传输效率。 | 禁用会降低性能,但在某些特殊情况下可能需要禁用。 |
| tcp_nopush
| 是否启用 TCP_NOPUSH
选项(仅限 FreeBSD)或 TCP_CORK
选项(Linux)。 | 通常启用 (on
),可以减少网络包的数量,提高效率。 | 禁用可能会增加网络延迟。 |
| tcp_nodelay
| 是否禁用 Nagle 算法。 | 对于需要低延迟的连接(例如 WebSocket),可以禁用 (off
)。 | 启用可能会增加网络延迟,但可以提高吞吐量。 |
| keepalive_timeout
| 长连接的超时时间。 | 根据实际情况调整,平衡连接复用和资源占用。 | 过短会导致频繁建立连接,过长会占用过多资源。 |
| gzip
| 是否启用 Gzip 压缩。 | 对于文本类型的内容(例如 HTML、CSS、JavaScript),通常启用 (on
)。 | 启用可以减少传输数据量,提高加载速度,但会增加 CPU 消耗。 |
| open_file_cache
| 是否启用文件描述符缓存。 | 通常启用,可以减少文件打开操作的开销。 | 可以提高对静态文件的访问速度。 |
上面这种比较方式,比用表格更强调描述和建议,而不是单纯的数据对比。
6. 补充说明
本报告详细介绍了 Nginx 在 CentOS 系统上的安装和配置过程,涵盖了基本安装、配置文件结构、虚拟主机配置、反向代理、负载均衡、HTTPS 配置和性能调优等方面。提供的配置示例和参数说明可以作为实际部署的参考,但具体的配置需要根据实际的硬件环境、业务需求和安全要求进行调整。建议在生产环境中进行充分的测试和监控,以确保 Nginx 的稳定运行和最佳性能。
同时,需要密切关注 Nginx 官方的安全公告和版本更新,及时升级到最新版本,以修复已知的安全漏洞和缺陷。