/* This is a JSON format configuration file */ { /* //ssl:The global SSL settings. "key" and "cert" are the path to the SSL key and certificate. While // "conf" is an array of 1 or 2-element tuples that supplies file style options for `SSL_CONF_cmd`. "ssl": { "cert": "../../trantor/trantor/tests/server.crt", "key": "../../trantor/trantor/tests/server.key", "conf": [ //["Options", "-SessionTicket"], //["Options", "Compression"] ] }, "listeners": [ { //address: Ip address,0.0.0.0 by default "address": "0.0.0.0", //port: Port number "port": 80, //https: If true, use https for security,false by default "https": false }, { "address": "0.0.0.0", "port": 443, "https": true, //cert,key: Cert file path and key file path, empty by default, //if empty, use the global setting "cert": "", "key": "", //use_old_tls: enable the TLS1.0/1.1, false by default "use_old_tls": false, "ssl_conf": [ //["MinProtocol", "TLSv1.3"] ] } ], "db_clients": [ { //name: Name of the client,'default' by default "name": "default", //rdbms: Server type, postgresql,mysql or sqlite3, "postgresql" by default "rdbms": "postgresql", //filename: Sqlite3 db file name //"filename":"", //host: Server address,localhost by default "host": "127.0.0.1", //port: Server port, 5432 by default "port": 5432, //dbname: Database name "dbname": "test", //user: 'postgres' by default "user": "", //passwd: '' by default "passwd": "", //is_fast: false by default, if it is true, the client is faster but user can't call //any synchronous interface of it. "is_fast": false, //client_encoding: The character set used by the client. it is empty string by default which //means use the default character set. //"client_encoding": "", //number_of_connections: 1 by default, if the 'is_fast' is true, the number is the number of //connections per IO thread, otherwise it is the total number of all connections. "number_of_connections": 1, //timeout: -1.0 by default, in seconds, the timeout for executing a SQL query. //zero or negative value means no timeout. "timeout": -1.0, //auto_batch: this feature is only available for the PostgreSQL driver(version >= 14.0), see //the wiki for more details. "auto_batch": false //connect_options: extra options for the connection. Only works for PostgreSQL now. //For more information, see https://www.postgresql.org/docs/16/libpq-connect.html#LIBPQ-CONNECT-OPTIONS //"connect_options": { "statement_timeout": "1s" } } ], "redis_clients": [ { //name: Name of the client,'default' by default "name": "default", //host: Server IP, 127.0.0.1 by default "host": "127.0.0.1", //port: Server port, 6379 by default "port": 6379, //username: '' by default which means 'default' in redis ACL "username": "", //passwd: '' by default "passwd": "", //db index: 0 by default "db": 0, //is_fast: false by default, if it is true, the client is faster but user can't call //any synchronous interface of it. "is_fast": false, //number_of_connections: 1 by default, if the 'is_fast' is true, the number is the number of //connections per IO thread, otherwise it is the total number of all connections. "number_of_connections": 1, //timeout: -1.0 by default, in seconds, the timeout for executing a command. //zero or negative value means no timeout. "timeout": -1.0 } ],*/ "app": { //number_of_threads: The number of IO threads, 1 by default, if the value is set to 0, the number of threads //is the number of CPU cores "number_of_threads": 1, //enable_session: False by default "enable_session": true, "session_timeout": 0, //string value of SameSite attribute of the Set-Cookie HTTP response header //valid value is either 'Null' (default), 'Lax', 'Strict' or 'None' "session_same_site": "Null", //session_cookie_key: The cookie key of the session, "JSESSIONID" by default "session_cookie_key": "JSESSIONID", //session_max_age: The max age of the session cookie, -1 by default "session_max_age": -1, //document_root: Root path of HTTP document, default path is ./ "document_root": "./", //home_page: Set the HTML file of the home page, the default value is "index.html" //If there isn't any handler registered to the path "/", the home page file in the "document_root" is send to clients as a response //to the request for "/". "home_page": "index.html", //use_implicit_page: enable implicit pages if true, true by default "use_implicit_page": true, //implicit_page: Set the file which would the server access in a directory that a user accessed. //For example, by default, http://localhost/a-directory resolves to http://localhost/a-directory/index.html. "implicit_page": "index.html", //static_file_headers: Headers for static files /*"static_file_headers": [ { "name": "field-name", "value": "field-value" } ],*/ //upload_path: The path to save the uploaded file. "uploads" by default. //If the path isn't prefixed with /, ./ or ../, //it is relative path of document_root path "upload_path": "uploads", /* file_types: * HTTP download file types,The file types supported by drogon * by default are "html", "js", "css", "xml", "xsl", "txt", "svg", * "ttf", "otf", "woff2", "woff" , "eot", "png", "jpg", "jpeg", * "gif", "bmp", "ico", "icns", etc. */ "file_types": [ "gif", "png", "jpg", "js", "css", "html", "ico", "swf", "xap", "apk", "cur", "xml", "webp", "svg" ], // mime: A dictionary that extends the internal MIME type support. Maps extensions into new MIME types // note: This option only adds MIME to the sever. `file_types` above have to be set for the server to serve them. "mime": { // "text/markdown": "md", // "text/gemini": ["gmi", "gemini"] }, //locations: An array of locations of static files for GET requests. "locations": [ { //uri_prefix: The URI prefix of the location prefixed with "/", the default value is "" that disables the location. //"uri_prefix": "/.well-known/acme-challenge/", //default_content_type: The default content type of the static files without //an extension. empty string by default. "default_content_type": "text/plain", //alias: The location in file system, if it is prefixed with "/", it //presents an absolute path, otherwise it presents a relative path to //the document_root path. //The default value is "" which means use the document root path as the location base path. "alias": "", //is_case_sensitive: indicates whether the URI prefix is case sensitive. "is_case_sensitive": false, //allow_all: true by default. If it is set to false, only static files with a valid extension can be accessed. "allow_all": true, //is_recursive: true by default. If it is set to false, files in sub directories can't be accessed. "is_recursive": true, //filters: string array, the filters applied to the location. "filters": [] } ], //max_connections: maximum number of connections, 100000 by default "max_connections": 100000, //max_connections_per_ip: maximum number of connections per client, 0 by default which means no limit "max_connections_per_ip": 0, //Load_dynamic_views: False by default, when set to true, drogon //compiles and loads dynamically "CSP View Files" in directories defined //by "dynamic_views_path" "load_dynamic_views": false, //dynamic_views_path: If the path isn't prefixed with /, ./ or ../, //it is relative path of document_root path "dynamic_views_path": [ "./views" ], //dynamic_views_output_path: Default by an empty string which means the output path of source //files is the path where the csp files locate. If the path isn't prefixed with /, it is relative //path of the current working directory. "dynamic_views_output_path": "", //json_parser_stack_limit: 1000 by default, the maximum number of stack depth when reading a json string by the jsoncpp library. "json_parser_stack_limit": 1000, //enable_unicode_escaping_in_json: true by default, enable unicode escaping in json. "enable_unicode_escaping_in_json": true, //float_precision_in_json: set precision of float number in json. "float_precision_in_json": { //precision: 0 by default, 0 means use the default precision of the jsoncpp lib. "precision": 0, //precision_type: must be "significant" or "decimal", defaults to "significant" that means //setting max number of significant digits in string, "decimal" means setting max number of //digits after "." in string "precision_type": "significant" }, //log: Set log output, drogon output logs to stdout by default "log": { //use_spdlog: Use spdlog library to log "use_spdlog": false, //log_path: Log file path,empty by default,in which case,logs are output to the stdout //"log_path": "./", //logfile_base_name: Log file base name,empty by default which means drogon names logfile as //drogon.log ... "logfile_base_name": "", //log_size_limit: 100000000 bytes by default, //When the log file size reaches "log_size_limit", the log file is switched. "log_size_limit": 100000000, //max_files: 0 by default, //When the number of old log files exceeds "max_files", the oldest file will be deleted. 0 means never delete. "max_files": 0, //log_level: "DEBUG" by default,options:"TRACE","DEBUG","INFO","WARN" //The TRACE level is only valid when built in DEBUG mode. "log_level": "DEBUG", //display_local_time: false by default, if true, the log time is displayed in local time "display_local_time": false }, //run_as_daemon: False by default "run_as_daemon": false, //handle_sig_term: True by default "handle_sig_term": true, //relaunch_on_error: False by default, if true, the program will be restart by the parent after exiting; "relaunch_on_error": false, //use_sendfile: True by default, if true, the program //uses sendfile() system-call to send static files to clients; "use_sendfile": true, //use_gzip: True by default, use gzip to compress the response body's content; "use_gzip": true, //use_brotli: False by default, use brotli to compress the response body's content; "use_brotli": false, //static_files_cache_time: 5 (seconds) by default, the time in which the static file response is cached, //0 means cache forever, the negative value means no cache "static_files_cache_time": 5, //simple_controllers_map: Used to configure mapping from path to simple controller //"simple_controllers_map": [ // { // "path": "/path/name", // "controller": "controllerClassName", // "http_methods": [ // "get", // "post" // ], // "filters": [ // "FilterClassName" // ] // } //], //idle_connection_timeout: Defaults to 60 seconds, the lifetime //of the connection without read or write "idle_connection_timeout": 60, //server_header_field: Set the 'Server' header field in each response sent by drogon, //empty string by default with which the 'Server' header field is set to "Server: drogon/version string\r\n" "server_header_field": "", //enable_server_header: Set true to force drogon to add a 'Server' header to each HTTP response. The default //value is true. "enable_server_header": true, //enable_date_header: Set true to force drogon to add a 'Date' header to each HTTP response. The default //value is true. "enable_date_header": true, //keepalive_requests: Set the maximum number of requests that can be served through one keep-alive connection. //After the maximum number of requests are made, the connection is closed. //The default value of 0 means no limit. "keepalive_requests": 0, //pipelining_requests: Set the maximum number of unhandled requests that can be cached in pipelining buffer. //After the maximum number of requests are made, the connection is closed. //The default value of 0 means no limit. "pipelining_requests": 0, //gzip_static: If it is set to true, when the client requests a static file, drogon first finds the compressed //file with the extension ".gz" in the same path and send the compressed file to the client. //The default value of gzip_static is true. "gzip_static": true, //br_static: If it is set to true, when the client requests a static file, drogon first finds the compressed //file with the extension ".br" in the same path and send the compressed file to the client. //The default value of br_static is true. "br_static": true, //client_max_body_size: Set the maximum body size of HTTP requests received by drogon. The default value is "1M". //One can set it to "1024", "1k", "10M", "1G", etc. Setting it to "" means no limit. "client_max_body_size": "1M", //max_memory_body_size: Set the maximum body size in memory of HTTP requests received by drogon. The default value is "64K" bytes. //If the body size of a HTTP request exceeds this limit, the body is stored to a temporary file for processing. //Setting it to "" means no limit. "client_max_memory_body_size": "64K", //client_max_websocket_message_size: Set the maximum size of messages sent by WebSocket client. The default value is "128K". //One can set it to "1024", "1k", "10M", "1G", etc. Setting it to "" means no limit. "client_max_websocket_message_size": "128K", //reuse_port: Defaults to false, users can run multiple processes listening on the same port at the same time. "reuse_port": false, // enabled_compressed_request: Defaults to false. If true the server will automatically decompress compressed request bodies. // Currently only gzip and br are supported. Note: max_memory_body_size and max_body_size applies twice for compressed requests. // Once when receiving and once when decompressing. i.e. if the decompressed body is larger than max_body_size, the request // will be rejected. "enabled_compressed_request": false, // enable_request_stream: Defaults to false. If true the server will enable stream mode for http requests. // See the wiki for more details. "enable_request_stream": false, }, //plugins: Define all plugins running in the application "plugins": [ { //name: The class name of the plugin "name": "drogon::plugin::PromExporter", //dependencies: Plugins that the plugin depends on. It can be commented out "dependencies": [], //config: The configuration of the plugin. This json object is the parameter to initialize the plugin. //It can be commented out "config": { "path": "/metrics" } }, { "name": "drogon::plugin::AccessLogger", "dependencies": [], "config": { "use_spdlog": false, "log_path": "", "log_format": "", "log_file": "access.log", "log_size_limit": 0, "use_local_time": true, "log_index": 0, // "show_microseconds": true, // "custom_time_format": "", // "use_real_ip": false } } ], //custom_config: custom configuration for users. This object can be get by the app().getCustomConfig() method. "custom_config": { "realm": "drogonRealm", "opaque": "drogonOpaque", "credentials": [ { "user": "drogon", "password": "dr0g0n" } ] } }