如何在Nginx网络服务器上使用Vultr CDN

如何在Nginx网络服务器上使用Vultr CDN

Nginx 是一款网络服务器应用程序,可让你使用域名 URL 托管和交付网络应用程序。为了交付静态文件并减少服务器负载,你可以集成一个 Vultr CDN,将文件卸载到多个区域交付,而不是你的原始服务器位置。集成后,Nginx 会向所有匹配的用户请求交付 Vultr CDN URL 响应数据,而不是原始网络应用程序 URL。

本文介绍如何将 Vultr CDN 与 Nginx 网络服务器结合使用,将特定类型的请求路由到 CDN 缓存的静态资源。您将根据自己的网络应用程序结构,使用新的请求规则修改现有的 Nginx 配置,以便使用 Vultr CDN URL 传输图片等静态文件。

准备工作

开始之前:

定位 Nginx 虚拟主机配置

要设置 Nginx Web 服务器并将请求转发到 Vultr CDN URL,请按照以下步骤验证工作虚拟主机配置,并根据 CDN 规则进行修改。

  1. 切换到 Nginx 数据目录。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ cd /etc/nginx/
    $ cd /etc/nginx/
    $ cd /etc/nginx/
    
  2. 搜索包含域名的所有 Nginx 配置。例如, example.com
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ grep -r "example.com" /etc/nginx/
    $ grep -r "example.com" /etc/nginx/
    $ grep -r "example.com" /etc/nginx/
    

    输出结果应如下所示:

    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    /etc/nginx/sites-available/example.com: server_name example.com;
    /etc/nginx/sites-available/example.com: server_name example.com;
    /etc/nginx/sites-available/example.com:    server_name example.com;

    在上述输出结果中,你的域名使用了 /etc/nginx/sites-available/example.com 虚拟主机配置。通常,如果没有虚拟主机配置,Nginx会使用默认配置文件 /etc/nginx/sites-available/default

  3. 查看虚拟主机配置文件并验证网络根目录值。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ cat /etc/nginx/sites-available/example.com
    $ cat /etc/nginx/sites-available/example.com
    $ cat /etc/nginx/sites-available/example.com
    

    输出:

    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    root /var/www/example.com;
    root /var/www/example.com;
    root /var/www/example.com;
  4. 切换到网络根目录,设置示例应用程序结构。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ cd /var/www/example.com
    $ cd /var/www/example.com
    $ cd /var/www/example.com
    
  5. 创建一个新的样本 images 目录,以测试 Nginx 规则。.
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ sudo mkdir images
    $ sudo mkdir images
    $ sudo mkdir images
    

    将图像文件等样本文件上传到要缓存的目录,并使用 Vultr CDN URL 进行测试。

方法 1:设置修改响应

Nginx 响应修改使用 sub_filter 模块将特定请求类型转发到你的 Vultr CDN URL。当用户创建一个新请求时,Nginx 会修改请求并将其转换到你的 Vultr CDN URL,而不是原服务器 URL。请按照以下步骤设置响应修改,以便将特定请求模式匹配到你的 Vultr CDN URL。

  1. 默认情况下,Nginx 的 sub_filter 模块与 http_sub_module 一起运行。请确认该模块在你的服务器上可用。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ nginx -V
    $ nginx -V
    $ nginx -V
    

    输出:

    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    ........--with-http_gzip_static_module --with-http_sub_module
    ........--with-http_gzip_static_module --with-http_sub_module
    ........--with-http_gzip_static_module --with-http_sub_module
  2. 使用 Nano 等文本编辑器打开 Nginx 虚拟主机配置。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ sudo nano /etc/nginx/sites-available/example.com
    $ sudo nano /etc/nginx/sites-available/example.com
    $ sudo nano /etc/nginx/sites-available/example.com
    
  3. 在文件中添加以下 sub_filter 配置。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    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;
    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;
    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 URL cdn-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 配置应如下所示:

    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    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;
    }
    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; }
    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;
    }
    
  4. 测试 Nginx 配置是否有错误。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ sudo nginx -t
    $ sudo nginx -t
    $ sudo nginx -t
    

    输出:

    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
  5. 重启 Nginx 以应用配置更改。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ sudo systemctl restart nginx
    $ sudo systemctl restart nginx
    $ sudo systemctl restart nginx
    

方法 2:设置重定向

重定向会将特定的 Nginx 请求类型转发到你的 Vultr CDN URL。请求将被重定向到 Vultr CDN URL,而不是从你的原始 URL 发送响应。请按照以下步骤将请求从你的主机 URL 重定向到 Vultr CDN URL。

    1. 打开 Nginx 虚拟主机配置。
      Plain text
      Copy to clipboard
      Open code in new window
      EnlighterJS 3 Syntax Highlighter
      $ sudo nano /etc/nginx/sites-available/example.com
      $ sudo nano /etc/nginx/sites-available/example.com
      $ sudo nano /etc/nginx/sites-available/example.com
    • 在文件中添加包含目标请求类型的新 location 块。用实际的 Vultr CDN URL 替换 cdn-example88.vultrcdn
      Plain text
      Copy to clipboard
      Open code in new window
      EnlighterJS 3 Syntax Highlighter
      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;
      }
      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; }
      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。在配置中

      1. 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 配置应如下所示:

  1. Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    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;
    }
    }
    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; } }
    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;
    }
    }
    
  2. 测试 Nginx 配置是否有错误。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ sudo nginx -t
    $ sudo nginx -t
    $ sudo nginx -t
    
  3. 重启 Nginx 以应用配置更改。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ sudo systemctl restart nginx
    $ sudo systemctl restart nginx
    $ sudo systemctl restart nginx
    

小结

您已将 Nginx 网络服务器配置为将网络应用程序请求转发到 Vultr CDN URL。Web 服务器会将每个有效的请求模式转发到 Vultr CDN URL,该 URL 会根据请求的数据类型提供响应。根据你的网络应用程序结构,修改你的 Nginx 配置,使用你的 Vultr CDN URL 发送符合特定模式的所有内容类型,以提高一般应用程序的性能和用户体验。

评论留言