#/*
# * Copyright (c) 2012 Adobe Systems Incorporated. All rights reserved.
# *
# * Permission is hereby granted, free of charge, to any person obtaining a
# * copy of this software and associated documentation files (the "Software"),
# * to deal in the Software without restriction, including without limitation
# * the rights to use, copy, modify, merge, publish, distribute, sublicense,
# * and/or sell copies of the Software, and to permit persons to whom the
# * Software is furnished to do so, subject to the following conditions:
# *
# * The above copyright notice and this permission notice shall be included in
# * all copies or substantial portions of the Software.
# *
# * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# * DEALINGS IN THE SOFTWARE.
# *
# */
#user                 nginx-api-gateway;
user                 root;
worker_processes     auto;
worker_rlimit_nofile 524288; # 100000

env REDIS_HOST;
env REDIS_PORT;
env REDIS_PASS;
env REDIS_TIMEOUT;
env PUBLIC_MANAGEDURL_HOST;
env PUBLIC_MANAGEDURL_PORT;
env PUBLIC_GATEWAY_URL;
env HOST;
env PORT;

env OPTIMIZE;
env APPID_PKURL;

env REDIS_RETRY_COUNT;
env SNAPSHOTTING;
env CACHING_ENABLED;
env CACHE_SIZE;
env CACHE_TTL;

env TOKEN_GOOGLE_URL;
env TOKEN_FACEBOOK_URL;
env TOKEN_GITHUB_URL;


events {
    use epoll;
    # the actual number of simultaneous connections cannot exceed the current limit on the maximum number of open files,
    # which can be changed by worker_rlimit_nofile.
    worker_connections 16384;
    multi_accept on;
}

pcre_jit on;
# error_log  /var/log/api-gateway/error.log warn;

http {
    default_type  text/plain;

    # Set in-memory buffer size
    client_body_buffer_size 1M;
    client_max_body_size 1M;

    # include all APIs being proxied
    include /etc/api-gateway/conf.d/*.conf;
    include /etc/api-gateway/generated-conf.d/*.conf;
}
