| @@ -275,7 +275,7 @@ matrix_nginx_proxy_proxy_matrix_federation_api_ssl_trusted_certificate: "{{ matr | |||||
| # The tmpfs at /tmp needs to be large enough to handle multiple concurrent file uploads. | # The tmpfs at /tmp needs to be large enough to handle multiple concurrent file uploads. | ||||
| matrix_nginx_proxy_tmp_directory_size_mb: "{{ (matrix_nginx_proxy_proxy_matrix_federation_api_client_max_body_size_mb | int) * 50 }}" | matrix_nginx_proxy_tmp_directory_size_mb: "{{ (matrix_nginx_proxy_proxy_matrix_federation_api_client_max_body_size_mb | int) * 50 }}" | ||||
| matrix_nginx_proxy_tmp_cache_directory_size_mb: "{{ (matrix_nginx_proxy_synapse_cache_max_size_mb | int) * 2 }}" | |||||
| # A list of strings containing additional configuration blocks to add to the nginx server configuration (nginx.conf). | # A list of strings containing additional configuration blocks to add to the nginx server configuration (nginx.conf). | ||||
| # for big matrixservers to enlarge the number of open files to prevent timeouts | # for big matrixservers to enlarge the number of open files to prevent timeouts | ||||
| # matrix_nginx_proxy_proxy_additional_configuration_blocks: | # matrix_nginx_proxy_proxy_additional_configuration_blocks: | ||||
| @@ -557,6 +557,16 @@ matrix_nginx_proxy_synapse_media_repository_locations: [] | |||||
| matrix_nginx_proxy_synapse_user_dir_locations: [] | matrix_nginx_proxy_synapse_user_dir_locations: [] | ||||
| matrix_nginx_proxy_synapse_frontend_proxy_locations: [] | matrix_nginx_proxy_synapse_frontend_proxy_locations: [] | ||||
| # synapse content caching | |||||
| matrix_nginx_proxy_synapse_cache_enabled: false | |||||
| matrix_nginx_proxy_synapse_cache_path: "{{ '/tmp/synapse-cache' if matrix_nginx_proxy_enabled else matrix_nginx_proxy_data_path+'/synapse-cache' }}" | |||||
| matrix_nginx_proxy_synapse_cache_keys_zone_name: "STATIC" | |||||
| matrix_nginx_proxy_synapse_cache_keys_zone_size: "10m" | |||||
| matrix_nginx_proxy_synapse_cache_inactive_time: "48h" | |||||
| matrix_nginx_proxy_synapse_cache_max_size_mb: 1024 | |||||
| matrix_nginx_proxy_synapse_cache_proxy_cache_valid_time: "24h" | |||||
| # The amount of worker processes and connections | # The amount of worker processes and connections | ||||
| # Consider increasing these when you are expecting high amounts of traffic | # Consider increasing these when you are expecting high amounts of traffic | ||||
| # http://nginx.org/en/docs/ngx_core_module.html#worker_connections | # http://nginx.org/en/docs/ngx_core_module.html#worker_connections | ||||
| @@ -12,15 +12,17 @@ | |||||
| # | # | ||||
| - name: Ensure Matrix nginx-proxy paths exist | - name: Ensure Matrix nginx-proxy paths exist | ||||
| file: | file: | ||||
| path: "{{ item }}" | |||||
| path: "{{ item.path }}" | |||||
| state: directory | state: directory | ||||
| mode: 0750 | mode: 0750 | ||||
| owner: "{{ matrix_user_username }}" | owner: "{{ matrix_user_username }}" | ||||
| group: "{{ matrix_user_groupname }}" | group: "{{ matrix_user_groupname }}" | ||||
| with_items: | with_items: | ||||
| - "{{ matrix_nginx_proxy_base_path }}" | |||||
| - "{{ matrix_nginx_proxy_data_path }}" | |||||
| - "{{ matrix_nginx_proxy_confd_path }}" | |||||
| - {path: "{{ matrix_nginx_proxy_base_path }}", when: true} | |||||
| - {path: "{{ matrix_nginx_proxy_data_path }}", when: true} | |||||
| - {path: "{{ matrix_nginx_proxy_confd_path }}", when: true} | |||||
| - {path: "{{ matrix_nginx_proxy_synapse_cache_path }}", when: "{{ matrix_nginx_proxy_synapse_cache_enabled and not matrix_nginx_proxy_enabled }}"} | |||||
| when: item.when|bool | |||||
| - name: Ensure Matrix nginx-proxy configured (main config override) | - name: Ensure Matrix nginx-proxy configured (main config override) | ||||
| template: | template: | ||||
| @@ -5,6 +5,9 @@ | |||||
| {% set user_dir_workers = matrix_nginx_proxy_synapse_workers_list|selectattr('type', 'equalto', 'user_dir')|list %} | {% set user_dir_workers = matrix_nginx_proxy_synapse_workers_list|selectattr('type', 'equalto', 'user_dir')|list %} | ||||
| {% set frontend_proxy_workers = matrix_nginx_proxy_synapse_workers_list|selectattr('type', 'equalto', 'frontend_proxy')|list %} | {% set frontend_proxy_workers = matrix_nginx_proxy_synapse_workers_list|selectattr('type', 'equalto', 'frontend_proxy')|list %} | ||||
| {% if matrix_nginx_proxy_synapse_workers_enabled %} | {% if matrix_nginx_proxy_synapse_workers_enabled %} | ||||
| {% if matrix_nginx_proxy_synapse_cache_enabled %} | |||||
| proxy_cache_path {{ matrix_nginx_proxy_synapse_cache_path }} levels=1:2 keys_zone={{ matrix_nginx_proxy_synapse_cache_keys_zone_name }}:{{ matrix_nginx_proxy_synapse_cache_keys_zone_size }} inactive={{ matrix_nginx_proxy_synapse_cache_inactive_time }} max_size={{ matrix_nginx_proxy_synapse_cache_max_size_mb }}m; | |||||
| {% endif %} | |||||
| # Round Robin "upstream" pools for workers | # Round Robin "upstream" pools for workers | ||||
| {% if generic_workers %} | {% if generic_workers %} | ||||
| @@ -95,6 +98,14 @@ server { | |||||
| client_body_buffer_size 25M; | client_body_buffer_size 25M; | ||||
| client_max_body_size {{ matrix_nginx_proxy_proxy_matrix_client_api_client_max_body_size_mb }}M; | client_max_body_size {{ matrix_nginx_proxy_proxy_matrix_client_api_client_max_body_size_mb }}M; | ||||
| proxy_max_temp_file_size 0; | proxy_max_temp_file_size 0; | ||||
| {% if matrix_nginx_proxy_synapse_cache_enabled %} | |||||
| proxy_buffering on; | |||||
| proxy_cache {{ matrix_nginx_proxy_synapse_cache_keys_zone_name }}; | |||||
| proxy_cache_valid any {{ matrix_nginx_proxy_synapse_cache_proxy_cache_valid_time }}; | |||||
| proxy_force_ranges on; | |||||
| add_header X-Cache-Status $upstream_cache_status; | |||||
| {% endif %} | |||||
| } | } | ||||
| {% endfor %} | {% endfor %} | ||||
| {% endif %} | {% endif %} | ||||
| @@ -227,6 +238,14 @@ server { | |||||
| client_body_buffer_size 25M; | client_body_buffer_size 25M; | ||||
| client_max_body_size {{ matrix_nginx_proxy_proxy_matrix_federation_api_client_max_body_size_mb }}M; | client_max_body_size {{ matrix_nginx_proxy_proxy_matrix_federation_api_client_max_body_size_mb }}M; | ||||
| proxy_max_temp_file_size 0; | proxy_max_temp_file_size 0; | ||||
| {% if matrix_nginx_proxy_synapse_cache_enabled %} | |||||
| proxy_buffering on; | |||||
| proxy_cache {{ matrix_nginx_proxy_synapse_cache_keys_zone_name }}; | |||||
| proxy_cache_valid any {{ matrix_nginx_proxy_synapse_cache_proxy_cache_valid_time }}; | |||||
| proxy_force_ranges on; | |||||
| add_header X-Cache-Status $upstream_cache_status; | |||||
| {% endif %} | |||||
| } | } | ||||
| {% endfor %} | {% endfor %} | ||||
| {% endif %} | {% endif %} | ||||
| @@ -22,6 +22,9 @@ ExecStart={{ matrix_host_command_docker }} run --rm --name matrix-nginx-proxy \ | |||||
| --cap-drop=ALL \ | --cap-drop=ALL \ | ||||
| --read-only \ | --read-only \ | ||||
| --tmpfs=/tmp:rw,noexec,nosuid,size={{ matrix_nginx_proxy_tmp_directory_size_mb }}m \ | --tmpfs=/tmp:rw,noexec,nosuid,size={{ matrix_nginx_proxy_tmp_directory_size_mb }}m \ | ||||
| {% if matrix_nginx_proxy_synapse_cache_enabled %} | |||||
| --tmpfs=/tmp/synapse-cache:rw,noexec,nosuid,size={{ matrix_nginx_proxy_tmp_cache_directory_size_mb }}m\ | |||||
| {% endif %} | |||||
| --network={{ matrix_docker_network }} \ | --network={{ matrix_docker_network }} \ | ||||
| {% if matrix_nginx_proxy_container_http_host_bind_port %} | {% if matrix_nginx_proxy_container_http_host_bind_port %} | ||||
| -p {{ matrix_nginx_proxy_container_http_host_bind_port }}:8080 \ | -p {{ matrix_nginx_proxy_container_http_host_bind_port }}:8080 \ | ||||