> ## Documentation Index
> Fetch the complete documentation index at: https://docs.1000w123.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Nginx 安装

> Nginx 安装部署

# 安装和启动

第一步是在您的系统上安装 Nginx。对于大多数类 Unix 操作系统，可以从包管理器中获得 Nginx：

```sh theme={null}
sudo apt update
sudo apt install nginx
```

安装后，您可以使用以下方法启动、停止和重启 Nginx：

```sh theme={null}
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
```

对于 Windows 用户，您需要从其官方网站下载并运行 Nginx 可执行文件。

## 配置 Nginx

安装 Nginx 后，下一步是根据您的项目需求对其进行配置。默认配置文件通常位于 `/etc/nginx/nginx.conf`。但是，对于单个站点，最佳做法是在 `/etc/nginx/sites-available/` 下创建单独的配置文件并将其链接到 `/etc/nginx/sites-enabled/` .

为您的项目创建一个新的配置文件：

```sh theme={null}
sudo touch /etc/nginx/sites-available/your_project
sudo ln -s /etc/nginx/sites-available/your_project /etc/nginx/sites-enabled/
```

使用您喜欢的文本编辑器编辑文件并设置必要的服务器块：

```nginx theme={null}
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
```

此配置将流量从您的域定向到在同一服务器上的端口 3000 上运行的 Web 应用程序。

## 测试配置更改

更改 Nginx 配置后：

```sh theme={null}
sudo nginx -t
```

此命令测试您的配置是否存在语法错误。如果一切正常，您可以应用更改：

```sh theme={null}
sudo systemctl reload nginx
```

## 使用 SSL/TLS 保护您的环境

为了保护应用程序的数据传输，设置 SSL/TLS 加密至关重要。您可以使用 Let's Encrypt 获取免费证书：

```sh theme={null}
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
```

Certbot 将自动更新您的 Nginx 配置以使用 SSL 证书。

## 验证自动续订

Let's Encrypt 证书的有效期为 90 天。幸运的是，Certbot 可以自动续订它们。通过模拟续订来确认自动续订流程设置正确：

```sh theme={null}
sudo certbot renew --dry-run
```

如果您没有看到任何错误，则表示您已准备好进行自动续订。

## 强制使用 HTTPS

要确保所有连接都使用 SSL，请将以下内容添加到您的 Nginx 配置中，将 HTTP 流量重定向到 HTTPS：

```nginx theme={null}
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}
```

编辑后，重新启动 Nginx 以应用更改：

```sh theme={null}
sudo systemctl restart nginx
```

## 常见问题疑难解答

如果您遇到 Nginx 问题，检查日志是一个很好的起点。错误日志文件通常位于 。它提供了对可能出现的问题的见解。`/var/log/nginx/error.log`

# 配置 Nginx 作为 API Gateway

```nginx theme={null}
# Define upstream server for the backend
upstream backend_service {
    server backend1.example.com;
    server backend2.example.com;
}

# Configure server block for API requests
server {
    listen 80;
    server_name api.example.com;

    location /api/ {
        proxy_pass http://backend_service;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

```

## Nginx 作为 API 网关的使用案例

* \*\*负载均衡：\*\*Nginx 可以在多个服务器之间分配传入的 API 流量，从而保证后端服务的高可用性和容错性。

* \*\*认证：\*\*通过拦截对 API 的所有请求，可以将 Nginx 配置为执行身份验证，确保只有有效的请求才能到达您的后端系统。

* \*\*速率限制：\*\*使用 Nginx 的速率限制功能保护您的后端服务不会被过多的请求所淹没。

* \*\*缓存：\*\*通过 Nginx 的缓存功能缩短响应时间并减少 API 上的负载。

* \*\*日志记录和监控：\*\*Nginx 提供了广泛的日志记录功能，可用于监控 API 使用模式和识别潜在问题。

## 使用 Nginx 进行负载均衡

Nginx 提供了多种负载均衡方法，例如轮询、最少连接和 IP 哈希。在 upstream 块中配置这些：

```nginx theme={null}
upstream app_servers {
    least_conn;
    server backend1.example.com weight=3;
    server backend2.example.com;
}
```

此设置偏爱连接最少的服务器，并为 'backend1' 分配更高的权重，从而为其提供更大的流量份额。

## 使用 SSL/TLS 保护 Nginx

要保护客户端与服务器之间的通信，请启用 SSL/TLS 加密。首先，从证书颁发机构 （CA） 获取证书或生成用于测试目的的自签名证书。然后更新您的服务器块：

```nginx theme={null}
server {
    listen 443 ssl;

    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privatekey.pem;

    # ... rest of the server block ...
}
```

请记住将 HTTP 流量重定向到 HTTPS，并在端口 80 上提供额外的服务器块侦听。

## 添加缓存层

在 Nginx 级别缓存静态资产甚至动态内容可以大大缩短响应时间。使用以下方法设置缓存：

```nginx theme={null}
http {
    proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

    server {
        # ...
        location / {
            proxy_cache my_cache;
            # ...
        }
    }
}
```

这将创建一个名为 'my\_cache' 的缓存，其中包含用于存储和过期的指定参数。

# 使用 Nginx 处理大文件下载

在通过 Internet 提供大文件时，Nginx 作为强大的高性能 Web 服务器脱颖而出。它旨在高效处理繁重的负载，使其成为负责管理大文件下载的开发人员的绝佳选择。在本文中，我们将探讨 Nginx 中的策略和配置，这些策略和配置可以帮助您优化用户的下载体验。

## 优化 nginx 以下载大文件

在深入研究技术方面之前，了解优化文件下载不仅仅是关于原始速度至关重要。它还与可靠性、安全性和资源管理有关。以下是一些需要考虑的关键领域：

* \*\*缓冲：\*\*Nginx 使用缓冲区来管理网络流量。调整缓冲区大小有助于更有效地处理大文件。
* \*\*速率限制：\*\*此功能控制每个连接的数据速率，防止服务器过载并确保公平的带宽分配。
* \*\*连接处理：\*\*微调 Nginx 处理连接的方式可以在并发大文件下载期间获得更好的性能。

### 配置缓冲区大小

要优化缓冲区大小，您需要编辑您的或特定的服务器块配置文件。以下指令很重要：`nginx.conf`

```nginx theme={null}
client_body_buffer_size 128k;
client_max_body_size 100M;
sendfile on;
sendfile_max_chunk 1m;
```

该指令调整 POST 请求的缓冲区大小，同时设置 Client 端请求正文的最大允许大小。该指令使 Nginx 能够通过使用内核的 sendfile（） 系统调用来绕过用户空间，从而更高效地传输文件。它限制了一次调用中发送的数据量，以防止工作进程被单个连接占用。

### 实施速率限制

为了防止滥用和管理服务器负载，您可能需要实施速率限制。下面是一个示例配置代码段：

```nginx theme={null}
limit_rate_after 1m;
limit_rate 300k;
```

该指令指定速率限制开始的数据量（在本例中为 1 MB），并设置将数据发送到 Client 端的速率。根据您的服务器容量和用户需求调整这些值。
.

### 连接和超时设置

您还应该配置连接超时，以避免挂起的连接无限期地占用资源。以下指令是必不可少的：

```nginx theme={null}
keepalive_timeout 15;
send_timeout 60;
```

它设置连接在没有活动的情况下应该保持打开状态的时间，并定义 Nginx 在对客户端的响应超时之前将等待多长时间。

## 用于高效文件服务的 X-Accel-Redirect 标头

Nginx 提供了一种称为 “X-Accel-Redirect” 的机制，它允许内部重定向到磁盘上的文件。当您需要通过以 PHP 或 Python 等语言编写的应用程序层控制对大型文件的访问时，这尤其有用。

```php theme={null}
header('X-Accel-Redirect: /path/to/large/file.zip');
```

这种方法将文件服务从应用程序层卸载到 Nginx，从而为其他任务释放应用程序服务器资源。

## 用于重复下载的 Nginx 缓存

如果预计会重复下载相同的大文件，则实施缓存可以显著提高性能。以下是在 Nginx 中启用缓存的基本示例：

```nginx theme={null}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

location /download/ {
    proxy_cache my_cache;
    proxy_pass http://backend/;
}
```

在此配置中，下载的文件缓存在 中，各种设置控制缓存键、大小和过期时间。

## 常见问题疑难解答

如果用户报告下载大文件时出现问题，请检查以下问题：

* Nginx 日志中出现配置问题或资源限制的错误信息。
* 客户端网络状况不足，影响下载稳定性。
* 与服务器上的其他服务发生潜在冲突，这些服务可能会消耗过多资源。

# Nginx 服务器安全最佳实践

作为还充当反向代理、负载均衡器和 HTTP 缓存的 Web 服务器，Nginx 因其性能和可扩展性而成为软件开发领域的主打产品。然而，能力越大，责任越大，尤其是在安全方面。本文列出了确保您的 Nginx 服务器免受潜在威胁的最佳实践。

## 保持 Nginx 更新

保护任何软件的最基本步骤之一是使其保持最新状态。开发人员经常修补已知漏洞，并且通过保持最新状态，您可以最大限度地降低通过过时代码被利用的风险。

```sh theme={null}
sudo apt update
sudo apt upgrade nginx
```

## 最小化 Server 信息

默认情况下，Nginx 会在错误页面和 HTTP 标头中泄露版本号，这可以为攻击者提供有价值的信息。您可以通过将以下指令添加到您的 ：`nginx.conf`

```nginx theme={null}
server_tokens off;
```

## 采用强大的 SSL/TLS 策略

加密客户端和服务器之间的数据至关重要。通过生成强大的 DH （Diffie-Hellman） 参数来实施强大的 SSL/TLS 策略：

```sh theme={null}
openssl dhparam -out /etc/nginx/dhparam.pem 4096
```

您还应该将服务器配置为使用此参数并首选安全密码：

```nginx theme={null}
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256...';
ssl_prefer_server_ciphers on;
```

## 利用 HTTP 安全标头

添加安全标头（如 `Content-Security-Policy``X-Frame-Options``X-Content-Type-Options` ）可以缓解跨站点脚本 （XSS） 和数据注入攻击。

## 存取控制

使用访问控制列表 （ACL）、密码保护或基于 IP 的限制来限制对网站敏感区域的访问。

```nginx theme={null}
location /admin {
    allow 192.168.1.0/24;
    deny all;
}
```

## 文件权限和所有权

确保为您的 Web 目录设置适当的文件权限和所有权，以防止未经授权的访问或篡改。

## 禁用不必要的模块

Nginx 模块扩展了功能，但也可能引入漏洞。禁用您不需要的任何模块。

## 定期备份和监控

维护 Nginx 配置文件和 Web 内容的定期备份。此外，实施监控解决方案以尽早检测异常活动。

## 自动化安全审计

使用 Lynis 或 Nessus 等工具自动对 Nginx 服务器进行安全审计，以识别潜在的安全问题。

# 在 nginx 中启用 HTTP/2 以加快页面加载速度

随着 Web 应用程序的发展，性能考虑因素变得更加重要。HTTP/2 是超文本传输协议的第二个主要版本，旨在解决 HTTP/1.x 的一些缺点并提高 Web 通信的性能。它最重要的增强功能之一是通过标头压缩、通过单个连接多路复用多个请求以及服务器推送功能等功能减少延迟。对于像 Nginx 这样的 Web 服务器，启用 HTTP/2 可以显着改善页面加载时间和整体用户体验。

## 启用 HTTP/2 之前的先决条件

* 支持 HTTP/2 的 Nginx 更新版本（Nginx 1.9.5 及以上版本）。
* 有效的 SSL/TLS 证书，因为 HTTP/2 需要加密连接 （HTTPS）。

## 配置 Nginx 以使用 HTTP/2

假设您已满足先决条件，在 Nginx 中启用 HTTP/2 非常简单。第一步是修改要启用 HTTP/2 的服务器块的 Nginx 配置文件。

```sh theme={null}
# Open the Nginx configuration file for editing
sudo nano /etc/nginx/nginx.conf

# Add 'http2' to the listen directive for your server block
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    # Remainder of your server block configuration...
}

# Test the Nginx configuration for syntax errors
sudo nginx -t

# Reload Nginx to apply changes
sudo systemctl reload nginx
```

需要注意的是，将 'http2' 添加到 listen 指令中可以启用 HTTP/2，同时保持与不支持它的 Client 端的向后兼容性。

## 验证 HTTP/2 实施

应用更改后，您应该验证 HTTP/2 是否处于活动状态。您可以使用在线工具或命令行实用程序（如 cURL）执行此操作：

```sh theme={null}
# Check if the server uses HTTP/2 using cURL
curl -I https://example.com --http2
```

如果成功，您将看到一个包含 “HTTP/2 200” 的输出，指示 HTTP/2 已启用并正常工作。

## 常见问题疑难解答

如果您在启用 HTTP/2 后遇到问题，请检查以下内容：

* 确保您的 SSL/TLS 证书已正确安装和配置。
* 确认您使用的是支持 HTTP/2 的 Nginx 版本。
* 检查错误日志中是否有与配置相关的任何特定消息。

# 优化 Nginx 以提供静态文件

Nginx 是一种高性能的 Web 服务器，非常适合提供静态文件。它以其稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。如果配置得当，Nginx 可以以闪电般的速度提供静态内容，使其成为需要快速高效交付内容的网站和应用程序的绝佳选择。

## 使用 Nginx 优化文件服务

为了确保 Nginx 以最优化的方式提供静态文件，您可以调整几个配置设置和指令：

* \*\*sendfile 指令：\*\*sendfile 指令允许 Nginx 在发送文件时绕过文件系统层，从而加快文件交付速度。要启用它，请将以下行添加到您的配置中：

```nginx theme={null}
sendfile on;
```

* \*\*tcp\_nopush 和 tcp\_nodelay：\*\*这些设置控制 TCP 数据包的发送方式。'tcp\_nopush' 有助于在一个数据包中发送 HTTP 响应标头，应与 'sendfile' 一起使用。另一方面，“tcp\_nodelay”优化了小批量数据的发送。两者都可以通过以下方式启用：

