Не могу настроить передачу заголовков Last Modified через PHP на ngnix

12 3
N
На сайте с 02.04.2024
Offline
9
1413

Добрый день всем!

У меня на VDS стоит nginx 1.18.0

Проблема в том, что я хочу настроить передачу заголовков Last Modified через PHP

header ("Last-Modified: " . date("D, d M Y H:i:s", time()) . " GMT");    

Но через PHP не работает, а nginx получается через директиву

add_header Last-Modified $date_gmt;

Но дело в том, что многие страницы у меня на сайте не обновляются месяцами, для них я хочу оставить статичный Last Modified

Код конфиг файла прилагаю. Заранее благодарю за помощь!

server {
        server_name site.ru www.site.ru;
        charset UTF-8;
        index index.php index.html;
        disable_symlinks if_not_owner from=$root_path;
        include /etc/nginx/vhosts-includes/*.conf;
        include /etc/nginx/vhosts-resources/site.ru/*.conf;
        access_log /var/www/httpd-logs/site.ru.access.log;
        error_log /var/www/httpd-logs/site.ru.error.log notice;
        set $root_path /var/www/site/data/site.ru;
        ssi_last_modified on;
  if_modified_since before;     
        
        root $root_path;
        gzip on;
        gzip_comp_level 5;
        gzip_disable "msie6";
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
        
        
if ($host ~* www\.(.*)) {
                  set $host_without_www $1;
                  rewrite ^(.*)$ http://$host_without_www$1 permanent;
}
 
        
        
location / {    
        try_files $uri $uri/ /index.php?q=$request_uri;
  if (!-e $request_filename) {
     rewrite ^(.*)$ /index.php;
  }
location ~ [^/]\.ph(p\d*|tml)$ {
                        try_files /does_not_exists @php;
}
                
 
                location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|webp|woff|woff2)$ {
                        expires 365d;
                add_header Cache-Control no-store;
                etag on;
                if_modified_since before;
                }
        }
        location @php {
                fastcgi_index index.php;
                fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f info@site.ru";
                fastcgi_pass unix:/var/www/php-fpm/3.sock;
                fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
                try_files $uri =404;
                include fastcgi_params;
                include /etc/nginx/vhosts-resources/site.ru/dynamic/*.conf;
                fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f info@site.ru";
                if_modified_since before;
                 etag on;
              
            
             
        }
        return 301 https://$host:443$request_uri;
        listen 11.11.11.11:80;
}
server {
        server_name site.ru www.site.ru;
        ssl_certificate "/var/www/httpd-cert/site/site.ru_le1.crtca";
        ssl_certificate_key "/var/www/httpd-cert/site/site.ru_le1.key";
        ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
        ssl_prefer_server_ciphers on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
        charset UTF-8;
        
        index index.php index.html;
        disable_symlinks if_not_owner from=$root_path;
        include /etc/nginx/vhosts-includes/*.conf;
        include /etc/nginx/vhosts-resources/site.ru/*.conf;
        access_log /var/www/httpd-logs/site.ru.access.log;
        error_log /var/www/httpd-logs/site.ru.error.log notice;
        set $root_path /var/www/site/data/site.ru;
        root $root_path;
        gzip on;
        gzip_comp_level 5;
        gzip_disable "msie6";
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
        ssi_last_modified on;
  if_modified_since before;
        
        
        if ($host ~* www\.(.*)) {
                  set $host_without_www $1;
                  rewrite ^(.*)$ http://$host_without_www$1 permanent;
}
         
        
        
        location / {
        if_modified_since before;
        try_files $uri $uri/ /index.php?q=$request_uri;
  if (!-e $request_filename) {
                rewrite ^(.*)$ /index.php;
                }
        
        location ~ /\.user\.ini {
        deny all;
        return 403;
    }
    location ~* /protect345/(adm|code|data|lang)/ {
        deny all;
        return 403;
    }
        
                location ~ [^/]\.ph(p\d*|tml)$ {
                        try_files /does_not_exists @php;
                }
                 
                location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|webp|woff|woff2)$ {
                        if_modified_since before;
                  add_header Cache-Control no-store;
                        expires 365d;
                }
        }
        location @php {
                fastcgi_index index.php;
                fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f info@site.ru";
                fastcgi_pass unix:/var/www/php-fpm/3.sock;
                fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
                try_files $uri =404;
                include fastcgi_params;
                include /etc/nginx/vhosts-resources/site.ru/dynamic/*.conf;
        
                if_modified_since before;          
          etag on;
             
             
        }
        listen 11.11.11.11:443 ssl;
}


lutskboy
На сайте с 22.11.2013
Offline
184
#1
nFat :

header ("Last-Modified: " . date("D, d M Y H:i:s", time()) . " GMT");    

Но через PHP не работает

а должно

в дле глянул. вот так header ("Last-Modified: " . date('r', $_DOCUMENT_DATE) ." GMT");

Aisamiery
На сайте с 12.04.2015
Offline
311
#2
Если создать пустой php файл и там вызвать заголовок то он будет отправляться или нет? По nginx с виду не видно проблемы, но может у вас там какая то буферизация на стороне кода
Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#3
Aisamiery #:
Если создать пустой php файл и там вызвать заголовок то он будет отправляться или нет? По nginx с виду не видно проблемы, но может у вас там какая то буферизация на стороне кода

Такое ещё бывает, когда сессия работает. Она не может кэшироваться.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
SA
На сайте с 12.04.2024
Offline
32
#4
А если просто вывести дату на php так работает?
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#5
SeoA #:
А если просто вывести дату на php так работает?

Рекомендую просто забить на это болт, лучше заняться другими вещами по раскрутке сайта. А потуги как там будут ПС индексировать, это их заботы.

Vladimir
На сайте с 07.06.2004
Offline
586
#6
nFat :
ssi_last_modified on;

По идее все на месте, должно работать
попробуй добавить

ssi on;
ssi_last_modified on
LEOnidUKG #:

Такое ещё бывает, когда сессия работает. Она не может кэшироваться.

Использовать proxy_ignore_headers
LEOnidUKG #:

Рекомендую просто забить на это болт, лучше заняться другими вещами по раскрутке сайта. А потуги как там будут ПС индексировать, это их заботы.

Зря болт))) Нагрузка на сервер от ПС падает на порядок и нет проблем с индексаций

Аэройога ( https://vk.com/aeroyogadom ) Йога в гамаках ( https://vk.com/aero_yoga ) Аэройога обучение ( https://aeroyoga.ru ) и просто фото ( https://weandworld.com )
E
На сайте с 01.03.2011
Offline
170
#7

Поначитаются своих статей про то, что Last Modified помогает оптимизации, и ковыряют этот рудимент месяцами :) Но хорошо, что пришли на форум, а не штудируете поддержку хостера. Хотя...

Так вот - заголовка этого нет, потому что у вас nginx в качестве фронтенда до fpm. Аналогичная проблема была бы, если бы в качестве фронтенда был Apache.  Короче говоря, при использовании nginx в связке с любым бэкендом через проксирование (fastcgi_pass, proxy_pass), хидер Last Modified - режется. Добавить его не получится. Никак, вообще. 


Vladimir #:
По идее все на месте, должно работать
попробуй добавить

А вот и рубрика - вредные советы. Действительно, хидер появится. Однако вы так включаете целую систему ssi, которая на уровне nginx начинает исполнять код... прописанный в html. 

Как итог - вот такие ошибки https://wordpress.org/support/topic/an-error-occurred-while-processing-the-directive-7/

LEOnidUKG #:

Рекомендую просто забить на это болт, лучше заняться другими вещами по раскрутке сайта. А потуги как там будут ПС индексировать, это их заботы.

Самый правильный и верный совет. ТС, забейте на этот хидер, не мучайте ни себя, ни окружающих. Погоды он вам не сделает.

Vladimir #:

Зря болт))) Нагрузка на сервер от ПС падает на порядок и нет проблем с индексаций

Опубликуете исследование с результатами, где действительно был практический толк от этого хидера? 

Я вот смотрю популярные сайты - хабр, яндекс, серч, ни у кого из них хидера нет. Почему так?

An error occurred while processing the directive
An error occurred while processing the directive
  • wordpress.org
WP 6.0.2 – 6.0.3 Got error on plugin frontpage: [an error occurred while processing the directive] x4 times (3 times in footer and 1 time after buttons)
E
На сайте с 01.03.2011
Offline
170
#8

И ещё, ТС, обратите внимание на конфиг, а именно, что вы с ним делаете. 


Зачем вы это делаете? У вас есть директивы:

        include /etc/nginx/vhosts-includes/*.conf;
        include /etc/nginx/vhosts-resources/site.ru/*.conf;

Внутри сервера

Есть директива

 include /etc/nginx/vhosts-resources/site.ru/dynamic/*.conf;

Внутри локейшена


Что мешает вынести конфиги именно туда? Зачем городить ЭТО внутри основного хоста?

Vladimir
На сайте с 07.06.2004
Offline
586
#9
evgeniymx #:

Поначитаются своих статей про то, что Last Modified помогает оптимизации

Аналогичная проблема была бы, если бы в качестве фронтенда был Apache. 

ssi, которая на уровне nginx начинает исполнять код... прописанный в html. 

Самый правильный и верный совет. ТС, забейте на этот хидер, не мучайте ни себя, ни окружающих.

Опубликуете исследование с результатами, где действительно был практический толк от этого хидера?

Я вот смотрю популярные сайты - хабр, яндекс, серч, ни у кого из них хидера нет. Почему так?

- 13 лет на форуме, а так и не почитал статей про Last Modified ????😭
Чтобы данный заголовок сервера помогал в чем то, нужно почитать хотя бы минимум. Ссылку дать?
- Нет аналогичной проблемы, все работает.
- Читать умеешь? (SSI) - попробовать добавить и естественно проверить.
Говоришь будут ошибки, значит не надо добавлять. Без него работает, значит причина в другом
- Самый правильный совет, погуглить и найти правильный ответ
- С какого тебе что то должен, ищи в инете.
- Приведенные примеры, когда помогают советы от таких как ты — берите хостинг/сервер помощнее, в теме на серче "Яндекс боты перегружают сайт"



Vladimir
На сайте с 07.06.2004
Offline
586
#10
nFat :

Добрый день всем!

У меня на VDS стоит nginx 1.18.0

Обратись к шаманам, поправят настроят конфиг, используй ссылку на сайт
https://searchengines.guru/ru/forum/850525

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий