"access_log" directive is not allowed here in... how to do this properly?

Alexander Kolesen kolesen.a at gmail.com
Sun Mar 25 23:29:38 UTC 2012


> Hello !
> 
> Iam trying to log the requests coming from a list of countries into a seperate
> log file.. Iam using the config below... BUt iam getting this error:
> 
> [emerg]: "access_log" directive is not allowed here in /etc/nginx/nginx.conf:55
> configuration file /etc/nginx/nginx.conf test failed
> 
> How could I accomplish what iam trying to do?
> 
> Thanks!
> 
> --Mike
> 
> 
> http {
>          ......
>          .......
> 
> geoip_country  /etc/nginx/GeoIP.dat;
>       
> map $geoip_country_code $log {
>                         default       0;
>                         CN 1; #"China"
>                         RO 1; #"Romania"
>                         IQ 1; #"Iraq"
>                         IR 1; #"Iran
>                         HK 1; #"Hong Kong"
>                         IN 1; #"India"
>                         }
> 
>         server {
>                 listen   80;
>                 server_name  domain.com;
>                 .....
>                 .....
>                 if ($log) { access_log  /root/access-selected-slim.log; }
>                 location / { proxy_pass http://12.163.169.32:80/;  }
> 
>                 }
>      }
> 

If you want to log queries from only the listed countries,
you may write the following:

http {
         ......
         .......

geoip_country  /etc/nginx/GeoIP.dat;

map $geoip_country_code $log {
                        default       dev/null;
                        CN root/access-selected-slim.log; #"China"
                        RO root/access-selected-slim.log; #"Romania"
                        IQ root/access-selected-slim.log; #"Iraq"
                        IR root/access-selected-slim.log; #"Iran
                        HK root/access-selected-slim.log; #"Hong Kong"
                        IN root/access-selected-slim.log; #"India"
                        }

        server {
                listen   80;
                server_name  domain.com;
                .....
                .....   
                access_log /$log;
                location / { proxy_pass http://12.163.169.32:80/;  }

                }
     }


But note that access logs with variables in their names have limitatios. 
Refer to the http://wiki.nginx.org/HttpLogModule



More information about the nginx mailing list