#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. Я пробовал что-то подобное, но перезаписи не сработают, если я использую другое местоположение.