nginx добавляет_after_body и if

#nginx

#nginx

Вопрос:

Nginx утверждает, что «add_after_body» не допускается в операторе «if», есть ли какая-либо альтернатива? Вот текущая конфигурация

 if ($request_uri ~* ^/(home|page1|page2|page4)(.* ).html$) {
        add_after_body /stats.html;
}
  

Та же проблема возникает, если вместо этого поместить блок if в блок location

Вот ошибка:

 Reloading nginx configuration: nginx: [emerg] "add_after_body" directive is not allowed here in /etc/nginx/sites-enabled/default:22
nginx: configuration file /etc/nginx/nginx.conf test failed
  

Вот полный серверный блок:

 server {

    listen   80; ## listen for ipv4
    #listen   [::]:80; ## listen for ipv6

    server_name .mydoma.in;

    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;

    root   /var/www;

    gzip             on;
    gzip_min_length  1000;
    gzip_proxied     expired no-cache no-store private auth;
    gzip_types       text/plain application/xml;
    gzip_disable     "MSIE [1-6].";
    gzip_comp_level  4;

    #if ($request_uri ~* ^/(forum|thread|post|announcement|user|calendar|event|top10)(.* ).html$) {
    #   add_after_body /stats.html;
    #}

    location / {
        index  index.html index.htm index.php;

        #MyBB Config

        rewrite ^/forum-([0-9] ).html$ /forumdisplay.php?fid=$1;
        rewrite ^/forum-([0-9] )-page-([0-9] ).html$ /forumdisplay.php?fid=$1amp;page=$2;
        rewrite ^/thread-([0-9] ).html$ /showthread.php?tid=$1;
        rewrite ^/thread-([0-9] )-page-([0-9] ).html$ /showthread.php?tid=$1amp;page=$2;
        rewrite ^/thread-([0-9] )-lastpost.html$ /showthread.php?tid=$1amp;action=lastpost;
        rewrite ^/thread-([0-9] )-nextnewest.html$ /showthread.php?tid=$1amp;action=nextnewest;
        rewrite ^/thread-([0-9] )-nextoldest.html$ /showthread.php?tid=$1amp;action=nextoldest;
        rewrite ^/thread-([0-9] )-newpost.html$ /showthread.php?tid=$1amp;action=newpost;
        rewrite ^/thread-([0-9] )-post-([0-9] ).html$ /showthread.php?tid=$1amp;pid=$2;

        rewrite ^/post-([0-9] ).html$ /showthread.php?pid=$1;

        rewrite ^/announcement-([0-9] ).html$ /announcements.php?aid=$1;

        rewrite ^/user-([0-9] ).html$ /member.php?action=profileamp;uid=$1;

        rewrite ^/calendar-([0-9] ).html$ /calendar.php?calendar=$1;
        rewrite ^/calendar-([0-9] )-year-([0-9] ).html$ /calendar.php?action=yearviewamp;calendar=$1amp;year=$2;
        rewrite ^/calendar-([0-9] )-year-([0-9] )-month-([0-9] ).html$ /calendar.php?calendar=$1amp;year=$2amp;month=$3;
        rewrite ^/calendar-([0-9] )-year-([0-9] )-month-([0-9] )-day-([0-9] ).html$ /calendar.php?action=dayviewamp;calendar=$1amp;year=$2amp;month=$3amp;day=$4;
        rewrite ^/calendar-([0-9] )-week-(n?[0-9] ).html$ /calendar.php?action=weekviewamp;calendar=$1amp;week=$2;

        rewrite ^/event-([0-9] ).html$ /calendar.php?action=eventamp;eid=$1;

        rewrite ^/sitemap-([^./] ).xml$ /misc.php?google_seo_sitemap=$1;

        #if ($request_uri ~* "^/(forum|thread|post|announcement|user|calendar|event|top10)") {
            #        add_after_body /stats.html;
        #}

    }


    location ~ .php$ {
        fastcgi_split_path_info ^(. .php)(/. )$;
        include /etc/nginx/fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_pass php;
    }

    #expires 1M;

    # Static assets
    location ~* ^. .(manifest|appcache)$ {
        expires -1;
    }

    # Set expires max on static file types
    location ~* ^. .(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|eot|mp4|ogg|ogv|webm)$ {
        expires max;
        access_log off;
    }

    # opt-in to the future
    add_header "X-UA-Compatible" "IE=Edge,chrome=1";

    location = /50x/ {
        random_index on;
    }

    error_page 500 502 503 504  /50X/;
}
  

Я попытался поместить инструкцию как внутри location инструкции, так и снаружи ( add_after_body работает без if инструкции как внутри location блока, так и server в block)

Комментарии:

1. Вы собирали nginx с помощью модуля добавления , как --with-http_addition_module ? Это требуется для add_after_body директивы, но не включено по умолчанию. Кроме того, я пока не знаю nginx достаточно хорошо, чтобы сказать, но это может быть просто разрешено в if заявлениях — они кажутся ограничительными и не поощряются.

2. Пожалуйста, покажите точное сообщение об ошибке.

3. Да, я собирал nginx с http_addition помощью модуля, однако я не вижу никакой альтернативы использованию if инструкции, кроме множества location инструкций, которые я бы предпочел не писать

Ответ №1:

Вы можете использовать это. Это кажется подходящим.

 location ~ (forumdisplay|showthread|announcements|member|calendar.php$) {
  fastcgi_split_path_info ^(. .php)(/. )$;
  include /etc/nginx/fastcgi_params;
  fastcgi_intercept_errors on;
  fastcgi_pass php;
  add_after_body /stats.html;
}
  

Комментарии:

1. Я не могу этого сделать, потому что страницы созданы не мной

2. Изначально я пробовал это, но это заблокировало обработку других местоположений, потому что эти URI переписываются позже, использование местоположения позже останавливает перезапись, другое решение — помещать каждую перезапись в местоположение, но я бы предпочел этого не делать

3. Я пробовал что-то подобное, но перезаписи не сработают, если я использую другое местоположение.