在本章中,我们将探讨 NGINX 如何有效地处理传入的 HTTP 请求。 NGINX 不仅是一个 Web 服务器,也是管理和优化 Web 流量的强大工具。我们将介绍使用 NGINX 提供静态内容、URL 重写、重定向和负载平衡。
## 3.1 了解 HTTP 请求-响应周期
在深入研究 NGINX 的请求处理功能之前,了解 HTTP 请求-响应周期的基本概念至关重要。
### HTTP 请求周期:
1. **客户端请求**:客户端(例如网络浏览器)向服务器发送 HTTP 请求。此请求通常包括 HTTP 方法(GET、POST 等)、URL、标头等信息,有时还包括请求正文。
2. **NGINX 接收**:NGINX 作为 Web 服务器或反向代理,接收来自客户端的 HTTP 请求。
3. **处理**:NGINX 处理请求,这可能涉及各种操作,包括将请求路由到适当的服务器块、应用安全规则以及处理静态内容。
4. **后端通信**:如果请求的目的地是后端服务器(例如应用程序服务器),NGINX 会将请求转发到指定的服务器。
5. **响应生成**:后端服务器处理请求并生成HTTP响应,然后将其发送回NGINX。
6. **响应客户端**:NGINX接收响应并将其转发给发起请求的客户端。
## 3.2 配置 NGINX 提供静态内容
NGINX 在提供静态内容(例如 HTML 文件、图像、CSS 和 JavaScript 文件)方面非常高效。通过从应用程序服务器卸载静态内容的处理,NGINX 可以显着提高性能。
### 演示 1:提供静态文件
在此演示中,我们将配置 NGINX 来提供静态文件。
**第 1 步:** 为静态文件创建一个目录并上传内容。例如,为名为“mywebsite”的网站创建一个目录。
sudo mkdir -p /var/www/mywebsite
sudo chown -R www-data:www-data /var/www/mywebsite
**第2步:**在此目录中添加一些静态文件,例如`index.html`、`style.css`和`logo.png`。
**步骤 3:** 创建一个服务器块来提供此内容。我们假设您已经创建了一个服务器块,如第 2 章中所述。
**步骤 4:** 在服务器块配置中添加位置块,以指定用于提供静态内容的根目录。
server {
# ... other server block configuration ...
location /static {
alias /var/www/mywebsite;
}
}
**步骤 5:** 保存配置并测试语法错误。
sudo nginx -t
**第 6 步:** 如果测试成功,请重新加载 NGINX 以应用更改。
sudo systemctl reload nginx
您现在可以通过“http://your_domain/static/”访问静态内容。
## 3.3 URL重写和重定向
NGINX 允许您通过 URL 重写和重定向来操作 URL。这对于创建用户友好的 URL、强制执行 HTTPS 或处理 URL 结构的更改非常有用。
### 演示 2:URL 重写
假设您要将“http://your_domain/product/123”等 URL 重写为“http://your_domain/products?id=123”。
**步骤 1:** 在您的服务器块中,添加位置块来定义 URL 重写规则。
server {
# ... other server block configuration ...
location /product/ {
rewrite ^/product/(\d+)$ /products?id=$1 last;
}
}
**步骤 2:** 保存配置并测试语法错误。
sudo nginx -t
**步骤 3:** 如果测试成功,请重新加载 NGINX 以应用更改。
sudo systemctl reload nginx
现在,当用户访问“http://your_domain/product/123”时,NGINX 会将 URL 重写为“http://your_domain/products?id=123”。
## 3.4 使用 NGINX 作为负载均衡器
NGINX 擅长负载平衡,将传入请求分布到多个后端服务器上,以提高性能、冗余和容错能力。
### 演示 3:负载均衡
在此演示中,我们将 NGINX 设置为负载均衡器,以将流量分配到多个 Web 服务器。
**第 1 步:** 为负载均衡器创建一个服务器块。
server {
listen 80;
server_name your_domain;
location / {
proxy_pass http://backend;
}
}
**步骤 2:** 在 NGINX 配置中定义后端服务器。在同一配置文件中,服务器块之外:
http {
upstream backend {
server backend_server1;
server backend_server2;
server backend_server3;
}
}
**步骤 3:** 保存配置并测试语法错误。
sudo nginx -t
**步骤 4:** 如果测试成功,请重新加载 NGINX 以应用更改。
sudo systemctl reload nginx
NGINX 现在将以循环方式将传入请求分发到定义的后端服务器,从而有效地负载平衡流量。
本章有探讨了 NGINX 如何处理 HTTP 请求、提供静态内容、执行 URL 重写以及充当负载均衡器。 NGINX 在请求处理方面的灵活性使其成为适用于各种 Web 服务任务的多功能工具。
本文暂时没有评论,来添加一个吧(●'◡'●)