Nginx 是一款网络服务器应用程序,可让你使用域名 URL 托管和交付网络应用程序。为了交付静态文件并减少服务器负载,你可以集成一个 Vultr CDN,将文件卸载到多个区域交付,而不是你的原始服务器位置。集成后,Nginx 会向所有匹配的用户请求交付 Vultr CDN URL 响应数据,而不是原始网络应用程序 URL。
本文介绍如何将 Vultr CDN 与 Nginx 网络服务器结合使用,将特定类型的请求路由到 CDN 缓存的静态资源。您将根据自己的网络应用程序结构,使用新的请求规则修改现有的 Nginx 配置,以便使用 Vultr CDN URL 传输图片等静态文件。
准备工作
开始之前:
- 使用 Vultr Marketplace 应用程序部署 OneClick LEMP 服务器作为生产服务器。
- 设置指向服务器 IP 地址的域 A 记录。
- 以具有 sudo 权限的非 root 用户身份使用 SSH 访问服务器。
定位 Nginx 虚拟主机配置
要设置 Nginx Web 服务器并将请求转发到 Vultr CDN URL,请按照以下步骤验证工作虚拟主机配置,并根据 CDN 规则进行修改。
- 切换到 Nginx 数据目录。
$ cd /etc/nginx/
- 搜索包含域名的所有 Nginx 配置。例如,
example.com
。$ grep -r "example.com" /etc/nginx/
输出结果应如下所示:
/etc/nginx/sites-available/example.com: server_name example.com;
在上述输出结果中,你的域名使用了
/etc/nginx/sites-available/example.com
虚拟主机配置。通常,如果没有虚拟主机配置,Nginx会使用默认配置文件/etc/nginx/sites-available/default
。 - 查看虚拟主机配置文件并验证网络根目录值。
$ cat /etc/nginx/sites-available/example.com
输出:
root /var/www/example.com;
- 切换到网络根目录,设置示例应用程序结构。
$ cd /var/www/example.com
- 创建一个新的样本
images
目录,以测试 Nginx 规则。.$ sudo mkdir images
将图像文件等样本文件上传到要缓存的目录,并使用 Vultr CDN URL 进行测试。
方法 1:设置修改响应
Nginx 响应修改使用 sub_filter
模块将特定请求类型转发到你的 Vultr CDN URL。当用户创建一个新请求时,Nginx 会修改请求并将其转换到你的 Vultr CDN URL,而不是原服务器 URL。请按照以下步骤设置响应修改,以便将特定请求模式匹配到你的 Vultr CDN URL。
- 默认情况下,Nginx 的
sub_filter
模块与http_sub_module
一起运行。请确认该模块在你的服务器上可用。$ nginx -V
输出:
........--with-http_gzip_static_module --with-http_sub_module
- 使用 Nano 等文本编辑器打开 Nginx 虚拟主机配置。
$ sudo nano /etc/nginx/sites-available/example.com
- 在文件中添加以下
sub_filter
配置。sub_filter 'https://example.com/images/' 'https://cdn-example88.vultrcdn.com/images/'; sub_filter 'https://example.com/files/' 'https://cdn-example88.vultrcdn.com/files/'; proxy_set_header Accept-Encoding ""; sub_filter_once off;
保存并关闭文件。
上述配置会用 Vultr CDN URL 替换所有匹配的请求模式。在配置中:
sub_filter '' '';
:
将原始请求 URL
''
修改为目标 URL''
。例如,所有与 URL 模式https://example.com/images/
匹配的请求都会被修改为你的 Vultr CDN URLcdn-example88.vultrcdn.com/images/
。同一 URL 方案中的文件请求,例如example.com/images/image.png
,会将请求模式匹配到您的 Vultr CDN URL /cdn-example88.vultrcdn.com/images/image.png
。proxy_set_header Accept-Encoding "";
:
关闭 Nginx 请求中的 Gzip 压缩,以避免与 Vultr CDN 响应数据发生压缩冲突。
sub_filter_once off;
:
启用多个内容修改规则,以持续修改 Vultr CDN URL 请求。
修改后的 Nginx 配置应如下所示:
server { listen 80 default_server; listen [::]:80 default_server; server_name example.com; root /var/www/html; index index.php index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } sub_filter 'https://example.com/images/' 'https://cdn-example88.vultrcdn.com/images/'; sub_filter 'https://example.com/files/' 'https://cdn-example88.vultrcdn.com/files/'; proxy_set_header Accept-Encoding ""; sub_filter_once off; }
- 测试 Nginx 配置是否有错误。
$ sudo nginx -t
输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
- 重启 Nginx 以应用配置更改。
$ sudo systemctl restart nginx
方法 2:设置重定向
重定向会将特定的 Nginx 请求类型转发到你的 Vultr CDN URL。请求将被重定向到 Vultr CDN URL,而不是从你的原始 URL 发送响应。请按照以下步骤将请求从你的主机 URL 重定向到 Vultr CDN URL。
-
- 打开 Nginx 虚拟主机配置。
$ sudo nano /etc/nginx/sites-available/example.com
- 在文件中添加包含目标请求类型的新
location
块。用实际的 Vultr CDN URL 替换cdn-example88.vultrcdn
。location ~ ^(/images/|/files/|/css/|/js/)/.*\.(jpe?g|webp|gif|css|png|js|ico|pdf|m4a|mov|mp3)$ { rewrite ^ https://cdn-example88.vultrcdn.com$request_uri? permanent; access_log off; }
保存并关闭文件。
上述配置会将符合
images/
,files/
,css/
,js/
目录或文件扩展名.jpg
,.jpeg
,.png
,.webp
,.css
,.js
的所有请求重定向到你的 Vultr CDN URL。在配置中location ~ ^(/images/|/files/|/css/|/js/)/.*\.(jpe?g|webp|gif|css|png|js|ico|pdf|m4a|mov|mp3)$
:定义要替换为 Vultr CDN URL 的请求模式。
rewrite ^ https://cdn-example88.vultrcdn.com$request_uri?
:
用你的 Vultr CDN URL 重写所有匹配的请求类型。
$request_uri?
表达式与您的请求模式相匹配,以保留原始主机 URL 结构。permanent
:
使用
301 Moved Permanently
状态代码永久重定向请求。access_log off
:
关闭所有重定向信息的访问日志。
修改后的 Nginx 配置应如下所示:
- 打开 Nginx 虚拟主机配置。
-
server { listen 80 default_server; listen [::]:80 default_server; server_name example.com; root /var/www/html; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } location ~ ^(/images/|/files/|/css/|/js/)/.*\.(jpe?g|webp|gif|css|png|js|ico|pdf|m4a|mov|mp3)$ { rewrite ^ https://cdn-example88.vultrcdn.com$request_uri? permanent; access_log off; } }
- 测试 Nginx 配置是否有错误。
$ sudo nginx -t
- 重启 Nginx 以应用配置更改。
$ sudo systemctl restart nginx
小结
您已将 Nginx 网络服务器配置为将网络应用程序请求转发到 Vultr CDN URL。Web 服务器会将每个有效的请求模式转发到 Vultr CDN URL,该 URL 会根据请求的数据类型提供响应。根据你的网络应用程序结构,修改你的 Nginx 配置,使用你的 Vultr CDN URL 发送符合特定模式的所有内容类型,以提高一般应用程序的性能和用户体验。
评论留言