#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

user  nginx;
worker_processes auto;

error_log  /var/log/nginx/error.log  warn;
pid        /var/run/nginx.pid;

events {
  use epoll;
  worker_connections   512;
  multi_accept         on;
}

http {
  server_tokens        off;
  sendfile             on;
  aio                  on;
  tcp_nopush           on;

  keepalive_timeout    60;
  tcp_nodelay          on;

  client_max_body_size 100m;

  #access log
  log_format main '$http_host $remote_addr - $remote_user [$time_local] '
  '"$request" $status $bytes_sent '
  '"$http_referer" "$http_user_agent" '
  '"$gzip_ratio"';

  include /etc/nginx/mime.types;
  default_type  application/octet-stream;

  gzip              on;
  gzip_disable      "msie6";
  gzip_types        text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss application/javascript;
  gzip_vary         on;
  gzip_comp_level   5;

  access_log  /var/log/nginx/access.log  main;
  #conf.d
  include web-console.conf;
}
