Я пытаюсь улучшить время до первого байта. 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 будет некоторым улучшением описания.