Назад | Перейти на главную страницу

FastCGI для улучшения TTFB при использовании NGINX для обратного прокси?

Я пытаюсь улучшить время до первого байта. HTTP2 очень помог, но TTFB все еще находится в пределах 500-700 мс. Хотелось бы снизить его примерно до 200.

Я видел несколько предложений по использованию FastCGI. У меня немного сложная настройка, поэтому я пытаюсь понять, где и как я бы ее настроил:

У меня есть приложение wordpress на сервере Apache, которое прослушивает порт 8090. Это просто панель инструментов WordPress, доступ к конечным точкам API и обслуживание мультимедиа. Мое второе приложение NextJS работает на nodejs, прослушивающем порт 8000. Это использует API wordpress и фактически отображает сайт.

Nginx находится перед обоими этими приложениями для перенаправления https / www и прокси-запросов к соответствующим портам.

Насколько я могу судить, по крайней мере, все ресурсы и страницы обслуживаются nginx. например.: curl -I -L https://www.example.com/wordpress/wp-content/uploads/2015/05/image.jpg - заголовки ответов говорят мне, что их обслуживает nginx.

Но я все еще не понимаю, имеет ли смысл настраивать FastCGI на Nginx. Я все еще предполагаю, что на самом деле Apache обрабатывает выполнение PHP, потому что я изначально настроил рабочий wordpress с каплей apache по умолчанию и позже поставил 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;
        }
}

Я недавно переместил сайт wordpress с сервера apache, который работал достаточно хорошо, я не знаю TTFB, но я решил перейти на NGINX для нового сервера, и он работает фантастически.

Моя настройка Fastcgi для fastcgi_pass должна измениться на любую версию 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 составляет 200 мс, и это также работает через балансировщик нагрузки Haproxy на передней панели. Так что да, я думаю, переход на fastcgi и nginx будет некоторым улучшением описания.