当使用 NGINX 反向代理时,FastCGI 可以改善 TTFB 吗?

当使用 NGINX 反向代理时,FastCGI 可以改善 TTFB 吗?

我正在尝试缩短第一个字节的时间。HTTP2 有很大帮助,但 TTFB 仍然在 500-700 毫秒之间。我想将其降低到 200 左右。

我看到了一些使用 FastCGI 的建议。我的设置有点棘手,所以我试图了解在哪里/如何设置它:

我在 Apache 服务器上有一个 wordpress 应用,监听端口 8090。这只是为了拥有一个 wordpress 仪表板、公开 API 端点并提供媒体服务。我的第二个 NextJS 应用在 nodejs 上,监听端口 8000。它使用 wordpress API 并实际呈现网站。

Nginx 位于这两个应用程序的前面,用于执行 https/www 重定向,并将请求代理到相应的端口。

据我所知,至少所有资产和页面都是由 nginx 提供的。例如:curl -I -L https://www.example.com/wordpress/wp-content/uploads/2015/05/image.jpg- 响应标头告诉我是 nginx 为它们提供服务。

但我仍然对在 Nginx 上设置 FastCGI 是否合理感到困惑。我仍然猜测实际上是 Apache 处理 PHP 执行,因为我最初使用默认的 apache droplet 设置了工作的 wordpress,然后稍后将 Nginx 放在了前面。我错了吗?在这种情况下,我改善 TTFB 的途径是什么?也许我应该看看我的 Node 应用程序,但我只是不确定如何确定延迟来自哪里。

仅供参考这是我的 /etc/nginx/sites-available/example.com:

server {
    listen 80;
    server_name example.com www.example.com;
    rewrite ^/(.*) https://www.example.com/$1 permanent;
}
server {
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2 default_server;
        root /var/www/html;

        index index.php index.js index.html index.htm index.nginx-debian.html;

        server_name example.com;
        return 301 https://www.example.com$request_uri;
        ssl_certificate /home/ssl/example.com.chained.crt;
        ssl_certificate_key /home/ssl/example.com.key;

        location / {
        proxy_pass http://localhost:8000;
        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;
        }

        location /wordpress {
        proxy_pass http://localhost:8090;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        }
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        root /var/www/html;

        index index.php index.js index.html index.htm index.nginx-debian.html;

        server_name www.example.com;
        ssl_certificate /home/ssl/example.com.chained.crt;
        ssl_certificate_key /home/ssl/example.com.key;

        location / {
        proxy_pass http://localhost:8000;
        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;
        }

        location /wordpress {
        proxy_pass http://localhost:8090;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        }
}

答案1

我最近将一个 wordpress 网站从运行良好的 apache 服务器移出,我不知道 TTFB,但我决定将新服务器更改为 NGINX,它运行得非常好。

我为 Fastcgi_pass 设置的 Fastcgi 应该更改为您安装的 php fpm 的任何版本。

location ~ [^/]\.php(/|$) {
fastcgi_split_path_info  ^(.+\.php)(/.+)$;
fastcgi_index            index.php;
fastcgi_pass             unix:/var/run/php/php7.3-fpm.sock;
include                  fastcgi_params;
fastcgi_param   PATH_INFO       $fastcgi_path_info;
fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300;
}

通过添加上述内容,我现在的 TTFB 为 200ms 左右,这也可以通过前端的 Haproxy 负载均衡器实现。所以是的,我认为改用 fastcgi 和 nginx 会带来某种程度的改进。

  • 编辑 *

最近的变化和信息导致我对此做了一些改变。

 location ~ [^/]\.php(/|$) {
fastcgi_split_path_info  ^(.+\.php)(/.+)$;
fastcgi_pass             unix:/run/php/php8.0-fpm.sock;
include snippets/fastcgi-php.conf;
fastcgi_read_timeout 600;
}

通过包含自动包含路径和脚本参数以及参数的片段可以改变这一点。

相关内容