```nginx theme={null}
tcp_nopush on;
tcp_nodelay on;
```

* \*\*open\_file\_cache：\*\*此设置通过缓存打开的文件描述符来减少 I/O 操作的数量。这是一个强大的指令，在提供大量静态文件时可以显著提高性能：

```nginx theme={null}
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
```

* \*\*expires 指令：\*\*通过在 HTTP 标头中设置到期日期或最长期限，浏览器将缓存静态资产。'expires' 指令允许您定义缓存参数，以指示客户端浏览器重用内容，而无需再次请求内容，直到内容过期：

```nginx theme={null}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}
```

除了这些指令之外，还可以考虑关闭静态内容的日志记录，因为这还可以节省 I/O 操作并提高性能：

```nginx theme={null}
access_log off;
```

如果您希望将 Nginx 性能提升到一个新的水平或需要特定专业知识来处理更复杂的配置，您可能需要聘请可以提供定制解决方案的 [nginx 专家](https://reintech.io/hire-nginx-experts)。

## 调整 Nginx 性能的操作系统级参数

操作系统本身可以进行微调，以更好地支持 Nginx 性能。例如，增加 Nginx 可用的文件描述符数量可以使其处理更多的并发连接。此外，请务必根据服务器的工作负载监控和调整网络设置，例如缓冲区大小和积压队列。

## 利用缓存机制

在优化 Web 服务器性能方面，缓存至关重要。Nginx 内置了对 fastcgi\_cache 的支持，如果您通过 FastCGI 运行 PHP，则可以使用它。对于纯静态站点，依赖 browser 和 open\_file\_cache 指令就足够了。

## 结论

高效提供静态文件对于任何 Web 应用程序的性能都至关重要。通过利用 Nginx 强大的功能集并微调应用程序级和操作系统级参数，开发人员可以确保其应用程序尽可能快速可靠地提供内容。

# 使用 Nginx 进行日志记录和监控的最佳实践

在 Web 服务器方面，Nginx 以其高性能、稳定性和丰富的功能集而闻名。但是，即使是最强大的系统也会遇到问题，这就是有效的日志记录和监控发挥作用的地方。使用 Nginx 实施日志记录和监控的最佳实践可能是小问题和全面中断之间的区别。在本文中，我们将深入探讨这些最佳实践，确保您的应用程序保持正常运行，并且故障排除过程尽可能高效。

## 日志记录最佳实践

日志记录对于了解应用程序的行为和识别问题至关重要。Nginx 提供了强大的日志记录功能，您可以利用这些功能来维护健康的系统。

* \*\*使用访问和错误日志：\*\*确保在 Nginx 配置中启用了访问日志和错误日志。它们提供对服务器内发生的流量模式和潜在错误的见解。
* \*\*自定义日志格式：\*\*自定义日志格式以捕获相关数据点。这可能包括请求时间、上游响应时间、状态代码等。
* \*\*日志轮换：\*\*实现日志轮换，以防止日志占用过多磁盘空间。这样的工具可以自动执行此过程。`logrotate`
* \*\*错误日志级别：\*\*根据环境配置适当的错误日志级别（例如，warn、error、info）;例如，暂存的详细程度高于生产的详细程度。

要在 Nginx 中实现自定义日志格式，请将以下指令添加到您的配置文件中：

```nginx theme={null}
http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
}
```

## 监控最佳实践

监控可让您实时了解服务器的运行状况和性能。它允许您在问题升级之前主动解决问题。

* \*\*状态模块：\*\*利用 Nginx 来监控基本指标，如活跃连接和请求计数。`ngx_http_stub_status_module`
* \*\*实时监控工具：\*\*与 Prometheus 或 Datadog 等工具集成，以获得全面的实时监控功能。
* \*\*仪表 板：\*\*使用控制面板可视化指标并快速获得洞察。这可以帮助您识别 Web 流量或服务器性能的趋势或异常。
* \*\*提醒：\*\*设置警报机制以通知您关键事件，例如服务器停机时间或错误率峰值。

要在 Nginx 中启用 stub status 模块，请在 server 块中包含以下内容：

```nginx theme={null}
location /nginx_status {
    stub_status;
    allow 127.0.0.1; # only allow requests from localhost
    deny all;        # deny all other hosts
}
```

## 整合自动化

将自动化整合到您的日志记录和监控策略中。自动化脚本可以解析日志中的特定模式或异常情况，并在需要时触发警报或纠正措施。

## 维护安全性

通过确保日志不存储敏感信息来维护安全性。在通过网络传输日志数据时，请限制对日志的访问并采用加密。

## 结束语

微调您的 Nginx 日志记录和监控设置将帮助您维护一个有弹性的系统。随着应用程序的发展，不断迭代这些做法。如果您需要设置或维护这些系统的专业知识，请考虑[聘请 Nginx 专家](https://reintech.io/hire-nginx-experts)的选项。

# 在 Nginx 中实现基于 GEO IP 的重定向

基于地理 IP 的重定向是指根据用户的地理位置将用户重定向到网站的不同部分或完全不同的网站的做法。这对于交付本地化内容、管理区域许可限制或出于性能原因路由流量特别有用。

## 在 Nginx 中设置 GEO IP 重定向

要在 Nginx 中实现基于 GEO IP 的重定向，您需要 GeoIP 模块，默认情况下，该模块可能不包含在 Nginx 版本中。您可以通过运行并查找 来检查它是否已启用。如果不存在，你可能需要从源码重新构建 Nginx 并包含此模块。`nginx -V``--with-http_geoip_module`

启用 GeoIP 模块后，您可以配置 Nginx 以根据用户的 IP 地址重定向用户。最常见的方法是使用 module 提供的变量。`$geoip_country_code`

### 第 1 步：安装 GeoIP 数据库

```sh theme={null}
sudo apt-get install geoip-database libgeoip1
```

这将在您的服务器上安装 GeoIP 数据库和所需的库。

### 步骤 2：配置 Nginx

编辑您的 Nginx 配置文件（通常位于 ），并在块中添加以下行：`/etc/nginx/nginx.conf``http`

```sh theme={null}
http {
    geoip_country /usr/share/GeoIP/GeoIP.dat;

    map $geoip_country_code $allowed_country {
        default no;
        US yes;
        CA yes;
        UK yes;
    }

    ...other configurations...
}
```

此配置会设置一个变量，如果访客来自美国、加拿大或英国，则该变量为 “yes”，否则为 “no”。`$allowed_country`

### 第 3 步：在 Server Block 中设置重定向

在要从中重定向流量的域的服务器块中，使用指令检查 ：`if``$allowed_country`

```sh theme={null}
server {
    ...

    if ($allowed_country = no) {
        return 302 http://example.com/special_offer_for_your_region;
    }

    ...
}
```

这会将非美国、加拿大或英国的访客重定向到为其所在地区设计的特殊优惠页面。

## 高级配置：将 JavaScript 与 Nginx 结合使用

在需要比原生 Nginx 指令提供的逻辑更复杂的逻辑的情况下，开发人员可以在 Nginx 中使用嵌入式 JavaScript（也称为 njs）。为了处理更复杂的基于 GEO IP 的重定向场景，例如基于业务逻辑或数据库查询的动态路由，可以考虑在 Nginx 配置中使用 JavaScript。这需要在服务器上下文中进行 JavaScript 开发的额外设置和专业知识。对于需要高级定制和开发技能的项目，[聘请 javascript 开发人员 nginx](https://reintech.io/hire-javascript-developers-nginx) 可能会有所帮助。

## 维护 GEO IP 数据完整性

基于 GEO IP 的重定向的准确性取决于 GeoIP 数据库的完整性。需要定期更新以确保 IP 到位置的映射保持最新。请注意，一些访问者可能会使用 VPN 或代理，这可能会导致基于 GEO IP 的重定向无效或不准确。

# 使用 PHP-FPM 为动态网站设置 Nginx

动态网站已成为现代 Web 的基石。它们提供引人入胜的用户体验、个性化和交互式内容。提供动态内容的一种流行方式是将 Nginx 与 PHP-FPM 结合使用。这种组合为运行 PHP 应用程序提供了一个强大的高性能平台。在本文中，我们将演练使用 PHP-FPM 设置 Nginx 以高效服务动态网站的过程。

## 先决条件

* 运行 Linux 的服务器（推荐 Ubuntu/Debian）
* 已安装 Nginx
* 已安装 PHP 和 PHP-FPM
* 具备 Nginx 和 PHP 配置的基本知识

## 第 1 步：安装 Nginx 和 PHP-FPM

如果您尚未安装 Nginx 和 PHP-FPM，请先更新您的包管理器并安装所需的包：

```sh theme={null}
sudo apt update
sudo apt install nginx php-fpm
```

这将在您的系统上安装 Nginx 和 PHP FastCGI 进程管理器 （PHP-FPM）。

## 第 2 步：配置 Nginx 以使用 PHP-FPM

要使 Nginx 与 PHP-FPM 一起使用，您需要编辑 Nginx 服务器块配置。使用文本编辑器打开默认配置文件：

```sh theme={null}
sudo nano /etc/nginx/sites-available/default
```

在服务器块中添加或修改以下 location 块以处理 PHP 文件：

```nginx theme={null}
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # Ensure this matches your PHP version
    fastcgi_index index.php;
    include fastcgi_params;
}
```

此配置指示 Nginx 使用 PHP-FPM 服务处理扩展名为 .php 的文件。

## 第 3 步：配置 PHP-FPM 池

PHP-FPM 使用池来处理传入的请求。编辑默认池配置文件：

```sh theme={null}
sudo nano /etc/php/7.4/fpm/pool.d/www.conf
```

确保 listen 参数与 Nginx 配置中的 fastcgi\_pass 指令匹配：

```php theme={null}
listen = /var/run/php/php7.4-fpm.sock
```

您还可以根据需要调整其他设置，例如用户、组和流程管理。

## 步骤 4：测试配置并重启服务

在重新启动 Nginx 和 PHP-FPM 服务之前，测试您的配置至关重要：

```sh theme={null}
sudo nginx -t
sudo systemctl restart nginx
sudo systemctl restart php7.4-fpm
```

如果语法正常，您应该会看到一条指示 Success 的消息。

## 第 5 步：创建 PHP 信息文件进行测试

要测试 PHP 是否与 Nginx 一起正常工作，请在您的 Web 根目录中创建一个名为 info.php 的新文件：

```sh theme={null}
echo '<!--?php phpinfo(); ?-->' | sudo tee /var/www/html/info.php
```

现在在 Web 浏览器中导航到 http：//your\_server\_ip/info.php。如果配置正确，您应该会看到 PHP 信息页面。

## 常见问题疑难解答

如果您遇到任何问题，请检查 Nginx 和 PHP-FPM 的错误日志，它们通常位于 和 。根据错误消息调整配置通常可以解决大多数问题。`/var/log/nginx/error.log``/var/log/php7.4-fpm.log`

## 结论

使用 PHP-FPM 为动态网站设置 Nginx 乍一看似乎令人生畏，但遵循这些步骤应该有助于简化流程。此设置能够处理高流量负载，同时为运行 PHP 应用程序提供高效的环境。

# Nginx 中的高级 URL 重写和重定向

Nginx 是一个功能强大的 Web 服务器，还可以用作反向代理、负载均衡器和 HTTP 缓存。它的突出特点之一是能够有效地管理 URL 重写和重定向，这对于网站导航、SEO 优化和维护旧 URL 结构至关重要。

URL 重写涉及在服务器处理 URL 之前根据特定模式和条件修改请求的 URL。这可用于创建更简洁的 URL、强制规范化，甚至在不更改浏览器地址栏的情况下重新路由流量。另一方面，重定向会通知客户端请求的资源已移动到不同的 URL，这通常会导致地址栏更新以反映新位置。

## Nginx 基本改写规则

要开始在 Nginx 中重写 URL，您需要熟悉该指令。该指令位于 Nginx 配置文件的 server 块或 location 块中：`rewrite`

```nginx theme={null}
rewrite ^/oldpath$ /newpath last;
```

该模式是与确切请求 URI 匹配的正则表达式。替换路径是 Nginx 在内部重定向请求的位置。该标志将停止处理当前的 rewrite 指令集，并开始搜索与重写的 URI 匹配的新位置。`^/oldpath$``/oldpath``/newpath``last`

## 复杂的重写场景

对于更复杂的重写方案，您可能需要捕获请求的 URI 的一部分，并在重写的 URL 中重复使用这些内容：

```nginx theme={null}
rewrite ^/user/(.*)$ /profile?username=$1 last;
```

此规则捕获以下的任何文本，并将其作为查询参数附加到 。这是匹配任何字符序列的正则表达式。`/user/``/profile``(.*)`

## 使用 Return 进行重定向

Nginx 还可以使用 directive 处理重定向，当需要实际的 HTTP 重定向时，这比 rewrite 更有效：`return`

```nginx theme={null}
return 301 $scheme://$host/newpath;
```

上面的行将发出从当前页面的永久重定向（HTTP 状态代码 301）到 ，保持相同的方案和主机名。`/newpath`

## 高级重写技术

在某些情况下，您可能希望根据条件逻辑应用重写规则。Nginx 通过指令允许这样做：`if`

```nginx theme={null}
if ($http_user_agent ~* (googlebot|bingbot)) {
    rewrite ^/old-page$ /new-page-for-bots last;
}
```

此阻止检查用户代理是否属于 Googlebot 或 Bingbot，并仅针对这些爬网程序重写。`/old-page`

## 维护查询字符串

重写通常需要维护原始查询字符串。这可以通过附加或简单地使用 来实现，当存在查询参数时，它会有条件地预置 '？' ：`$query_string``$is_args$args`

```nginx theme={null}
rewrite ^/search$ /find$is_args$args last;
```

此规则会将 URL 从 转换为 。`/search?keyword=nginx``/find?keyword=nginx`

## 使用重写进行错误处理

Nginx 允许您定义自定义错误页面并在错误处理中使用重写：

```nginx theme={null}
error_page 404 /custom_404.html;
location = /custom_404.html {
    internal;
}

location /oldfolder {
    rewrite ^(/oldfolder/.*)$ /newfolder$1 permanent;
}
```

此配置将所有请求从 重定向到 ，保留任何后续路径，并定义自定义 404 错误页面。`/oldfolder``/newfolder`

## 调试重写规则的提示

调试重写规则可能具有挑战性。您可以使用 Nginx 的变量记录重写的 URL：`$request_uri`

```nginx theme={null}
rewrite_log on;
access_log /var/log/nginx/rewrite.log combined;
```

rewrite 日志将显示 Nginx 如何处理每个 rewrite 指令，这对于排查复杂配置非常有用。

# 使用基本身份验证保护 Nginx

保护 Web 应用程序至关重要，开发人员通常需要实施多层安全性来保护敏感数据。其中一层是在 Nginx 服务器上使用基本身份验证。此身份验证方法提供了一种简单的质询和响应机制，该机制要求用户在访问受保护资源之前提供用户名和密码。

Nginx 以其高性能和稳定性而闻名，广泛用于服务网页。但是，如果没有像基本身份验证这样的适当安全措施，您的 Nginx 服务器可能容易受到未经授权的访问。在本文中，我们将探讨如何使用基本身份验证保护您的 Nginx Web 服务器。

## 设置基本身份验证

配置过程包括使用 “htpasswd” 实用程序创建密码文件、更新 Nginx 配置文件以及重新加载 Nginx 服务以应用更改。

### 创建口令文件

第一步是创建一个密码文件，该文件将存储用户名和哈希密码。您可以使用 Apache HTTP Server 软件包中的 “htpasswd” 命令来生成此文件：

```sh theme={null}
htpasswd -c /etc/nginx/.htpasswd username
```

此命令在 '/etc/nginx/' 目录中创建一个名为 '.htpasswd' 的新文件（如果已经存在，则进行更新）。将 'username' 替换为所需的用户名。系统将提示您输入并确认用户的密码。

### 更新 Nginx 配置

接下来，将 Basic Authentication 集成到要保护的特定位置或服务器块的 Nginx 配置文件中：

```nginx theme={null}
location /protected/ {
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.htpasswd;
}
```

在此代码段中，“/protected/” 是要保护的资源的 URI。'auth\_basic' 指令激活身份验证，并将 “Restricted Access” 作为用户领域显示。'auth\_basic\_user\_file' 指令指向之前创建的 '.htpasswd' 文件的位置。

### 重新加载 Nginx

完成这些更改后，保存配置文件并重新加载 Nginx 服务以激活身份验证：

```sh theme={null}
sudo systemctl reload nginx
```

此命令会正常重新加载 Nginx，在不停机的情况下应用您的配置更改。

## 基本身份验证的注意事项

虽然基本身份验证增加了一层安全性，但应注意，除非使用 SSL/TLS 加密，否则凭据将以纯文本形式发送。强烈建议将 HTTPS 与基本身份验证一起实施，以确保数据隐私。

此外，使用 htpasswd 文件管理大量用户可能会变得很麻烦。对于更具可扩展性的解决方案，请考虑集成更复杂的身份验证系统。

## 综上所述

在 Nginx 中正确配置后，Basic Authentication 可以有效防止未经授权访问网站或应用程序的特定区域。这是一个简单的解决方案，适用于部署的简单性和速度至关重要的场景。

# 优化 TLS 以提高 Nginx 中的性能和安全性

传输层安全性 （TLS） 对于保护传输中的数据至关重要。在 Nginx 等 Web 服务器的上下文中，TLS 有助于保护数据在客户端和服务器之间移动时的完整性和机密性。但是，配置不当的 TLS 可能会导致性能瓶颈和安全漏洞。让我们深入了解如何在 Nginx 环境中优化 TLS 的性能和安全性。

![优化 TLS 在 Nginx 镜像中的性能和安全性](https://img.reintech.io/variants/03vaq6bjttcoez6syrpx2d7acrdc/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 优化 TLS 以提高性能

为了确保您的 Nginx 服务器在处理 TLS 加密流量时表现良好，您应该关注几个关键领域：

* \*\*会话恢复：\*\*此技术通过缓存会话 ID 或使用会话票证来避免完全握手重新协商的需要。要在 Nginx 中启用它：

```sh theme={null}
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets on;
```

* \*\*OCSP 装订：\*\*此方法有助于减少验证 SSL 证书的吊销状态所花费的时间。在 nginx 中启用 OCSP 装订：

```sh theme={null}
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
```

* \*\*选择正确的密码套件：\*\*使用现代密码套件，这些套件可提供强大的加密功能，而不会显著降低性能。最好使用性能更好的椭圆曲线加密 （ECC） 密码。

```sh theme={null}
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM';
ssl_prefer_server_ciphers on;
```

## 增强 TLS 安全性

为了防止潜在威胁，您还应该加强与 TLS 相关的安全设置：

* \*\*禁用旧协议：\*\*旧版本的 SSL/TLS 容易受到各种攻击。通过调整 ssl\_protocols 指令来完全禁用它们。
* \*\*证书透明度：\*\*利用支持证书透明度 （CT） 的 SSL 证书，这有助于检测错误颁发或恶意获取的 SSL 证书。
* \*\*HSTS （HTTP 严格传输安全）：\*\*此标头可确保浏览器仅使用 HTTPS 连接到您的服务器，从而防止降级攻击。

```sh theme={null}
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
```

* \*\*DH 参数：\*\*生成强 Diffie-Hellman 参数以防范加密攻击。

```sh theme={null}
openssl dhparam -out /etc/nginx/dhparam.pem 2048
ssl_dhparam /etc/nginx/dhparam.pem;
```

通过将这些性能优化与强大的安全措施相结合，您可以确保您的 Nginx 服务器为最终用户提供安全高效的体验。

## 超越配置：保持性能和安全性

虽然配置 Nginx 服务器是一个关键步骤，但持续维护同样重要。定期更新您的软件，监控异常流量模式，并进行安全审计以领先于漏洞。

# Nginx 模块开发开发者指南

Nginx 是一个功能强大的高性能 Web 服务器，也用作反向代理、HTTP 缓存和负载均衡器。其模块化架构允许开发人员通过自定义模块扩展其功能。本指南将引导您完成开发自己的 Nginx 模块的基本步骤。

![Nginx 模块开发开发人员指南镜像](https://img.reintech.io/variants/gtgz41bq6b942vnbadpcrdln00kl/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 了解基础知识

在深入研究模块开发之前，您应该对 C 编程和 Unix/Linux 系统调用有深入的了解。熟悉 Nginx 的核心架构和配置指令也很重要。

## 设置开发环境

首先，安装 Nginx 及其开发依赖项。在 Ubuntu 上，您可以使用以下命令：

```sh theme={null}
sudo apt-get update
sudo apt-get install nginx
sudo apt-get install libnginx-mod-*
```

壳

复制

这将安装 Nginx 和包存储库中当前可用的模块。也建议下载 Nginx 的源码供参考，可以从 Nginx 官网获取。

## 模块结构

一个 Nginx 模块通常由几个组件组成：

* \*\*配置脚本：\*\*定义 build 配置参数。
* \*\*源文件：\*\*包含模块的 logic。
* \*\*ngx\_module\_t 结构：\*\*向 Nginx 注册您的模块。

这个结构特别重要，因为它告诉 Nginx 你的模块的钩子和回调。`ngx_module_t`

## 编写您的第一个模块

你的模块的源代码通常至少包含两个文件：一个配置文件和一个包含你的逻辑的 .c 文件。下面是一个配置文件可能是什么样子的简单示例：

```sh theme={null}
ngx_addon_name=ngx_http_my_module
HTTP_MODULES="$HTTP_MODULES ngx_http_my_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_my_module.c"
```

壳

复制

.c 文件应包含必要的标头，定义模块的指令，并实现回调函数。下面是定义简单指令的示例：

```c theme={null}
static char *
ngx_http_my_module(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {
    // Your code here to handle the directive
    return NGX_CONF_OK;
}

static ngx_command_t ngx_http_my_module_commands[] = {
    { ngx_string("my_directive"),
      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LMT_CONF|NGX_CONF_TAKE1,
      ngx_http_my_module,
      NGX_HTTP_LOC_CONF_OFFSET,
      offsetof(ngx_http_my_module_conf_t, my_directive_value),
      NULL },
    ngx_null_command
};
```

C

复制

请注意，这是一个非常简化的示例。实际模块可能需要处理各种钩子，例如内容处理程序或过滤器。

## 编译你的模块

要使用 Nginx 编译模块，你需要在从源构建 Nginx 时将其添加为外部模块：

```sh theme={null}
./configure --add-module=/path/to/your/module
make
sudo make install
```

壳

复制

这将编译包含您的模块的 Nginx。确保编译过程中没有错误。

## 测试你的模块

安装后，修改 Nginx 配置文件以包含模块提供的指令并重新启动服务器：

```sh theme={null}
sudo service nginx restart
```

壳

复制

然后，通过观察模块的行为或检查服务器日志中是否存在与模块相关的任何错误或警告，进行测试以确保您的模块正常运行。

## 最佳实践和提示

* \*\*细致的内存管理：\*\*由于您使用的是 C 语言，因此请始终谨慎对待内存分配和释放。
* \*\*错误处理：\*\*在回调中实现强大的错误处理，以防止服务器崩溃。
* \*\*配置解析：\*\*为您的指令编写 clear 解析函数，以正确处理用户输入。
* \*\*线程安全：\*\*确保在多线程系统上运行时代码是线程安全的。
* \*\*社区准则：\*\*遵循 Nginx 社区建立的编码风格和准则，以确保一致性。

# 使用 Nginx 构建视频流服务器

视频流技术改变了我们消费媒体的方式，随着 YouTube、Netflix 和 Twitch 等平台的兴起，它没有放缓的迹象。构建视频流服务器乍一看似乎令人生畏，但有了正确的工具和知识，这对任何软件开发人员来说都是一项可以完成的任务。在本文中，我们将探讨如何使用 Nginx 设置视频流服务器，Nginx 是一种功能强大、高性能的 Web 服务器，以其稳定性和简单的配置而闻名。

![使用 Nginx 镜像构建视频流服务器](https://img.reintech.io/variants/20jcq19qozv2tlx8w3aobtard3ca/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 了解 Nginx 和 RTMP

Nginx 是一个开源的 Web 服务器，也可以用作反向代理、邮件代理和 HTTP 缓存。对于视频流，Nginx 与 RTMP（实时消息协议）模块协同工作，该模块专为在服务器和基于 Flash 的客户端之间实现音频、视频和数据的性能传输而设计。RTMP 模块允许 Nginx 处理直播和视频点播 （VOD）。

## 设置您的服务器

要开始使用 Nginx 设置视频流服务器，您需要一个基于 Linux 的服务器环境。您可以根据您的要求使用虚拟专用服务器 （VPS） 或专用托管解决方案。

### 使用 RTMP 模块安装 Nginx

```sh theme={null}
sudo apt-get update
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev
wget http://nginx.org/download/nginx-1.xx.x.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip master.zip
tar -zxvf nginx-1.xx.x.tar.gz
 cd nginx-1.xx.x
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
make
sudo make install
```

壳

复制

这将从包含 RTMP 模块的源代码编译 Nginx。将 “nginx-1.xx.x” 替换为可用的最新版本的 Nginx。

### 配置 Nginx 进行流式处理

安装 Nginx 后，您需要对其进行配置以进行视频流。

```sh theme={null}
sudo nano /usr/local/nginx/conf/nginx.conf
```

壳

复制

在文件中添加以下配置：

```sh theme={null}
rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
        }
    }
}
```

壳

复制

此基本配置设置一个 RTMP 服务器，使用名为 'live' 的应用程序侦听端口 1935，该应用程序支持流传输而不进行录制。

## 流式处理内容

要将内容流式传输到您的服务器，请使用 OBS Studio 等广播软件。通过将 URL 设置为 ，将流密钥设置为您选择的名称，将 OBS 中的流设置配置为指向您的 Nginx 服务器。`rtmp://{YOUR_SERVER_IP}/live`

## 观看直播

要在客户端设备上观看流，您可以使用支持 RTMP 或 HLS（HTTP Live Streaming）的媒体播放器。对于 HLS 支持，您的 Nginx 设置中需要其他配置。

## 维护和扩展

维护您的视频流服务器涉及定期更新和监控性能。随着受众的增长，扩展可能需要负载平衡和额外的服务器。在这个阶段，[聘请 Nginx 专家](https://reintech.io/hire-nginx-experts)可能是有益的，他们可以帮助您有效地优化和扩展基础设施。

## 结论

使用 Nginx 构建视频流服务器需要了解如何从源编译软件、为 RTMP 或 HLS 等流协议配置 Web 服务器，以及管理实时内容分发。虽然本概述涵盖了基础知识，但每个步骤都可能涉及根据特定使用案例或性能需求进行更详细的调整。

# 将 Nginx 与内容分发网络 （CDN） 集成

Nginx 是一种高性能 Web 服务器和反向代理，由于其可扩展性、可靠性和资源效率而获得广泛采用。内容交付网络 （CDN） 是分布式服务器网络，它们协同工作，通过使 Internet 内容更接近用户来提供 Internet 内容的快速交付。将 Nginx 与 CDN 集成可以显著提高网站性能、管理流量尖峰并增强用户体验。

![集成 Nginx 与内容分发网络 （CDN） 镜像](https://img.reintech.io/variants/erz4gaow5xo4h496zso7jl2sn0z5/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 将 Nginx 与 CDN 集成的好处

* \*\*改进的加载时间：\*\*CDN 可以在边缘服务器上缓存静态内容，从而加快交付速度并减少源服务器的负载。
* \*\*可扩展性：\*\*将流量卸载到 CDN 有助于在流量激增期间无缝扩展应用程序。
* \*\*增强的安全性：\*\*CDN 通常提供额外的安全功能，例如 DDoS 保护，当与 Nginx 自己的安全机制配合使用时，可以增强您的应用程序免受攻击的能力。

## 如何将 Nginx 与 CDN 集成

1. \*\*选择 CDN 提供商：\*\*选择在地理覆盖范围、功能和成本方面最适合您需求的 CDN。
2. \*\*配置 DNS：\*\*更新您的 DNS 记录以将您的域指向 CDN 提供商。这通常涉及更改 CNAME 记录。
3. \*\*设置 CDN 设置：\*\*将您的 CDN 配置为从 Nginx 服务器获取内容，该服务器将充当源服务器。
4. \*\*配置 Nginx：\*\*更新您的 Nginx 配置以正确处理标头并针对 CDN 缓存进行优化。

### CDN 集成的 Nginx 配置

要优化 Nginx 的 CDN 缓存，您应该配置 cache-control 标头。以下是如何调整 Nginx 配置的示例：

```nginx theme={null}
# Set up caching parameters
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}
```

nginx

复制

此配置为常见的静态文件类型设置较长的缓存生命周期，并发送指示 CDN 缓存这些资源的相应标头。

### 常见问题疑难解答

* \*\*缓存失效：\*\*确保您有从 CDN 中清除过时内容的策略。
* \*\*SSL/TLS 配置：\*\*如果您的网站通过 HTTPS 提供服务，请确保 CDN 可以正确处理 SSL/TLS 证书。
* \*\*源站负载：\*\*监控 Nginx 服务器负载以根据需要调整缓存设置。

# 为高流量网站优化 nginx

在为高流量网站优化 Nginx 时，了解关键配置指令及其对性能的影响至关重要。Nginx 是一款功能强大的开源软件，用于 Web 服务、反向代理、缓存、负载平衡等。通过适当的调整，您可以显著提高高流量网站的性能。

![针对高流量网站优化 Nginx 图像](https://img.reintech.io/variants/h30oxfv5l4cbbq59lbe9c7df939s/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 关键性能优化技术

要优化您的 Nginx 服务器，请考虑以下技术：

* \*\*工作进程和连接：\*\*调整工作进程和连接的数量可以最大限度地提高 CPU 利用率。将 'worker\_processes' 指令设置为 CPU 内核数，将 'worker\_connections' 设置为每个 worker 可以处理的连接数。
* **使用 Keepalive：**'keepalive\_timeout' 指令有助于保持客户端连接打开，以便将其重新用于多个请求，从而减少开销。
* \*\*缓存：\*\*使用 'proxy\_cache\_path' 和相关指令实施缓存策略，以快速提供经常访问的资源。
* \*\*Gzip 压缩：\*\*使用 'gzip' 指令启用 Gzip 压缩，以减少在服务器和客户端之间传输的数据大小。
* \*\*缓冲区大小：\*\*优化缓冲区大小，包括“client\_body\_buffer\_size”和“client\_header\_buffer\_size”，以高效处理客户端请求，而无需临时写入文件。
* \*\*静态文件处理：\*\*使用 'sendfile'、'tcp\_nopush' 和 'tcp\_nodelay' 指令来优化静态文件交付。

## 调优 nginx 配置指令

最具影响力的配置调整包括：

```sh theme={null}
# Set the number of worker processes
worker_processes auto;

# Max number of open files
worker_rlimit_nofile 100000;

# Number of connections per worker
worker_connections 4000;

# Keepalive settingskeepalive_timeout 30;
```

壳

复制

此代码段设置了基本功能：匹配 CPU 内核的工作进程、增加打开文件限制、每个工作线程的连接数以及调整 keepalive 设置。

## 缓存策略

缓存可以大大减少加载时间。请考虑设置适合您内容的缓存策略：

```sh theme={null}
# Define a cache path
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
```

壳

复制

这将在指定目录中设置一个缓存，其中包含 size 和 inactive time 等参数。

## Gzip 压缩

Gzip 压缩可最大限度地减少传输的数据大小。以下是启用它的方法：

```sh theme={null}
# Enable Gzip
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
```

壳

复制

上述设置为各种内容类型激活 Gzip，但 IE6 等传统浏览器除外。

## 高效处理静态内容

要优化静态内容交付，请使用：

```sh theme={null}
# Static file handling optimizations
sendfile on;
tcp_nopush on;
tcp_nodelay on;
```

壳

复制

此配置通过利用 TCP 堆栈优化来确保有效处理静态文件。

# 使用 Nginx 重写规则改进 SEO

对于希望增强网站 SEO 的软件开发人员来说，了解和利用 Nginx 重写规则至关重要。Nginx 是一个功能强大的 Web 服务器，可用于提高网站性能和更有效地管理重定向，这两者都对于搜索引擎优化至关重要。

![使用 Nginx Rewrite Rules 改进 SEO image](https://img.reintech.io/variants/fym4h87z6v5sghtpdno9pjnh9gho/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

### 为什么重写规则对 SEO 很重要

像 Google 这样的搜索引擎优先考虑用户体验，其中一部分涉及确保用户快速被引导至正确的页面。如果您的网站发生了影响其 URL 结构的更改，请使用 Nginx 的重写规则实施适当的重定向，以确保用户和搜索引擎被定向到正确的内容，从而保持您网站的 SEO 排名。

### 实施 SEO 友好的重定向

重写规则的一个常见用途是创建对 SEO 友好的 URL。没有参数且人类可读的干净 URL 可以显着提高您网站的可用性和搜索排名。

```sh theme={null}
# Redirect from old page to new page
rewrite ^/oldpage.html$ /newpage.html permanent;
```

壳

复制

这条规则告诉 Nginx 使用 HTTP 301 状态码将 'oldpage.html' 的请求永久重定向到 'newpage.html'，该状态码通知搜索引擎该页面已永久移动。

### 处理 www 和非 www URL

使用 URL 的 “www” 或非 “www” 版本的一致性对于避免重复内容问题非常重要。以下重写规则将所有 'www' 请求重定向到非 'www' 域：

```sh theme={null}
# Redirect www to non-www
server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}
```

壳

复制

此规则可确保搜索引擎仅将您网站的一个版本编入索引，从而防止重复内容处罚。

### 强制使用 HTTPS

使用 SSL 保护您的网站并确保所有流量都使用 HTTPS 是另一个排名因素。您可以使用以下 Nginx 重写规则强制使用 HTTPS：

```sh theme={null}
# Redirect HTTP to HTTPS
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}
```

壳

复制

此配置侦听 HTTP 请求并将其重定向到您站点的安全 HTTPS 版本。

### 清理 URL

干净的 URL 不仅看起来更好，而且在搜索结果中也表现得更好。例如，您可能希望删除文件扩展名或尾部斜杠：

```sh theme={null}
# Remove .html extension
rewrite ^/(.*)\.html$ /$1 permanent;
```

壳

复制

上面的代码段将以有利于 SEO 的方式从你的 URL 中去除 '.html'。

### 避免常见错误

在实施重写规则时，请小心不要创建可能会使浏览器和搜索引擎爬网程序混淆的循环或冲突规则。在实时部署配置之前，请始终在受控环境中测试您的配置。

如果管理 Nginx 配置似乎令人生畏，或者您计划进行复杂的自定义，那么聘请对 Web 服务器及其如何影响 SEO 有深入了解的 [Nginx 专家](https://reintech.io/hire-nginx-experts)可能会有所帮助。

# Nginx 访问控制技术

在 Web 服务器管理方面，控制对内容的访问对于安全性和性能至关重要。Nginx 是一款功能强大的高性能 Web 服务器，提供了多种技术来管理对 Web 资源的访问。本文深入探讨了开发人员可以用来保护其 Nginx 服务器的几种策略。

![Nginx Access Control Techniques 镜像](https://img.reintech.io/variants/5xs6nargv6zkshbubt94zutkua06/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

### 基于 IP 的访问控制

控制对 Web 资源的访问的最直接方法是通过基于 IP 的控制。Nginx 允许您根据 IP 地址或范围拒绝或允许流量。

```sh theme={null}
location / {
    allow 192.168.1.0/24;
    deny all;
}
```

壳

复制

此配置代码段将允许 192.168.1.0/24 子网内的任何人访问，同时拒绝所有其他流量。

### 密码保护资源

Nginx 还可以通过基本身份验证将指令与文件结合使用来保护资源。`auth_basic``htpasswd`

```sh theme={null}
location /secure/ {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
}
```

壳

复制

这需要 .htpasswd 文件中的有效用户名和密码才能访问目录下的任何内容。`/secure/`

### 限制请求方法

有时，您可能希望限制可用于服务器的 HTTP 方法的类型。例如，如果您只想允许 GET 和 HEAD 请求，则可以使用：

```sh theme={null}
if ($request_method !~ ^(GET|HEAD)$ ) {
    return 405;
}
```

壳

复制

### 使用 GeoIP 进行地理访问控制

如果您需要更精细的控制，Nginx 支持使用 GeoIP 模块进行地理访问控制。使用 GeoIP，您可以根据客户所在的国家 / 地区允许或拒绝访问。

```sh theme={null}
geo $ban_country {
    default no;
    # Countries to ban
    US yes;
}

server {
    if ($ban_country = yes) {
        return 403;
    }
}
```

壳

复制

这将拒绝来自美国的所有用户的访问。

### 保护 SSL/TLS

要确保仅与您的服务器建立安全连接，您可以强制执行 SSL/TLS：

```sh theme={null}
server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    # SSL configuration ...
}
```

壳

复制

### 速率限制

速率限制对于防范某些类型的攻击（如暴力攻击）至关重要。您可以定义用户在给定时间范围内可以发出的请求数的限制。

```sh theme={null}
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/m;

server {
    location /login/ {
        limit_req zone=mylimit;
        # login page specifics
    }
}
```

壳

复制

### 结论

这些只是如何使用 Nginx 控制访问的几个示例。实施这些技术将显著增强应用程序的安全状况。但是，设置和配置这些控件通常需要一定程度的专业知识。

如果您希望使用 Nginx 保护您的 Web 应用程序，但需要专业技能，请考虑[聘请 Nginx 专家](https://reintech.io/hire-nginx-experts)。技术娴熟的专业人员可以帮助您定制 Nginx 设置，以满足您的业务特定需求，同时确保安全性和效率方面的最佳实践。

# Nginx 和 Varnish：组合缓存层以获得最大速度

速度是用户体验和 SEO 排名的关键组成部分，这使得网站性能优化成为开发人员的首要任务。这个领域的两个强大工具是 NGINX 和 Varnish，每个工具都有自己的缓存方法。NGINX 是一种 Web 服务器，以其高性能和反向代理功能（包括高效的缓存机制）而闻名。另一方面，Varnish 是一个专用的 HTTP 加速器，专为内容繁重的动态网站而设计，通过在内存中缓存内容来加快交付速度。

![Nginx 和 Varnish：组合缓存层以获得最高速度图像](https://img.reintech.io/variants/5hoafycqbu807xcudczmtkhlzqyv/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 结合 NGINX 和 Varnish

当 NGINX 和 Varnish 结合使用时，可以创建一个强大的缓存解决方案，利用两者的优势来提供最大的速度和效率。NGINX 可以有效地处理静态文件和 SSL/TLS 终止，而 Varnish 擅长缓存动态内容。通过将 Varnish 放置在客户端和 NGINX 之间，您可以从 NGINX 卸载大部分动态内容缓存工作负载。

## 配置概述

要使用 NGINX 和 Varnish 实现双缓存策略，您需要正确配置这两个系统。一般的想法是让客户端连接到 Varnish，它监听标准 HTTP 和 HTTPS 端口（80 和 443），然后让 Varnish 将无法满足的请求从缓存传递到另一个端口上的 NGINX。

```sh theme={null}
# Configure NGINX to listen on an alternative port (e.g., 8080)
server {
    listen 8080;
    server_name your_domain.com;

    location / {
        # Configuration for your application
    }
}
```

壳

复制

接下来，将 Varnish 配置为侦听端口 80，并将请求转发到端口 8080 上的 NGINX（如果它们未缓存）：

```sh theme={null}
# Configure Varnish backend pointing to NGINX
backend default {
    .host = "127.0.0.1";
    .port = "8080";
}
```

壳

复制

## 高级缓存策略

要对缓存的内容进行精细控制，您可以在 Varnish 中使用 VCL （Varnish Configuration Language），并利用 NGINX 广泛的指令集进行缓存管理。以下示例说明了如何从 Varnish 中缓存某些路径或 Cookie：

```vcl theme={null}
sub vcl_recv {
    if (req.url ~ "^/admin" || req.http.Cookie ~ "sessionid") {
        return(pass);
    }
}
```

VCL

复制

在 NGINX 中，您可以根据某些条件设置特定的缓存标头或绕过缓存：

```nginx theme={null}
location / {
    add_header X-Cache-Status $upstream_cache_status;

    if ($request_method = POST) {
        set $skip_cache 1;
    }

    proxy_cache_bypass $skip_cache;
}
```

nginx

复制

## 维护高可用性

为了确保高可用性，您可以在负载均衡器后面设置 Varnish 和 NGINX 的多个实例。此设置允许您处理更多流量，并在其中一个实例发生故障时提供冗余。

## 监控性能

监控 NGINX 和 Varnish 服务器的性能至关重要。Nginx 的 stub\_status 模块或 Varnish 的 varnishstat 等工具可以提供有价值的指标，帮助您了解缓存命中率并相应地优化配置。

## 结论

通过将 NGINX 的功能与 Varnish 的专业缓存能力相结合，开发人员可以为 Web 应用程序构建高度优化的交付系统。请记住，虽然每个工具本身都很强大，但它们的战略组合真正释放了它们的潜力，从而显着提高了网站速度。与任何复杂系统一样，建议聘请具有配置和维护这些技术经验的 [javascript react nginx 开发人员](https://reintech.io/hire-javascript-react-nginx-developers)以获得最佳结果。

# 使用 Nginx 缓解 DDoS 攻击

分布式拒绝服务 （DDoS） 攻击可能会削弱网络、服务或网站，从而导致大量停机时间和潜在的收入损失。Nginx 是一种高性能 Web 服务器，可以配置为反向代理来缓解此类攻击。通过充当服务器与其接收的流量之间的保护屏障，Nginx 可以有效地管理和控制请求流，以防止服务中断。

![使用 Nginx 缓解 DDoS 攻击 image](https://img.reintech.io/variants/omuwlai4c1g3aq0p5w41hprc5oie/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## Nginx 抵御 DDoS 的关键配置提示

实施正确的配置设置对于使用 Nginx 防御 DDoS 攻击至关重要。以下是一些策略：

* \*\*速率限制：\*\*通过配置 'limit\_req' 模块来控制客户端可以向服务器发出请求的速率。这有助于通过限制用户访问终端节点的频率来防止滥用。
* \*\*连接限制：\*\*使用 'limit\_conn' 模块来限制每个客户端允许的并发连接数。这可以防止单个客户端占用所有服务器资源。
* \*\*缓冲区大小调整：\*\*配置缓冲区大小以防止缓冲区溢出攻击。适当大小的缓冲区可确保 Nginx 能够处理突然激增的流量而不会不堪重负。
* \*\*超时：\*\*设置适当的客户端和保持活动超时可以删除非活动连接并释放服务器资源。
* \*\*静态内容缓存：\*\*缓存静态资源以减少攻击期间 Web 应用程序服务器的负载。

### 在 Nginx 中实现限流

要设置速率限制，您可以在 Nginx 配置文件的 'http' 上下文中添加指令：

```sh theme={null}
# Define a shared memory zone for storing state
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;

# Apply to a location
location / {
    limit_req zone=mylimit burst=5;
}
```

壳

复制

此配置允许每秒 1 个请求，在返回 503 错误之前，最多突增 5 个请求。

### 限制每个 IP 地址的连接数

'limit\_conn' 指令与共享内存区结合使用，可用于限制连接：

```sh theme={null}
# Define a shared memory zone
limit_conn_zone $binary_remote_addr zone=addr:10m;

# Apply to a location
location / {
    limit_conn addr 10;
}
```

壳

复制

这会将每个客户端 IP 限制为最多 10 个并发连接。

### 缓存静态内容

使用 Nginx 缓存静态内容非常简单。以下代码片段为静态资源设置缓存：

```sh theme={null}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}
```

壳

复制

这会将指定的文件类型缓存 30 天，从而减少高流量期间的服务器负载。

## 高级缓解技术

除了基本配置之外，Nginx 还提供了更高级的缓解选项：

* \*\*SSL/TLS 终止：\*\*Nginx 可以处理 SSL/TLS 终止，以从后端服务器卸载加密任务，这是必不可少的，因为 SSL/TLS 握手攻击在 DDoS 场景中很常见。
* \*\*HTTP/2 支持：\*\*与传统 HTTP 相比，利用 HTTP/2 提高性能和安全性，使您的应用程序更能抵御利用 HTTP/1.x 弱点的某些类型的 DDoS 攻击。

如果您的团队出于安全目的需要配置和管理 Nginx 的专业知识，请考虑选择[聘请 nginx 专家](https://reintech.io/hire-nginx-experts)。凭借对 Nginx 内部和安全最佳实践的深刻理解，他们可以帮助您加强对复杂 DDoS 攻击的防御。

## 综上所述

如果配置得当，Nginx 是缓解 DDoS 攻击的有效工具。通过利用速率限制、连接限制和缓存策略，您可以显著提高应用程序对这些中断的弹性。请记住，虽然这些措施很强大，但要保持整体安全态势，需要一种全面的方法，包括定期更新、监控和事件响应计划。

# 了解和实施 Nginx 缓存策略

对于寻求优化 Web 应用程序的软件开发人员来说，了解和实施有效的缓存策略至关重要。Nginx 是一种高性能 Web 服务器，提供强大的缓存机制，可以显着提高网站的速度和效率。本文深入探讨了 Nginx 缓存的复杂性，并为开发人员提供了可操作的指导，以充分利用其潜力。

![了解和实施 Nginx 缓存策略 image](https://img.reintech.io/variants/fe4q72485zqkszx3qg628xn7qisf/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 为什么缓存是必不可少的

缓存是一种将经常访问的内容存储在内存或磁盘上的方法，从而可以更快地检索后续请求。通过这样做，它减少了 Web 服务器和后端基础设施的负载，从而缩短了响应时间并提供了更好的用户体验。

## Nginx 中的缓存类型

Nginx 提供两种主要类型的缓存：**微缓存**，涉及在很短的时间内缓存内容，以及**整页缓存**，其中整个页面存储更长的时间。每种类型都适用于不同的场景，并带有自己的一组配置指令。

## 配置 Nginx 进行缓存

要配置 Nginx 进行缓存，您需要在配置文件的块中设置一个缓存区域：`http`

proxy\_cache\_path /path/to/cache levels=1:2 keys\_zone=my\_cache:10m max\_size=1g inactive=60m use\_temp\_path=off;

该指令指定缓存的存储位置、结构、大小和缓存变为非活动状态之前的持续时间。

接下来，在 or 块中，您可以为特定响应启用缓存：`server``location`

```sh theme={null}
location / {
    proxy_cache my_cache;
    proxy_pass http://my_upstream;
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
}
```

壳

复制

此代码段支持将成功响应 （HTTP 200） 和重定向 （HTTP 302） 缓存 10 分钟，同时将 404 错误缓存 1 分钟。

## 微调缓存设置

要进一步优化缓存策略，您可以根据请求参数使用条件缓存，使用指令自定义缓存键，或使用指令绕过缓存。了解如何操作这些设置将使您的策略更加动态和响应用户交互。`proxy_cache_key``proxy_cache_bypass`

## 清除缓存内容

清除过时的内容与存储新内容同样重要。Nginx 本身不支持缓存清除;但是，可以使用 *Nginx Cache Purge* 等第三方模块。或者，设置适当的过期时间通常足以实现自动内容周转。

## 使用缓存策略进行创新

希望在标准 Nginx 缓存配置之外进行创新的开发人员可能会探索边缘端包含 （ESI） 或集成提供更精细控制的第三方应用程序等选项。对于那些需要该领域专业知识的人来说，[聘请具有 Nginx 经验的远程 React 开发人员](https://reintech.io/hire-remote-react-developers-nginx)可能会有所帮助。

## 结论

如果实施得当，Nginx 缓存是一个强大的工具。它需要对应用程序的需求和 Nginx 提供的功能有细致的了解。通过正确的方法，开发人员可以大大提高其 Web 应用程序的性能。

# 排查常见的 Nginx 错误

作为一款健壮、高性能的 Web 服务器，Nginx 因其可扩展性和低资源消耗而被广泛使用。但是，与任何复杂系统一样，它有时可能会出现可能难以排除故障的错误。在本文中，我们将介绍一些最常见的 Nginx 错误、它们的原因和解决方案，以帮助您快速回到正轨。

![常见 Nginx 错误故障排除图像](https://img.reintech.io/variants/mnogbtez5edjl22zk4owuafi0p2g/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

### 错误：502 Bad Gateway

当 Nginx 无法从上游服务器收到有效响应时，通常会出现 '502 Bad Gateway' 错误。发生这种情况的原因有很多，例如上游服务器宕机或响应速度太慢。

```sh theme={null}
location / {
    proxy_pass http://upstream_server;
}
```

壳

复制

要进行故障排除，请检查上游服务器是否正在运行并侦听正确的端口。此外，请查看 Nginx 和上游服务器错误日志以获得更多见解。

### 错误：504 网关超时

当 Nginx 能够与上游服务器通信，但未及时获得响应时，会出现此错误。要解决此问题，请执行以下操作：

```sh theme={null}
proxy_read_timeout 300s;
proxy_connect_timeout 300s;
```

壳

复制

增加 Nginx 配置中的超时值，并确保 Nginx 后面的应用程序运行良好。

### 错误：403 禁止

“403 Forbidden” 错误表明权限存在问题。服务器由于缺少访问权限而拒绝响应请求。

```sh theme={null}
location / {
    try_files $uri $uri/ =404;
}
```

壳

复制

检查文件和目录权限，并确保 Nginx 有权提供这些文件。

### 错误：404 未找到

此错误意味着在服务器上找不到客户端请求的文件或页面。这可能是由于配置不正确或文件丢失造成的。

```sh theme={null}
location / {
    root /var/www/html;
    index index.html index.htm;
}
```

壳

复制

验证 root 指令是否指向存储文件的正确目录。

### 错误：500 内部服务器错误

此一般错误表示服务器的配置存在问题。检查您的错误日志以查找有关导致错误的原因的具体信息。

### SSL 错误

不正确的 SSL 证书安装可能会导致各种错误，例如 “SSL 握手失败” 或 “SSL 证书错误”。确保您的 SSL 证书已正确安装并在 Nginx 配置中引用：

```sh theme={null}
server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
}
```

壳

复制

## 结论

Nginx 功能强大，但并非万无一失。熟悉其常见错误并知道如何解决它们可以为您节省大量时间和精力。定期查看错误日志，在应用配置之前对其进行测试，并维护后端应用程序以获得最佳性能。如果您发现自己需要专业知识，请随时联系并[聘请 javascript react nginx 开发人员](https://reintech.io/hire-javascript-react-nginx-developers)，他们可以帮助您满足您的特定需求。

# Nginx 限速：保护您的 API 免受滥用

速率限制是一项基本的安全功能，可保护您的 API 免受滥用，例如暴力攻击或 DDoS（分布式拒绝服务）攻击。通过控制用户在特定时间范围内可以发出的请求数，可以防止服务器一次被太多请求淹没。Nginx 是一款流行的高性能 Web 服务器，内置了多种模块，帮助您有效实现限流。

![Nginx 限速：保护您的 API 免受滥用镜像](https://img.reintech.io/variants/dg65mi7r1l5zp5dc3wbd2bsnwos2/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

### 在 nginx 中设置限流

要在 Nginx 中设置速率限制，您需要使用 and 指令。这些是 的一部分，可能需要在 Nginx 编译期间使用配置标志启用。`limit_req_zone``limit_req``ngx_http_limit_req_module``--with-http_limit_req_module`

```sh theme={null}
# Define a rate limiting zone in http context
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
```

壳

复制

此示例创建一个名为 “mylimit” 的速率限制区域，其中包含一个 10MB 的存储区域，用于维护来自同一 IP 地址的请求之间的状态，并将请求限制为每秒 10 个。

```sh theme={null}
# Apply the rate limiting in server or location context
location /api/ {
    limit_req zone=mylimit burst=20;
}
```

壳

复制

该参数允许您定义在请求开始延迟或拒绝之前可以发出多少个请求，这些请求会超过该速率。`burst`

### 处理超额请求

您可以使用以下选项控制当请求速率超过您定义的限制时会发生什么：`nodelay`

```sh theme={null}
# Without delay
limit_req zone=mylimit burst=20 nodelay;
```

壳

复制

如果使用，则会立即处理超出的请求，直到达到突增大小，之后这些请求将被拒绝。`nodelay`

### 优化速率限制

调整速率限制需要考虑 API 的使用模式和负载容量。从保守的限制开始，然后根据监控和性能指标进行调整。使用 ApacheBench （ab） 或 JMeter 等工具进行测试可以帮助模拟高流量并找到合适的设置。

### 保护更复杂的 API

在需要更精细控制的情况下，例如针对不同类型的用户或终端节点的不同速率，请考虑使用变量来区分请求类型：`$limit_key`

```sh theme={null}
# Differentiating users by API key
map $http_api_key $limit_key {
    default $binary_remote_addr;
    # API keys with higher limits
    'key1' 1.2.3.4;
    'key2' 5.6.7.8;
}

# Apply differentiated limits
limit_req_zone $limit_key zone=mylimit:10m rate=5r/s;
```

壳

复制

此代码段使用数据块设置不同的键，以便在更复杂的场景中区分请求限制。`map`

### 结论

Nginx 的限流功能是保护 API 免遭滥用的强大工具。请务必正确配置它，以确保合法用户不会受到不利影响，同时仍能防止恶意行为者造成伤害。

如果您正在寻找可以实施高级 Nginx 配置或将 Nginx 与其他技术集成的熟练专业人员，您可能需要[聘请 JavaScript React Nginx 开发人员](https://reintech.io/hire-javascript-react-nginx-developers)。凭借 JavaScript、React 和 Nginx 方面的专业知识，这些开发人员可以帮助您创建强大且安全的 Web 应用程序，这些应用程序可在高负载下高效扩展。

# 使用 Nginx 服务器块管理多域设置

在管理 Web 服务时，在单个服务器上托管多个域或子域的情况并不少见。Nginx 是一种功能强大且高效的 Web 服务器，它提供了一个称为服务器块（类似于 Apache 中的虚拟主机）的功能，允许您在一台机器上运行多个网站，而不会出现任何性能问题。了解如何配置这些块对于希望有效管理多域设置的开发人员来说至关重要。

![使用 Nginx 服务器块管理多域设置 image](https://img.reintech.io/variants/manu8tbk8qse6n024m8gndgcqldt/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 设置 Nginx 服务器块

首先，如果您的服务器上尚未安装 Nginx，请在您的服务器上安装 Nginx。安装后，主配置文件 就是神奇的地方。但是，对于服务器块，我们专注于 and 目录。`/etc/nginx/nginx.conf``/etc/nginx/sites-available/``/etc/nginx/sites-enabled/`

下面是一个基本演练：

1. 为目录中的每个域创建一个服务器块文件。`/etc/nginx/sites-available/`
2. 在目录中创建指向该文件的符号链接以启用它。`/etc/nginx/sites-enabled/`
3. 测试 Nginx 配置是否存在语法错误。
4. 重新加载或重新启动 Nginx 以应用更改。

### 服务器块配置示例

典型的服务器块如下所示：

```sh theme={null}
server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
```

壳

复制

此块告诉 Nginx 侦听端口 80 上对 'example.com' 和 '[www.example.com](http://www.example.com)' 的请求，从指定的根目录提供文件。

## 管理多个域的提示

* \*\*使用描述性文件名：\*\*以各自的域命名服务器块文件，以保持它们的井井有条。
* \*\*自动创建符号链接：\*\*一个简单的 shell 脚本可以自动执行从 sites-available 到 sites-enabled 的链接过程。
* \*\*使用包括：\*\*对于跨域共享的常见配置，请使用该指令在您的配置中维护单一事实来源。`include`
* \*\*区分日志：\*\*为每个域配置单独的访问和错误日志，以简化故障排除和监控。
* \*\*保护您的域：\*\*使用 Let's Encrypt 实施 SSL/TLS 证书，并在您的服务器块中配置从 HTTP 到 HTTPS 的重定向。

## 常见问题疑难解答

如果遇到问题，请首先使用。查看专门与相关域相关的错误日志。请特别注意权限问题，这是设置新服务器块时的常见绊脚石。`nginx -t`

## 聘请专业帮助

有时，管理复杂的 Nginx 配置需要一般 Web 开发技能以外的专业知识。如果您需要专业帮助，请考虑联系专业人士，他们可以确保您的设置得到优化和安全。例如，如果您想[聘请 Nginx 专家](https://reintech.io/hire-nginx-experts)，与经验丰富的专业人士合作可以节省您的时间并防止代价高昂的错误。

# Nginx 和 Git：自动化部署工作流程

对于软件开发人员来说，部署过程可能是一项重复且耗时的任务。自动化此工作流程不仅可以节省时间，还可以减少人为错误的机会。利用 Nginx 和 Git 等工具可以显著简化您的部署流程，确保从开发到生产的平稳可靠过渡。

![Nginx 和 Git：自动化部署工作流图像](https://img.reintech.io/variants/47zdwtaa864p476vta0kzrkw5cad/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

### 了解 Nginx 和 Git

**Nginx** 是一种高性能 Web 服务器，也用作反向代理、负载均衡器和 HTTP 缓存。它以其稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。另一方面，**Git** 是一个分布式版本控制系统，旨在快速高效地处理从小型到超大型项目的所有内容。

### 使用 Git Hook 自动部署

Git 钩子是每次 Git 存储库中发生特定事件时自动运行的脚本。Git 钩子的一个常见用例是自动执行代码检查、测试或部署等任务。

要使用 Git 钩子自动化 Nginx 部署：

1. 首先，在服务器上创建一个裸 Git 仓库，您将在其中推送代码：

```sh theme={null}
git init --bare ~/example.git
```

壳

复制

3. 在新仓库的 hooks 子目录中创建一个 post-receive 钩子：

```sh theme={null}
nano ~/example.git/hooks/post-receive
```

壳

复制

5. 在 post-receive 钩子中，添加 shell 命令以将代码检出到你的 web 目录：

```sh theme={null}
#!/bin/sh
GIT_WORK_TREE=/var/www/example.com git checkout -f
```

壳

复制

7. 使钩子脚本可执行：

```sh theme={null}
chmod +x ~/example.git/hooks/post-receive
```

壳

复制

9. 现在，当你推送到这个仓库时，post-receive 钩子会将最新的代码部署到你的 Web 服务器目录。

### 用于部署的 Nginx 配置

准备好 Git 钩子后，是时候配置 Nginx 来为您的应用程序提供服务了。下面是一个简单的 Nginx 服务器块配置示例：

```nginx theme={null}
server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/example.com;
        index index.html index.htm;
        try_files $uri $uri/ =404;
    }

    # Other configurations...
}
```

nginx

复制

此配置指示 Nginx 侦听域 example.com 端口 80 上的传入连接，并提供位于 /var/www/example.com 中的文件。

### 高级部署策略的提示

* \*\*零停机时间部署：\*\*使用 Nginx 的功能在不断开连接的情况下重新加载配置，以确保在部署新版本的应用程序时实现零停机时间。
* \*\*蓝绿部署：\*\*设置两个相同的生产环境（蓝色和绿色）。在任何时候，其中一个都是实时的。当您需要部署新版本时，请在非实时环境中执行此操作，然后切换流量。
* \*\*Canary 版本：\*\*在将更改提供给所有人之前，逐步将更改部署到用户子集。这可以使用 Nginx 的负载均衡功能来实现。

如果您希望引入专业知识来优化您的 Nginx 设置或实施高级部署策略，请考虑[选择聘请 Nginx 专家](https://reintech.io/hire-nginx-experts)。

举报过时内容

# 使用 Nginx 进行 A/B 测试和金丝雀发布

A/B 测试和 Canary 发布是软件开发人员用来优化应用程序和增强用户体验的两种关键策略。A/B 测试涉及比较应用程序的两个版本，以确定哪个版本的性能更好。另一方面，Canary 版本是一种在将更改提供给整个用户群之前向一小部分用户推出更改的技术。Nginx 是一个强大的 Web 服务器，有助于有效地实施 A/B 测试和金丝雀发布。

![使用 Nginx 进行 A/B 测试和 Canary 版本镜像](https://img.reintech.io/variants/t79rb3k30ni5fx6a90c09nwj0nvo/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 配置 Nginx 以进行 A/B 测试

要使用 Nginx 设置 A/B 测试，您需要配置服务器以向不同的用户组提供不同版本的应用程序。这可以通过使用 Nginx 提供的模块来完成。`split_clients`

```sh theme={null}
split_clients "$remote_addr$request_uri" $variant {
    50%      .v1;
    50%      .v2;
}

server {
    listen 80;
    server_name example.com;

    location / {
        if ($variant = .v1) {
            proxy_pass http://version1.example.com;
        }

        if (\$variant = .v2) {
            proxy_pass http://version2.example.com;
        }
    }
}
```

壳

复制

上述配置使用指令在托管在不同位置的应用程序的两个变体之间均匀分配客户端。请务必根据 A/B 测试的特定要求调整百分比。`split_clients`

## 使用 Nginx 实现 Canary 版本

对于 Canary 版本，您通常会逐渐引入新功能或更改。要使用 Nginx 实现这一点，您可以使用与 A/B 测试类似的方法，但重点是仅将一小部分流量转移到新版本。

```sh theme={null}
split_clients "$remote_addr$request_uri" $variant {
    95%      .stable;
    5%       .canary;
}

server {
    listen 80;
    server_name example.com;

    location / {
        if ($variant = .stable) {
            proxy_pass http://stable-version.example.com;
        }

        if ($variant = .canary) {
            proxy_pass http://canary-version.example.com;
        }
    }
}
```

壳

复制

在此配置中，95% 的流量将发送到应用程序的稳定版本，而其余 5% 的流量将发送到 Canary 版本。监控和分析 Canary 版本的性能对于确保在全面推出之前不会引入任何重大问题至关重要。

## 最佳实践和注意事项

* \*\*监测：\*\*始终监控两个版本的性能或错误率是否有任何显著差异。
* \*\*用户体验：\*\*确保在测试期间用户体验不受影响;会话粘性在这里可能很重要。
* \*\*清理：\*\*完成 A/B 测试或 Canary 发布后，请清理您的 Nginx 配置，以防止将来出现任何潜在的混淆或错误。

如果设置和管理这些配置似乎令人生畏，您可能需要聘请专门使用这些高级技术扩展和优化 Web 应用程序的 [Nginx 专家](https://reintech.io/hire-nginx-experts)。

## 结论

A/B 测试和 Canary 发布对于任何强大的部署策略都是必不可少的。通过利用 Nginx 的灵活性和强大的功能，开发人员可以自信和精确地实现这些方法。与往常一样，全面的测试和监控是成功部署策略的关键组成部分。

# 为高性能 Web 应用程序配置 Nginx

在托管高性能 Web 应用程序时，Nginx 通常是首选。这款功能强大的 HTTP 和反向代理服务器擅长快速提供静态内容、高效处理并发连接以及用作负载均衡器和 HTTP 缓存。为了最大限度地提高 Web 应用程序的性能，开发人员必须注意细节地配置 Nginx。本文将深入探讨配置 Nginx 的最佳实践，以确保您的 Web 应用程序平稳运行并能够处理高流量负载。

![为高性能 Web 应用程序配置 Nginx 镜像](https://img.reintech.io/variants/zff9aoo5f5hwolfymp7kr4cedksd/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

### 优化 Worker 进程和连接

优化 Nginx 性能的第一步是优化 worker 进程和连接。该指令告诉 Nginx 它应该生成多少个工作进程。通常，这应该等于可用的 CPU 内核数：`worker_processes`

worker\_processes auto;

块中的指令规定了每个 worker 进程的最大同时连接数：`worker_connections``events`

```sh theme={null}
events {
    worker_connections 1024;
}
```

壳

复制

应根据您的系统资源和预期流量调整此数字。

### 使用 Keep-Alive 连接

保持活动连接通过允许通过单个连接发出多个请求来减少建立新 TCP 连接的开销。要在 Nginx 中启用 keep-alive，您需要设置：`keepalive_timeout`

```sh theme={null}
http {
    keepalive_timeout 65;
}
```

壳

复制

正确配置的 keep-alive 超时可以显著提高请求多个资源的客户端的性能。

### 配置缓存

缓存对于高性能 Web 应用程序至关重要。Nginx 可以配置为浏览器和代理缓存。浏览器缓存使用以下指令进行控制：`expires`

```sh theme={null}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}
```

壳

复制

这会告诉浏览器将静态文件缓存 30 天。代理缓存涉及存储来自代理服务器的响应以便快速检索：

```sh theme={null}
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
```

壳

复制

### Gzip 压缩

Gzip 压缩减小了 Nginx 提供的文件大小，从而缩短了传输时间。要启用 gzip，请在 or 块中包含以下内容：`http``server`

```sh theme={null}
http {
    gzip on;
    gzip_types text/plain application/xml application/json application/javascript text/css;
    gzip_proxied any;
    gzip_min_length 1000;
}
```

壳

复制

此设置会压缩各种文件类型，但前提是它们超过特定大小，您可以根据需要进行调整。

### 优化超时

正确管理超时对于保持高性能和资源可用性至关重要。、 、 和 指令控制 Nginx 在关闭连接之前等待客户端交互的时间：`client_body_timeout``client_header_timeout``send_timeout`

```sh theme={null}
http {
    client_body_timeout 12;
    client_header_timeout 12;
    send_timeout 10;
}
```

壳

复制

您可能需要根据典型的客户端行为和网络条件调整这些设置。

### TCP 优化

TCP 优化类似于 和 可以提高网络效率：`tcp_nopush``tcp_nodelay`

```sh theme={null}
http {
    tcp_nopush on;
    tcp_nodelay on;
}
```

壳

复制

该选项有助于在一个数据包中发送 HTTP 响应标头，同时优化 TCP 通信以实现快速数据突发。`nopush``nodelay`

### 高效提供静态内容

Nginx 因其事件驱动的架构而在提供静态内容方面大放异彩。您可以通过避免记录静态文件并设置适当的 MIME 类型来进一步优化此功能：

```sh theme={null}
location ~* \.(jpg|jpeg|png|gif|ico)$ {
    access_log off;
    log_not_found off;
}
```

壳

复制

## 寻找专业知识

如果配置 Nginx 似乎令人生畏，或者您打算将其与 JavaScript 前端、数据库或 React 等框架等复杂系统集成，那么考虑专业帮助可能会有所帮助。像 Reintech 这样的公司提供了一个平台，您可以在其中[聘请 JavaScript React Nginx 开发人员](https://reintech.io/hire-javascript-react-nginx-developers)，他们在根据您的需求设置高性能解决方案方面具有专业知识。

# 在 Nginx 中实现 IPv6 支持

IPv6 是 Internet 协议 （IP） 的最新版本，旨在通过提供更大的地址空间来解决 IPv4 地址耗尽的问题。作为软件开发人员，通过支持 IPv6 确保我们的 Web 应用程序和服务面向未来至关重要。Nginx 是一种高性能 Web 服务器，也需要正确配置以处理 IPv6 流量，这乍一看似乎令人生畏，但一旦您了解了必要的步骤，它就很简单了。

![在 Nginx 镜像中实现 IPv6 支持](https://img.reintech.io/variants/c8wa0dnfaaaezolts4nb6xvply63/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 配置 Nginx 以支持 IPv6

要在 Nginx 中启用 IPv6 支持，您必须确保服务器的操作系统支持 IPv6 并且配置正确。确认后，您可以继续修改 Nginx 配置文件。

首先打开 Nginx 配置文件进行编辑。此文件通常位于目录下或目录内。`/etc/nginx/nginx.conf``/etc/nginx/sites-available/`

```sh theme={null}
sudo nano /etc/nginx/sites-available/default
```

壳

复制

在 server 块中，您需要为 IPv6 地址添加 listen 指令。下面是一个示例：

```sh theme={null}
server {
    listen [::]:80;
    listen 80;
    server_name example.com;
    ...
}
```

壳

复制

上述配置告诉 Nginx 在 80 端口上同时监听 IPv4 和 IPv6。确保替换为您的域名。`example.com`

## 测试和故障排除

更新配置后，使用以下命令对其进行测试：

```sh theme={null}
sudo nginx -t
```

壳

复制

如果语法没问题，请重启 Nginx 以应用更改：

```sh theme={null}
sudo systemctl restart nginx
```

壳

复制

要验证 Nginx 现在是否正在侦听 IPv6 地址，请使用：

```sh theme={null}
sudo netstat -tulpan | grep nginx
```

壳

复制

如果您遇到任何问题，请仔细检查您的配置文件是否存在语法错误或配置错误。

## 保护 IPv6 连接

与 IPv4 一样，保护您的服务器也至关重要。如果您使用的是 SSL/TLS 证书，请确保通过在服务器块中为端口 443（或您用于安全连接的任何其他端口）添加相同的 listen 指令，将它们配置为与两个 IP 版本一起使用。

## 结论

迁移到 IPv6 不仅仅是保持最新状态;这是关于为 Internet 的未来做准备。通过配置 Nginx 以支持 IPv6，您可以确保为全球用户提供更广泛的可访问性和可扩展性。如果您想[聘请 Nginx 专家](https://reintech.io/hire-nginx-experts)，请考虑与精通 IPv4 和 IPv6 配置的专业人士合作。

# 使用 Nginx 安全地处理文件上传

文件上传是 Web 应用程序的常见要求，安全地处理文件对于确保用户数据的完整性和隐私性至关重要。Nginx 是一个强大的 Web 服务器，可以配置为有效地管理文件上传，同时保持强大的安全态势。本文深入探讨了使用 Nginx 处理文件上传的安全实践。

![使用 Nginx 镜像安全地处理文件上传](https://img.reintech.io/variants/lpay3nk6ldjo26sdtdmfh45jazym/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 安全服务器配置

从安全的服务器配置开始。确保强制执行 SSL/TLS 来加密传输中的数据。在您的 Nginx 配置文件中，设置一个 HTTPS 服务器块：

```nginx theme={null}
server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    # More SSL configurations...
}
```

nginx

复制

## 限制文件大小

避免大文件上传对于防止拒绝服务 （DoS） 攻击至关重要。对 client\_max\_body\_size 指令设置限制：

```sh theme={null}
client_max_body_size 10M;
```

壳

复制

此指令限制了 Client 端请求正文的最大大小，并有助于防止服务器因文件过大而过载。

## 文件上传位置和权限

选择用于文件上传的特定目录，并确保它具有严格的权限。只有运行 Nginx 进程的用户才应该拥有此目录的写入权限：

```sh theme={null}
mkdir /var/www/uploads
chmod 700 /var/www/uploads
chown nginx:nginx /var/www/uploads
```

壳

复制

这种隔离可最大限度地降低未经授权访问或执行恶意文件的风险。

## 在应用程序中处理文件上传

您的后端应用程序应谨慎处理文件上传。在保存文件之前，使用服务器端脚本验证文件类型、检查恶意软件和重命名文件，以防止上传任何可执行或有害内容：

```php theme={null}
// PHP example for handling file uploads
if (in_array($_FILES['uploaded_file']['type'], ['image/jpeg', 'image/png', 'application/pdf'])) {
    $new_filename = sha1_file($_FILES['uploaded_file']['tmp_name']) . '.' . pathinfo($_FILES['uploaded_file']['name'], PATHINFO_EXTENSION);
    move_uploaded_file($_FILES['uploaded_file']['tmp_name'], '/var/www/uploads/' . $new_filename);
} else {
    // Handle invalid file type
}
```

菲律宾

复制

## 使用 Nginx 作为文件上传的反向代理

Nginx 可以充当反向代理，在将文件上传到后端服务器之前对其进行缓冲。这提供了额外的抽象和安全层：

```nginx theme={null}
location /upload {
    client_max_body_size 10M;
    proxy_pass http://backend;
    proxy_set_header Host $host;
    proxy_buffering on;
}
```

nginx

复制

在此配置中，Nginx 接受 /upload 位置下的文件上传，并将其转发到后端服务器，从而降低将后端服务直接暴露给最终用户的风险。

## 监控和日志记录

维护适当的日志并监控上传过程。日志记录可以提供对上传活动的见解，并帮助检测任何可疑行为：

```nginx theme={null}
access_log /var/log/nginx/upload_access.log main;
error_log /var/log/nginx/upload_error.log warn;
```

nginx

复制

定期查看这些日志，作为安全审计的一部分。

## 结论

保护文件上传包括正确配置 Nginx、设置适当的权限、验证上传的文件以及勤奋的日志记录。实施这些最佳实践将降低与文件上传相关的安全风险。

如果您在配置 Nginx 以进行安全文件处理方面需要专业帮助，或者需要精通将 Nginx 与 JavaScript 或 React 应用程序集成的专家开发人员，请考虑[选择聘请 javascript react nginx 开发人员](https://reintech.io/hire-javascript-react-nginx-developers)。

# Nginx 和 Memcached：性能提升二重奏

在优化 Web 应用程序性能方面，Nginx 和 Memcached 的组合无与伦比。这两项技术为减少延迟、处理高流量负载和更快地向最终用户交付内容提供了有效的解决方案。让我们深入了解这些工具如何协同工作以提高 Web 应用程序的速度和响应能力。

![Nginx 和 Memcached：性能提升的 Duo 镜像](https://img.reintech.io/variants/55enuflkcb2y2non4dnddra1u2l3/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

### 了解 Nginx

Nginx 是一个开源 Web 服务器，还用作反向代理、负载均衡器和 HTTP 缓存。它以其高性能、稳定性和低资源消耗而闻名。Nginx 由于其事件驱动的架构，可以高效地服务大量并发请求。这使其成为需要可扩展性和速度的现代 Web 应用程序的绝佳选择。

### Memcached 概览

Memcached 是一个免费的开源分布式内存对象缓存系统。它通过减轻数据库负载来加速动态 Web 应用程序。Memcached 通过在 RAM 中缓存数据和对象来减少必须读取外部数据源（例如数据库或 API）的次数来实现这一点。

### Nginx 和 Memcached 的协同作用

通过将 Nginx 与 Memcached 相结合，开发人员可以显著提高其 Web 应用程序的性能。可以将 Nginx 配置为在访问应用程序的后端或数据库之前从 Memcached 中检索数据。这种方法可以最大限度地减少处理时间并缩短最终用户的响应时间。

#### 使用 Memcached 配置 Nginx

```sh theme={null}
# Example configuration snippet for Nginx
location /cache/ {
    set $memcached_key $uri;
    memcached_pass localhost:11211;
    error_page 404 = @fallback;
}

location @fallback {
    proxy_pass http://backend;
}
```

壳

复制

在此配置代码段中，Nginx 尝试使用请求 URI 作为键从 Memcached 获取数据，从而为请求提供服务。如果在缓存中没有找到该项（导致 404 错误），Nginx 会回退到后端服务器。

#### 利用 Memcached 提高性能

```php theme={null}
<?php
// PHP code snippet to interact with Memcached
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die("Could not connect");

$key = md5('user_profile_' . $user_id); // Unique key for caching
$data = $memcache->get($key);

if ($data) {
    echo 'Data from cache: ' . $data;
} else {
    // Generate data here
    $data = get_user_profile_from_database($user_id);
    $memcache->set($key, $data, MEMCACHE_COMPRESSED, 1200);
    echo 'Data from database: ' . $data;
}
?>
```

菲律宾

复制

此 PHP 示例展示了如何在查询数据库之前检查 Memcached 中的用户配置文件数据是否可用。如果不可用，它将从数据库中检索数据并将其存储在 Memcached 中以供后续请求使用。

### 结论

通过 Nginx 和 Memcached 的战略实施，开发人员可以显著减少服务器响应时间和资源利用率。这对搭档证明了高效的 Web 性能优化策略。对于那些希望[聘请 Nginx 专家](https://reintech.io/hire-nginx-experts)或擅长将这些技术与 JavaScript 或 React 框架集成的团队来说，探索专业服务可以确保在充分利用这两种工具的潜力的同时遵循最佳实践。

# 使用 WebSockets 和长轮询设置 Nginx

实时 Web 技术已成为现代 Web 开发不可或缺的一部分。当涉及到客户端和服务器之间的实时双向通信时，WebSockets 已成为一种流行的选择。但是，在 WebSockets 不可行的某些情况下，长轮询可能是一种有效的替代方法。设置 Nginx 服务器以处理 WebSockets 和长轮询需要仔细配置，以确保高效可靠的性能。

![使用 WebSockets 和长轮询镜像设置 Nginx](https://img.reintech.io/variants/56wutitq44xnn32dkqqm6cvis7ym/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 为 WebSockets 配置 Nginx

要使用 WebSockets 设置 Nginx，您需要将其配置为将连接从 HTTP 升级到 WebSockets。以下是如何配置 Nginx 服务器块的基本示例：

```sh theme={null}
server {
    listen 80;
    server_name example.com;

    location /websocket {
        proxy_pass http://websocket_backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}
```

壳

复制

在此配置中，向 Web 套接字 连接 发出的任何请求都将被代理到处理 WebSocket 连接的后端。标头 和 设置为通知后端这是一个 WebSocket 连接。`/websocket``Upgrade``Connection`

## 使用 Nginx 处理长轮询

长轮询是实现实时应用程序的另一种技术，其中 Client 端向服务器发出请求，使其保持打开状态，直到有新数据可用。要配置 Nginx 进行长轮询，您可以调整指令以允许连接保持打开状态更长时间：`proxy_read_timeout`

```sh theme={null}
location /long-polling {
    proxy_pass http://long_polling_backend;
    proxy_read_timeout 60s;
}
```

壳

复制

此设置表示 Nginx 将等待最多 60 秒，以便后端服务器在关闭连接之前做出响应。这为后端提供了足够的时间来保持请求打开状态，直到它有数据要推送回客户端。

## 优化 Nginx 的性能

在处理大量同时连接时，如 WebSockets 和长轮询的情况，优化 Nginx 的性能至关重要。调整某些参数（如 、 ）并使用事件驱动模型（如在 Linux 上）有助于最大限度地提高吞吐量并减少延迟。`worker_processes``worker_connections``epoll`

## 结论

为 WebSockets 和长轮询设置 Nginx 需要了解这些技术的工作原理并适当地配置您的服务器。通过遵循最佳实践并优化服务器以实现高并发性，您可以构建强大的实时应用程序，这些应用程序可以很好地扩展并提供无缝的用户体验。

如果您希望进一步增强您的项目或需要为实时 Web 应用程序配置和优化 Nginx 的专业知识，您可能需要[聘请 JavaScript React Nginx 开发人员](https://reintech.io/hire-javascript-react-nginx-developers)。他们精通 React 等 JavaScript 框架，再加上对 Nginx 的深入了解，可以极大地有助于构建高效且可扩展的应用程序。

举报过时内容

# 配置 Nginx 以进行移动设备重定向

随着移动使用量的持续飙升，针对移动设备优化网站已成为必要。对于 Web 开发人员来说，这意味着确保他们的 Web 应用程序可以检测移动用户并将其重定向到网站的移动优化版本。Nginx 是一个功能强大且高效的 Web 服务器，可以配置为轻松处理此类重定向。在本文中，我们将探讨如何配置 Nginx 以进行移动设备重定向，从而确保您的移动受众获得无缝的用户体验。

![配置 Nginx for Mobile Device Redirection 镜像](https://img.reintech.io/variants/r4y5raevmcsinjac8dw19pcbii7b/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 了解 User-Agent 字符串

在深入研究 Nginx 配置之前，了解 User-Agent 字符串很重要。这些字符串由浏览器和设备在发出 HTTP 请求时发送。它们包含有关浏览器类型、操作系统和设备的信息，我们可以使用这些信息来识别移动浏览器。

## 配置 Nginx 以进行移动重定向

要在 Nginx 中设置移动重定向，您需要编辑服务器配置文件。这些文件通常位于 中，允许您定义 Nginx 如何处理传入请求。`/etc/nginx/sites-available/`

### 第 1 步：Nginx 基本配置

```sh theme={null}
server {
    listen 80;
    server_name example.com;

    # ... other configurations ...
}
```

壳

复制

### 步骤 2：检测移动设备

要重定向移动用户，我们必须首先使用他们的 User-Agent 字符串来检测他们。我们可以通过在 Nginx 配置文件中 block 之外使用 directive 来实现这一点：`map``server`

```sh theme={null}
http {
    map $http_user_agent $is_mobile {
        default 0;
        ~*'(android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini)' 1;
    }

    # ... other http configurations ...
}
```

壳

复制

此代码段会创建一个变量，如果 User-Agent 字符串与列出的任何移动设备标识符匹配，则该变量将设置为 “1”。`$is_mobile`

### 第 3 步：重定向移动用户

检测到移动用户后，我们使用块中的条件语句重定向他们：`server`

```sh theme={null}
server {
    if ($is_mobile) {
        rewrite ^ http://m.example.com$request_uri? permanent;
    }

    # ... other server configurations ...
}
```

壳

复制

此配置将移动用户重定向到专为移动用户设计的子域（例如 ）。该变量可确保在重定向后保留原始请求路径。`m.example.com``$request_uri`

## 测试您的配置

要确保您的配置按预期工作，您可以使用以下命令来测试您的配置是否存在语法错误：`nginx -t`

```sh theme={null}
nginx -t
```

壳

复制

如果一切设置正确，请重启 Nginx 以使更改生效：

```sh theme={null}
service nginx restart
```

壳

复制

## 保持性能和 SEO

实施重定向时，保持网站性能和搜索引擎优化 （SEO） 至关重要。确保您的移动网站针对速度和可用性进行了优化。此外，使用适当的 HTTP 状态代码进行重定向以保持 SEO 排名。

## 结论

配置 Nginx 以进行移动设备重定向，使您能够为不断增长的移动受众提供优化的浏览体验。通过仔细实施 User-Agent 检测和重定向逻辑，您的网站可以有效地满足桌面和移动用户的需求。

如果你在配置 Nginx 进行移动重定向时需要进一步定制或遇到复杂场景，[聘请 Nginx 专家](https://reintech.io/hire-nginx-experts)可能会有所帮助。经验丰富的专业人员可以协助进行复杂的设置，并确保您的 Web 应用程序在所有设备上都能以最佳方式运行。

# 在 Nginx 中启用 CORS 以实现跨域资源共享

随着 Web 应用程序的发展，在不同域之间共享资源的需求变得越来越普遍。但是，Web 浏览器的安全模型限制从脚本发起的跨域 HTTP 请求。这就是跨域资源共享 （CORS） 变得至关重要的地方。CORS 是一种机制，它允许从资源来源域之外的另一个域请求网页上的许多资源（例如，字体、JavaScript 等）。

![在 Nginx 中启用 CORS 以实现跨域资源共享映像](https://img.reintech.io/variants/tu8e7qy3q6974urq8pa2cv88f4ar/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

实施 CORS 对于使 Web 服务能够安全地处理来自不同域的请求至关重要。如果没有 CORS，除非服务器明确支持跨域请求，否则使用 API 的 Web 应用程序将仅限于来自同一源的资源。

## 在 Nginx 中启用 CORS

要在 Nginx 中启用 CORS，我们需要将特定的标头添加到我们的服务器配置中。这些标头通知浏览器服务器接受来自不同来源的请求。以下是分步指南：

1. \*\*打开 Nginx 配置文件：\*\*此文件通常位于目录下或目录内。`/etc/nginx/nginx.conf``/etc/nginx/sites-available/`
2. \*\*编辑服务器块：\*\*在此块中，您可以为 CORS 定义必要的标头。
3. \*\*添加标头：\*\*使用该指令可包含管理 CORS 的标头。`add_header`

### 启用 CORS 的 Nginx 配置示例

```sh theme={null}
# Specify domains that are allowed to access resources
add_header 'Access-Control-Allow-Origin' 'http://example.com';

# Specify which methods can be used during the actual request
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

# Specify allowed headers
add_header 'Access-Control-Allow-Headers' 'Content-Type';

# Additional settings can be configured based on requirements
# For example: Credentials support
add_header 'Access-Control-Allow-Credentials' 'true';
```

壳

复制

请注意，通配符 '*' 可以在 'Access-Control-Allow-Origin' 中使用以允许任何域，但出于安全考虑，不建议将通配符 '*' 用于生产环境。

## CORS 印前检查请求

有时，特别是对于可以修改数据的请求（如 POST、PUT、DELETE），浏览器会在发出实际请求之前发送一个称为 “预检” 的额外请求。此印前检查请求是使用 OPTIONS 方法发出的，以确定实际请求是否可以安全发送。您的 Nginx 配置还必须考虑这些类型的请求。

```sh theme={null}
# Handle OPTIONS method requests for preflight checks
if ($request_method = 'OPTIONS') {
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    # You may need to include other headers used in actual requests
    add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
    add_header 'Access-Control-Max-Age' 1728000;
    add_header 'Content-Type' 'text/plain charset=UTF-8';
    add_header 'Content-Length' 0;
    return 204;
}
```

壳

复制

## 排查 CORS 问题

如果您已在 Nginx 配置中实施了 CORS，但仍然遇到问题，您可以采取以下几个步骤：

* 检查浏览器的控制台中是否有与 CORS 相关的错误。
* 请确保您的 Nginx 服务器在更改配置后已重新加载或重新启动。
* 验证应用程序的前端代码是否正确处理 CORS 响应。

如果您希望通过熟练的专业人员进一步增强团队的能力，这些专业人员在为 CORS 配置 Nginx 或开发需要跨域资源共享专业知识的复杂 Web 应用程序方面经验丰富，

如需在设置和管理复杂的 Nginx 配置以及实施强大的跨域解决方案方面的专业帮助，

如果您在设置和管理复杂的 Nginx 配置以及实施强大的跨域解决方案方面需要专家帮助，

[聘请 nginx 专家](https://reintech.io/hire-nginx-experts)。

# Nginx 作为 Websocket 代理：操作指南

在 Web 应用程序中使用 WebSockets 进行实时通信的利用率一直在上升，随着这种趋势，了解如何使用像 Nginx 这样的强大 Web 服务器正确代理这些连接的需求至关重要。在本指南中，我们将了解如何将 Nginx 设置为 WebSocket 代理，确保您可以维护对实时功能至关重要的持久连接。

![Nginx 作为 Websocket 代理：操作指南图像](https://img.reintech.io/variants/1ug5u9o0y9qxfsz65tx15pxqnzh1/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 先决条件

* 一个正在运行的 Nginx 服务器
* 对 Nginx 配置文件有基本的了解
* 利用 WebSockets 的应用程序

## WebSocket 代理配置

要开始将 Nginx 配置为 WebSocket 代理，必须了解 WebSockets 将初始 HTTP 连接升级到 WebSocket 连接。这需要在 Nginx 中进行特殊处理以维护连接状态。以下是配置 Nginx 服务器以处理 WebSocket 连接的方法：

```sh theme={null}
# Step 1: Open your Nginx configuration file
sudo nano /etc/nginx/nginx.conf

# Step 2: Inside the server block, specify the location you want to proxy pass
location /ws {
    proxy_pass http://websocket_backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
}
```

壳

复制

此配置告诉 Nginx 通过升级 HTTP 协议并设置适当的标头，将任何进入 '/ws' 端点的流量视为 WebSocket 连接。

## 确保稳定性和性能

在处理实时应用程序时，稳定性和性能是关键。为了确保稳定性，请考虑设置满足特定应用程序需求的超时和缓冲区大小：

```sh theme={null}
# Increase buffer size for busy WebSocket servers
proxy_buffers 8 32k;
proxy_buffer_size 64k;

# Set timeout for no activity on the connection
proxy_read_timeout 600s;
proxy_send_timeout 600s;
```

壳

复制

这些设置有助于防止由于缓冲区溢出或长时间不活动而断开连接。

## 常见问题疑难解答

设置 WebSocket 代理时，您可能会遇到 400 错误请求错误或连接断开等问题。请务必查看日志并相应地调整配置：

```sh theme={null}
# Check error logs for troubleshooting
sudo tail -f /var/log/nginx/error.log
```

壳

复制

通过监控这些日志，您可以确定升级是否失败或是否存在握手问题。

## 寻找专业知识？

如果为 WebSockets 配置 Nginx 似乎令人生畏，或者您需要涉及负载平衡和安全性的更复杂的配置，您可能需要[聘请 nginx 专家](https://reintech.io/hire-nginx-experts)。专业开发人员可以确保您的基础设施在性能和安全性方面得到优化。

# 在 Debian 12 上为 nginx 配置 PHP-FPM

在为 PHP 应用程序设置 Web 服务器环境时，将 Nginx 与 PHP-FPM（FastCGI Process Manager）相结合是一个很好的选择。Nginx 以其高性能和稳定性而闻名，它与 PHP-FPM 无缝协作，以高效提供动态内容。在本文中，我们将演练配置 PHP-FPM 以在 Debian 12 系统上与 Nginx 一起使用的过程。

![在 Debian 12 镜像上为 Nginx 配置 PHP-FPM](https://img.reintech.io/variants/5py9gy9qe1qodbi0woqajnrl4lkc/e7b4ce09c703210ab8f75b017c7eaf0951c5a95b737ee8120602845c1c1d944b)

## 安装 Nginx 和 PHP-FPM

首先，确保系统的 package 仓库是最新的：

```sh theme={null}
sudo apt update && sudo apt upgrade -y
```

壳

复制

安装 Nginx 和 PHP-FPM：

```sh theme={null}
sudo apt install nginx php-fpm
```

壳

复制

## 配置 Nginx 以使用 PHP-FPM

安装 Nginx 和 PHP-FPM 后，您必须将 Nginx 配置为将 PHP 请求传递给 PHP-FPM 进行处理。这涉及编辑您网站的服务器块配置。

编辑您网站的 Nginx 配置文件：

```sh theme={null}
sudo nano /etc/nginx/sites-available/your_domain.conf
```

壳

复制

添加以下 location 块来处理 PHP 文件，确保将 '*your\_php\_version*' 替换为安装的实际 PHP 版本：

```nginx theme={null}
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php<your_php_version>-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
```

nginx

复制

保存更改并测试 Nginx 配置是否存在语法错误：

```sh theme={null}
sudo nginx -t
```

壳

复制

如果配置测试成功，请重启 Nginx 以应用更改：

```sh theme={null}
sudo systemctl restart nginx
```

壳

复制

## 调整 PHP-FPM 设置

调整 PHP-FPM 设置对于优化性能和资源使用至关重要。PHP-FPM 的主要配置文件位于 。池配置（通常名为 ）通常位于 。`/etc/php/<your_php_version>/fpm/php-fpm.conf``www.conf``/etc/php/<your_php_version>/fpm/pool.d/`

编辑存储池配置文件：

```sh theme={null}
sudo nano /etc/php/<your_php_version>/fpm/pool.d/www.conf
```

壳

复制

请考虑调整以下参数：

* `pm`- 根据您的需要将 Process Manager 设置为 dynamic 或 static。
* `pm.max_children`- 子进程的最大数量。
* `pm.start_servers`- 启动时创建的子项数。
* `pm.min_spare_servers`- 空闲服务器进程的最小数量。
* `pm.max_spare_servers`- 服务器空闲进程的最大数量。

进行更改后，重新启动 PHP-FPM 以应用新配置：

```sh theme={null}
sudo systemctl restart php<your_php_version>-fpm
```

壳

复制

## 安全注意事项

保护您的 PHP-FPM 设置至关重要。确保正确设置套接字文件的权限和所有权，并将对 PHP-FPM 状态页面的访问限制为受信任的 IP。通过定期更新您的软件包，使用最新的安全补丁使您的 PHP 环境保持最新状态。

## 结论

按照上述步骤，您可以在 Debian 12 上使用 Nginx 配置 PHP-FPM 以获得最佳性能。请记住，要根据应用程序的需要和服务器资源调整 PHP-FPM 设置。定期监控性能和安全性，以确保您的 Web 服务器平稳运行。

# PHP 和 Nginx：优化 Web 服务器性能

在本教程中，我们将讨论优化运行 PHP 和 Nginx 的 Web 服务器性能的各种策略。作为软件开发人员，必须确保您的应用程序能够处理增加的流量并有效扩展。通过执行这些步骤，您将能够提高 PHP 应用程序的性能并充分利用您的服务器资源。

在深入研究优化技术之前，我们先简单讨论一下 PHP 和 Nginx。PHP 是一种广泛使用的开源脚本语言，特别适合 Web 开发。Nginx 是一种高性能、轻量级的 Web 服务器和反向代理服务器，以其稳定性、丰富的功能集和低资源消耗而闻名。PHP 和 Nginx 结合使用时，可以为您的 Web 应用程序提供出色的性能。

现在，我们继续讨论优化技术：

## 1. 将 PHP 和 Nginx 更新到最新版本

始终确保您运行的是 PHP 和 Nginx 的最新稳定版本。较新的版本通常带有性能改进和错误修复。您可以使用以下命令检查已安装的 PHP 和 Nginx 版本：

```php theme={null}
php -v
nginx -v
```

菲律宾

复制

要更新 PHP 和 Nginx，您可以遵循操作系统的官方文档或使用 或 等包管理器。`apt``yum`

## 2. 配置 PHP-FPM

PHP-FPM （FastCGI Process Manager） 是另一种 PHP FastCGI 实现，它是高度可定制的，尤其是在管理 PHP 进程时。PHP-FPM 允许您微调工作进程的数量、它们的最大请求数等。您可以通过编辑文件来配置 PHP-FPM，该文件通常位于 或 中。`php-fpm.conf``/etc/php-fpm.d/``/etc/php/`

以下是要在文件中配置的一些基本设置：`php-fpm.conf`

* `pm.max_children`：此设置控制子进程的最大数量。您应该根据可用的服务器资源（内存和 CPU）设置此值。
* `pm.start_servers`：此设置控制启动时创建的子进程数。建议将此值设置为服务器上可用的 CPU 内核数。
* `pm.min_spare_servers`和：这些设置控制空闲（备用）服务器进程的最小和最大数量。您可以根据服务器上的预期负载设置这些值。`pm.max_spare_servers`
* `pm.max_requests`：此设置控制子进程在重新生成之前应执行的请求数。设置此值可以帮助您减少 PHP 应用程序中的内存泄漏。

对文件进行更改后，请重新启动 PHP-FPM 服务以使更改生效。`php-fpm.conf`

## 3. 配置 Nginx

优化 Nginx 配置可以显著提高 Web 服务器的性能。以下是要在文件中配置的一些基本设置，通常位于 ：`nginx.conf``/etc/nginx/`

* `worker_processes`：将此值设置为服务器上可用的 CPU 内核数。此设置决定了 Nginx 将运行多少个工作进程。
* `worker_connections`：此设置控制每个工作进程可以处理的最大同时连接数。您可以根据可用的 Server 资源增加此值。
* `sendfile`：启用此设置后，Nginx 可以使用系统调用来提供静态文件，从而提高服务器的性能。`sendfile()`
* `gzip`：启用 gzip 压缩可以显著减小传输数据的大小，从而加快页面加载时间并减少带宽使用。
* `keepalive_timeout`：此设置控制保持活动连接的超时。您可以增加此值以提高 Web 服务器的性能，但请注意不要将其设置得太高，因为它可能会消耗服务器资源。

对文件进行更改后，请重新启动 Nginx 服务以使更改生效。`nginx.conf`

## 4. 使用内容缓存

缓存静态内容（如图像、CSS 和 JavaScript 文件）可以显著提高 Web 服务器的性能。Nginx 为内容缓存提供了内置支持。您可以使用 、 和 指令在文件中配置内容缓存。以下是如何在 Nginx 中配置内容缓存的示例：`nginx.conf``proxy_cache_path``proxy_cache``proxy_cache_valid`

```php theme={null}

http {
    ...
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
    proxy_cache_key "$scheme$request_method$host$request_uri";
    ...
    server {
        ...
        location / {
            proxy_cache my_cache;
            proxy_cache_valid 200 302 60m;
            proxy_cache_valid 404 1m;
            proxy_pass http://backend;
        }
        ...
    }
}
```

菲律宾

复制

更改配置后，请记得重启 Nginx 服务。

## 5. 优化 PHP 代码

优化 PHP 代码对于提高 PHP 应用程序的性能至关重要。以下是优化 PHP 代码的一些一般提示：

* 使用 PHP 7 或更高版本，因为它比旧的 PHP 版本提供了显着的性能改进。
* 使用 OPcache 等 PHP 操作码缓存将预编译的脚本字节码存储在内存中，从而减少在每个请求上重新编译 PHP 脚本的需要。
* 避免使用昂贵的函数或循环，并尽量减少使用全局变量。
* 使用 Xdebug 和 Blackfire.io 等 PHP 分析工具来识别代码中的性能瓶颈。

对于更高级的优化技术，请考虑聘请专业的 [PHP 开发人员](https://reintech.io/hire-php-developers)来审查和优化您的代码。

## 结论

在本教程中，我们讨论了优化运行 PHP 和 Nginx 的 Web 服务器性能的各种技术。通过执行这些步骤，您可以提高 PHP 应用程序的性能和可扩展性，确保它们可以毫无问题地处理增加的流量。请记住定期监控和分析服务器的性能，以识别潜在的瓶颈并根据需要进行调整
