在本章中,我们将深入探讨 NGINX 提供的高级 HTTP 功能。这些功能超越了基础功能,并提供了增强的功能,可提高 Web 服务的性能、安全性和效率。
## 4.1 HTTP 压缩
HTTP 压缩是一种减少服务器和客户端之间传输数据大小的技术。这可以显着缩短网站加载时间并减少带宽使用。
### 演示 1:启用 HTTP 压缩
在此演示中,我们将配置 NGINX 为 HTTP 响应启用 gzip 压缩。
**第1步:** 打开NGINX配置文件进行编辑。
sudo nano /etc/nginx/nginx.conf
**步骤 2:** 在 `http` 块内,添加以下行以启用 gzip 压缩。
http {
# ... other configuration ...
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 1000;
gzip_buffers 16 8k;
}
- `gzip on`:启用 gzip 压缩。
- `gzip_types`:指定应压缩哪些 MIME 类型。
- `gzip_proxied`:确定 NGINX 在充当反向代理时如何处理 gzipping。
- `gzip_comp_level`:设置压缩级别 (1-9),值越高提供更好的压缩,但消耗更多的 CPU。
- `gzip_min_length`:设置将被 gzip 压缩的响应的最小长度。
- `gzip_buffers`:指定用于压缩的缓冲区的数量和大小。
**步骤 3:** 保存配置并测试语法错误。
sudo nginx -t
**步骤 4:** 如果测试成功,请重新加载 NGINX 以应用更改。
sudo systemctl reload nginx
现在,NGINX 将在将符合条件的内容发送给客户端之前对其进行压缩,从而缩短页面加载时间。
## 4.2 使用 NGINX 进行缓存
缓存涉及存储频繁请求的资源,以减少 Web 服务器上的负载并缩短响应时间。 NGINX提供了强大的缓存功能。
### 演示 2:配置缓存
在此演示中,我们将配置 NGINX 来缓存静态内容。
**第 1 步:** 打开要启用缓存的网站的服务器块。
sudo nano /etc/nginx/conf.d/mywebsite.conf
**步骤 2:** 在服务器块内,添加一个位置块来定义缓存规则。
server {
# ... other server block configuration ...
location /static {
alias /var/www/mywebsite;
expires 30d; # Cache static content for 30 days
}
}
在此示例中,我们设置“expires”指令将静态内容缓存 30 天。您可以根据需要调整该值。
**步骤 3:** 保存配置并测试语法错误。
sudo nginx -t
**步骤 4:** 如果测试成功,请重新加载 NGINX 以应用更改。
sudo systemctl reload nginx
NGINX 现在将缓存静态内容,减少 Web 服务器的负载并缩短响应时间。
## 4.3 认证与授权
NGINX 可用于对您的 Web 应用程序强制执行身份验证和授权。这可以帮助保护您的网站或应用程序的敏感区域。
### 演示 3:添加基本身份验证
在此演示中,我们将为您网站上的特定位置设置基本身份验证。
**第 1 步:** 使用 `htpasswd` 命令创建包含用户名和密码的身份验证文件。 将“your_username”和“your_password”替换为您选择的凭据。
sudo htpasswd -c /etc/nginx/.htpasswd your_username
**步骤 2:** 打开您要保护的网站或位置的服务器块配置文件。
sudo nano /etc/nginx/conf.d/mywebsite.conf
**步骤 3:** 在位置块内,添加以下行以启用基本身份验证。
server {
# ... other server block configuration ...
location /secure {
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
**步骤 4:** 保存配置并测试语法错误。
sudo nginx -t
**步骤 5:** 如果测试成功,请重新加载 NGINX 以应用更改。
sudo systemctl reload nginx
现在,当用户访问您网站上的“/secure”位置时,系统将提示他们输入您指定的用户名和密码。
## 4.4 速率限制和访问控制
速率限制通过限制客户端在特定时间范围内可以发出的请求数量来帮助防止滥用 Web 服务。 NGINX 允许您设置速率限制和访问控制规则。
### 演示 4:实施速率限制
在此演示中,我们将为特定位置配置速率限制。
**步骤 1:** 打开您要保护的网站或位置的服务器块配置文件。
sudo nano /etc/nginx/conf.d/mywebsite.conf
**第 2 步:** 在位置块内,添加以下内容
线路实施速率限制。
server {
# ... other server block configuration ...
location /api {
limit_req_zone $binary_remote_addr zone=api:10m rate=5r/s;
limit_req zone=api burst=10 nodelay;
}
}
- `limit_req_zone`:定义一个共享内存区域来存储速率限制信息。
- `rate=5r/s`:将速率限制为每秒 5 个请求。
- `burst=10`:允许突发最多 10 个请求。
- `nodelay`:确保超出的请求不会被延迟。
**步骤 3:** 保存配置并测试语法错误。
sudo nginx -t
**步骤 4:** 如果测试成功,请重新加载 NGINX 以应用更改。
sudo systemctl reload nginx
现在,位置“/api”将被速率限制为每秒 5 个请求。
本章探讨了 NGINX 中的高级 HTTP 功能,包括 HTTP 压缩、缓存、身份验证和授权以及速率限制。这些功能增强了 Web 服务的性能、安全性和效率,使 NGINX 成为 Web 服务器管理的强大工具。