# 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.

# nginx_system_test.sh makes a few substitutions to pagespeed_test.conf.template
# file to generate @@TEST_TMP@@/pagespeed_test.conf

# The cache flush test depends on worker_processes=1.
worker_processes  1;

daemon @@DAEMON@@;
master_process on;

error_log "@@ERROR_LOG@@" debug;
pid "@@TEST_TMP@@/nginx.pid";

events {
  worker_connections  1024;
}


http {
  server_names_hash_bucket_size 128;

  log_format cache '$time_local '
                   '$upstream_cache_status '
                   '$http_host $request ($status) '
                   '"$http_user_agent"';
  access_log "@@ACCESS_LOG@@" cache;

  # Don't put entries in the error log for 403s and 404s.
  log_not_found off;

  proxy_cache_path "@@PROXY_CACHE@@"  levels=1:2   keys_zone=htmlcache:60m inactive=90m  max_size=50m;
  proxy_temp_path "@@TMP_PROXY_CACHE@@";

  pagespeed ProcessScriptVariables all;
  pagespeed StatisticsPath /ngx_pagespeed_statistics;
  pagespeed GlobalStatisticsPath /ngx_pagespeed_global_statistics;
  pagespeed ConsolePath /pagespeed_console;
  pagespeed MessagesPath /ngx_pagespeed_message;
  pagespeed AdminPath /pagespeed_admin;
  pagespeed GlobalAdminPath /pagespeed_global_admin;

  pagespeed StaticAssetPrefix /pagespeed_custom_static/;

  pagespeed MessageBufferSize 200000;
  # Increase the default fetcher timeout to resolve sporadic flakeyness when
  # the native fetcher uses 8.8.8.8 to resolve.
  pagespeed FetcherTimeoutMs 10000;
  pagespeed NativeFetcherMaxKeepaliveRequests 50;

  root "@@SERVER_ROOT@@";

  # Block 5a: Decide on Cache-Control header value to use for outgoing
  # response.
  # Map new_cache_control_header_val to "no-cache, max-age=0" if the
  # content is html and use the original Cache-Control header value
  # in all other cases.
  map $upstream_http_content_type $new_cache_control_header_val {
    default $upstream_http_cache_control;
    "~*text/html" "no-cache, max-age=0";
  }

  pagespeed UsePerVHostStatistics on;
  pagespeed InPlaceResourceOptimization on;
  pagespeed CreateSharedMemoryMetadataCache "@@SHM_CACHE@@" 8192;
  pagespeed BlockingRewriteKey psatest;

  # We need to checkpoint more frequently than usual so that our checkpointing
  # test will definitly have seen one of these intervals and so not be flaky.
  # This needs to have a 1s interval because the checkpointing test has a 2s
  # sleep.
  pagespeed ShmMetadataCacheCheckpointIntervalSec 1;

  # CriticalImagesBeaconEnabled is now on by default, but we disable in testing.
  # With this option enabled, the inline image system test will currently fail.
  # When critical image beaconing is enabled, only critical images are inlined.
  # In our current system test, we aren't yet sending a beacon to identify the
  # critical images to be inlined, so we just disable the option here.
  pagespeed CriticalImagesBeaconEnabled false;

  # By default, resources will not be used for inlining without explicit
  # authorization. Supported values are off or a comma-separated list of strings
  # from {Script,Stylesheet}.
  pagespeed InlineResourcesWithoutExplicitAuthorization off;

  pagespeed Statistics on;
  pagespeed StatisticsLogging on;
  pagespeed LogDir "@@TEST_TMP@@/logdir";

  # Expanded to CentralControllerPort directive when RUN_CONTROLLER_TEST=on
  @@CONTROLLER@@

  server {
    # This is the default vhost for @@SECONDARY_PORT@@
    # Your request will land here when you pass in an unknown host.
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name default.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel CoreFilters;
  }

  server {
    # Sets up a logical home-page server on
    # max-cacheable-content-length.example.com.  This server is only used to
    # test ModPagespeedMaxCacheableContentLength, i.e.,
    # max_cacheable_response_content_length.
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name max-cacheable-content-length.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";


    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_javascript;
    pagespeed MaxCacheableContentLength 85;
  }

  # Test how load from file handles maximum sizes.
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name lff-large-files.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel PassThrough;
    pagespeed MaxCacheableContentLength 4096;
    pagespeed LoadFromFile
      "http://lff-large-files.example.com/"
      "@@SERVER_ROOT@@/";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name lff-large-files-no-fallback.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel PassThrough;
    pagespeed MaxCacheableContentLength 4096;
    # http://lff-large-files-no-fallback.example.com/foo.css won't load, because
    # we've configured a LoadFromFile pattern that doesn't match the path the
    # webserver would take.
    pagespeed LoadFromFile
      "http://lff-large-files-no-fallback.example.com/"
      "@@SERVER_ROOT@@/mod_pagespeed_example/styles/";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name pagespeed-off.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed off;
    pagespeed EnableFilters collapse_whitespace;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name pagespeed-on.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed on;
    pagespeed EnableFilters collapse_whitespace;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name pagespeed-standby.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed standby;
    pagespeed EnableFilters collapse_whitespace;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name pagespeed-unplugged.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed unplugged;
    pagespeed EnableFilters collapse_whitespace;
  }

  pagespeed UseNativeFetcher "@@NATIVE_FETCHER@@";
  @@RESOLVER@@

  server {
    # Block 1:  Basic port, server_name definitions.
    # This server represents the external caching layer server which
    # receives user requests and proxies them to the upstream server
    # running on the PRIMARY_PORT when the response is not available in
    # the cache. It also services purge requests from the upstream server.
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name proxy_cache.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    # Disable PageSpeed on this server.
    pagespeed off;

    # Block 2: Define prefix for proxy_cache_key based on the UserAgent.

    # Define placeholder PS-CapabilityList header values for large and small
    # screens with no UA dependent optimizations. Note that these placeholder
    # values should not contain any of ll, ii, dj, jw or ws, since these
    # codes will end up representing optimizations to be supported for the
    # request.
    set $default_ps_capability_list_for_large_screens "LargeScreen.SkipUADependentOptimizations";
    set $default_ps_capability_list_for_small_screens "TinyScreen.SkipUADependentOptimizations";

    # As a fallback, the PS-CapabilityList header that is sent to the upstream
    # PageSpeed server should be for a large screen device with no browser
    # specific optimizations.
    set $ps_capability_list $default_ps_capability_list_for_large_screens;

    # Cache-fragment 1: Desktop User-Agents that support lazyload_images (ll),
    # inline_images (ii) and defer_javascript (dj).
    # Note: Wget is added for testing purposes only.
    if ($http_user_agent ~* "Chrome/|Firefox/|MSIE |Safari|Wget") {
      set $ps_capability_list "ll,ii,dj:";
    }
    # Cache-fragment 2: Desktop User-Agents that support lazyload_images (ll),
    # inline_images (ii), defer_javascript (dj), webp (jw) and lossless_webp
    # (ws).
    if ($http_user_agent ~*
        "Chrome/[2][3-9]+\.|Chrome/[3-9][0-9]+\.|Chrome/[0-9]{3,}\.") {
      set $ps_capability_list "ll,ii,dj,jw,ws:";
    }
    # Cache-fragment 3: This fragment contains (a) Desktop User-Agents that
    # match fragments 1 or 2 but should not because they represent older
    # versions of certain browsers or bots and (b) Tablet User-Agents that
    # correspond to large screens. These will only get optimizations that work
    # on all browsers and use image compression qualities applicable to large
    # screens. Note that even Tablets that are capable of supporting inline or
    # webp images, e.g. Android 4.1.2, will not get these advanced
    # optimizations.
    if ($http_user_agent ~* "Firefox/[1-2]\.|MSIE [5-8]\.|bot|Yahoo!|Ruby|RPT-HTTPClient|(Google \(\+https\:\/\/developers\.google\.com\/\+\/web\/snippet\/\))|Android|iPad|TouchPad|Silk-Accelerated|Kindle Fire") {
      set $ps_capability_list $default_ps_capability_list_for_large_screens;
    }
    # Cache-fragment 4: Mobiles and small screen Tablets will use image compression
    # qualities applicable to small screens, but all other optimizations will be
    # those that work on all browsers.
    if ($http_user_agent ~* "Mozilla.*Android.*Mobile*|iPhone|BlackBerry|Opera Mobi|Opera Mini|SymbianOS|UP.Browser|J-PHONE|Profile/MIDP|portalmmm|DoCoMo|Obigo|Galaxy Nexus|GT-I9300|GT-N7100|HTC One|Nexus [4|7|S]|Xoom|XT907") {
      set $ps_capability_list $default_ps_capability_list_for_small_screens;
    }

    # Block 3a: Bypass the cache for .pagespeed. resource. PageSpeed has its own
    # cache for these, and these could bloat up the caching layer.
    if ($uri ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+") {
      set $bypass_cache "1";
    }

    # For testing purposes, we never generate values that will result in a beacon
    # unless a test request it via "X-Allow-Beacon: yes" in its request header.
    # This is for testing purposes, note that in a production environment,
    # you want 'set_random $rand 0 100;' unconditionally!
    set $rand 5;

    if ($http_x_allow_beacon ~ "yes") {
      set_random $rand 0 100;
    }
    set $should_beacon_header_val "";
    if ($rand ~* "^[0-4]$") {
      set $should_beacon_header_val "random_rebeaconing_key";
      set $bypass_cache 1;
    }

    # Block 3b: Only cache responses to clients that support gzip.  Most clients
    # do, and the cache holds much more if it stores gzipped responses.
    if ($http_accept_encoding !~* gzip) {
      set $bypass_cache "1";
    }

    # Block 4: Location block for purge requests.
    location ~ /purge(/.*) {
      allow 127.0.0.1;
      allow ::1;
      deny all;
      proxy_cache_purge htmlcache $ps_capability_list$1$is_args$args;
    }

    # Block 6: Location block with proxy_cache directives.
    location /mod_pagespeed_test/cachable_rewritten_html/ {
      # 1: Upstream PageSpeed server is running at localhost:@@PRIMARY_PORT@@.
      proxy_pass http://localhost:@@PRIMARY_PORT@@;
      # 2: Use htmlcache as the zone for caching.
      proxy_cache htmlcache;
      # 3: Bypass requests that correspond to .pagespeed. resources
      # or clients that do not support gzip etc.
      proxy_cache_bypass $bypass_cache;
      # 4: Use the redefined proxy_cache_key and make sure the /purge/
      # block uses the same key.
      proxy_cache_key $ps_capability_list$uri$is_args$args;
      # 5: Forward Host header to upstream server.
      proxy_set_header Host $host;
      # 6: Set the PS-CapabilityList header for PageSpeed server to respect.
      proxy_set_header PS-CapabilityList $ps_capability_list;
      add_header PS-CapabilityList $ps_capability_list;
      # 7: Add a header for identifying cache hits/misses/expires. This is
      # for debugging purposes only and can be commented out in production.
      add_header X-Cache $upstream_cache_status;

      # Block 5b: Override Cache-Control headers as needed.
      # Hide the upstream cache control header.
      proxy_hide_header Cache-Control;
      # Add the inferred Cache-Control header.
      add_header Cache-Control $new_cache_control_header_val;

      proxy_set_header PS-ShouldBeacon $should_beacon_header_val;
      proxy_hide_header PS-ShouldBeacon;
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name if-in-server.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";

    pagespeed RewriteLevel PassThrough;
    set $inline_javascript "No";

    if ($http_x_custom_header_inline_js) {
      # TODO(jefftk): Turn on NGX_HTTP_SIF_CONF and figure out how to get
      # pagespeed directives inside of a server location block to be respected,
      # then uncomment the following line and duplicate the if-in-location test
      # for if-in-server.
      #pagespeed EnableFilters inline_javascript;
      set $inline_javascript "Yes";
    }

    add_header "X-Inline-Javascript" $inline_javascript;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name if-in-location.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";


    location / {
      set $inline_javascript "No";
      pagespeed RewriteLevel PassThrough;

      if ($http_x_custom_header_inline_js) {
        pagespeed EnableFilters inline_javascript;
        set $inline_javascript "Yes";
      }

      add_header "X-Inline-Javascript" $inline_javascript;
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name secondary.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";

    pagespeed MapProxyDomain secondary.example.com/gstatic_images
                             http://www.gstatic.com/psa/static;
  }

  # These three vhosts are for testing the experiment framework (Furious).
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name experiment.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed InPlaceResourceOptimization off;

    pagespeed RunExperiment on;
    pagespeed AnalyticsID "123-45-6734";
    pagespeed UseAnalyticsJs false;
    pagespeed ExperimentVariable 2;
    pagespeed ExperimentSpec
      "id=7;enable=recompress_images;disable=convert_jpeg_to_progressive;percent=50";
    pagespeed ExperimentSpec "id=2;enable=recompress_images;percent=50";
    pagespeed ExperimentSpec "id=3;default;percent=0";
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name contentexperiment.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed InPlaceResourceOptimization off;

    pagespeed RunExperiment on;
    pagespeed AnalyticsID "123-45-6734";
    pagespeed UseAnalyticsJs false;
    pagespeed ExperimentVariable 2;
    pagespeed ExperimentSpec
      "id=7;enable=recompress_images;disable=convert_jpeg_to_progressive;percent=50;options=ContentExperimentID=ID:H1BpS2TCRFmJzZgjwyeBHQ,ContentExperimentVariantID=111";
    pagespeed ExperimentSpec
      "id=2;enable=recompress_images;percent=50;options=ContentExperimentID=ID:H1BpS2TCRFmJzZgjwyeBHQ,ContentExperimentVariantID=222";
    pagespeed ExperimentSpec
      "id=3;default;percent=0;options=ContentExperimentID=123,ContentExperimentVariantID=333";
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name experiment.noga.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed RunExperiment on;
    pagespeed ExperimentVariable 2;
    pagespeed ExperimentSpec
      "id=7;enable=recompress_images;disable=convert_jpeg_to_progressive;percent=50";
    pagespeed ExperimentSpec "id=2;enable=recompress_images;percent=50";
    pagespeed ExperimentSpec "id=3;default;percent=0";
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name experiment.devicematch.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed RunExperiment on;
    pagespeed ExperimentSpec
      "id=1;percent=100;matches_device_type=mobile;enable=recompress_images";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name experiment.ajax.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel CoreFilters;
    pagespeed DisableFilters add_instrumentation;
    pagespeed JsInlineMaxBytes 1;
    pagespeed RunExperiment on;
    pagespeed UseAnalyticsJs false;
    pagespeed ExperimentSpec "id=1;percent=100;level=CoreFilters;enable=collapse_whitespace;options=JsInlineMaxBytes=1";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name ajax.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel CoreFilters;
    pagespeed EnableFilters add_instrumentation;
    pagespeed JsInlineMaxBytes 1;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name preserveurls.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed EnableFilters inline_preview_images,lazyload_images;
    pagespeed EnableFilters resize_mobile_images,rewrite_images,sprite_images;
    pagespeed EnableFilters fallback_rewrite_css_urls,flatten_css_imports;
    pagespeed EnableFilters inline_css,move_css_above_scripts,move_css_to_head;
    pagespeed EnableFilters outline_css,rewrite_css,combine_css;
    pagespeed EnableFilters combine_javascript,defer_javascript;
    pagespeed EnableFilters inline_javascript;
    pagespeed EnableFilters outline_javascript,rewrite_javascript;

    location /mod_pagespeed_test/preserveurls/on/ {
       pagespeed JsPreserveURLs On;
       pagespeed ImagePreserveURLs On;
       pagespeed CssPreserveURLs On;
    }

    location /mod_pagespeed_test/preserveurls/off/ {
       pagespeed JsPreserveURLs Off;
       pagespeed ImagePreserveURLs Off;
       pagespeed CssPreserveURLs Off;
    }
  }

  server {
    # Setup a vhost with the critical image beacon and lazyload filter enabled
    # to make sure that critical images are not lazyloaded.
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name imagebeacon.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters lazyload_images;
    pagespeed CriticalImagesBeaconEnabled true;
  }

  server {
    # Setup a vhost with the critical image beacon enabled to make sure that
    # downstream caches and rebeaconing interact correctly.
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name downstreamcacherebeacon.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed RewriteLevel PassThrough;
    pagespeed CriticalImagesBeaconEnabled true;
    # Enable the downstream caching feature and specify a rebeaconing key.
    pagespeed DownstreamCachePurgeLocationPrefix "http://localhost:@@SECONDARY_PORT@@/purge";
    pagespeed DownstreamCacheRebeaconingKey random_rebeaconing_key;
    location ~ .*[.]html {
      add_header Cache-Control "private, max-age=3000";
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name downstreamcacheresource.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_images;
    pagespeed DownstreamCachePurgeLocationPrefix "http://localhost:@@SECONDARY_PORT@@/purge";
  }

  # Set up a reverse proxy (rproxy.) and origin (origin.) as vhosts for
  # showing that we can configure PageSpeed via response headers.
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name rproxy.rmcomments.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel PassThrough;
    pagespeed DisableFilters add_instrumentation,remove_comments;

    # Note that we don't enable remove_comments here; that setting comes from
    # the response headers from origin.rmcomments.example.com
    location / {
      proxy_pass http://127.0.0.1:@@SECONDARY_PORT@@/;
      proxy_set_header "Host" "origin.rmcomments.example.com";
    }
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name origin.rmcomments.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed off;
    location / {
      add_header PageSpeedFilters remove_comments;
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name renderedimagebeacon.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters resize_rendered_image_dimensions;
    pagespeed CriticalImagesBeaconEnabled true;
  }


  # Build a configuration hierarchy where at the root we have turned on
  # OptimizeForBandwidth, and in various subdirectories we override settings
  # to make them more aggressive.
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name optimizeforbandwidth.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed RewriteLevel OptimizeForBandwidth;
    pagespeed DisableFilters add_instrumentation;

    location /mod_pagespeed_test/optimize_for_bandwidth/inline_css {
      pagespeed EnableFilters inline_css;
    }
    location /mod_pagespeed_test/optimize_for_bandwidth/css_urls {
      pagespeed CssPreserveURLs off;
    }
    location /mod_pagespeed_test/optimize_for_bandwidth/image_urls {
      pagespeed ImagePreserveURLs off;
    }
    location /mod_pagespeed_test/optimize_for_bandwidth/core_filters {
      pagespeed RewriteLevel CoreFilters;
    }
  }

  server {
    # For testing with a custom origin header.  In this VirtualHost,
    # /mod_pagespeed_test is included in our DocumentRoot and thus does
    # not need to be in any resource URL paths.  This helps us verify that
    # we are looping back to the corect VirtualHost -- if we hit the wrong
    # one it will not work.  Also we don't have a VirtualHost for
    # sharedcdn.example.com, so the default Host header used for
    # origin-mapping won't work either.  Instead, we want origin-fetches
    # to go back to this VirtualHost so we rely on the new third optional
    # argument to MapOriginDomain.
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name customhostheader.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@_test";
    root "@@SERVER_ROOT@@/mod_pagespeed_test";

    pagespeed on;
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_images;
    # Don't use localhost, as ngx_pagespeed's native fetcher cannot resolve it
    pagespeed MapOriginDomain 127.0.0.1:@@SECONDARY_PORT@@/customhostheader
              sharedcdn.example.com/test customhostheader.example.com;
    pagespeed JpegRecompressionQuality 50;
    pagespeed CriticalImagesBeaconEnabled false;
  }

  server {
    # Sets up a virtual host where we can specify forbidden filters without
    # affecting any other hosts.
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name forbidden.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";


    # Start with all core filters enabled ...
    pagespeed RewriteLevel CoreFilters;
    # ... then forbid these filters ...
    pagespeed ForbidFilters remove_quotes,remove_comments,collapse_whitespace;
    pagespeed ForbidFilters rewrite_css,resize_images;
    # ... and disable but not forbid this one (to ensure we retain its URL).
    pagespeed DisableFilters inline_css;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name unauthorizedresources.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed RewriteLevel PassThrough;
    pagespeed InlineResourcesWithoutExplicitAuthorization Script,Stylesheet;
    pagespeed CssInlineMaxBytes 1000000;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name client-domain-rewrite.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    # Don't actually try to rewrite any resources; the ones in
    # rewrite_domains.html don't actually exist.
    pagespeed RewriteLevel PassThrough;

    pagespeed MapRewriteDomain http://client-domain-rewrite.example.com
              http://src.example.com;
    pagespeed ClientDomainRewrite true;
    pagespeed EnableFilters rewrite_domains;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name url-attribute.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    # Don't actually try to rewrite any resources; the ones in
    # rewrite_domains.html don't actually exist.
    pagespeed RewriteLevel PassThrough;

    # This is used for testing dynamically defined url-valued
    # attributes
    pagespeed UrlValuedAttribute span src Hyperlink;
    pagespeed UrlValuedAttribute hr imgsrc Image;
    pagespeed DomainRewriteHyperlinks on;
    pagespeed MapRewriteDomain http://dst.example.com http://src.example.com;
    pagespeed EnableFilters rewrite_domains;
    pagespeed UrlValuedAttribute custom a Image;
    pagespeed UrlValuedAttribute custom b otherResource;
    pagespeed UrlValuedAttribute custom c hyperlink;
    pagespeed UrlValuedAttribute img alt-src Image;
    pagespeed UrlValuedAttribute video alt-a Image;
    pagespeed UrlValuedAttribute video alt-b Image;
    pagespeed UrlValuedAttribute link data-stylesheet Stylesheet;
    pagespeed UrlValuedAttribute span data-stylesheet-a Stylesheet;
    pagespeed UrlValuedAttribute span data-stylesheet-b Stylesheet;
    pagespeed UrlValuedAttribute span data-stylesheet-c Stylesheet;

    # Also test that we can redefine spec-defined attributes.
    pagespeed UrlValuedAttribute blockquote cite Image;
  }

  server {
    listen 127.0.0.2:@@SECONDARY_PORT@@;
    server_name loopbackfetch.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name domain-hyperlinks-on.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    # Don't actually try to rewrite any resources; the ones in
    # rewrite_domains.html don't actually exist.
    pagespeed RewriteLevel PassThrough;

    pagespeed DomainRewriteHyperlinks on;
    pagespeed MapRewriteDomain http://dst.example.com http://src.example.com;
    pagespeed EnableFilters rewrite_domains;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name domain-hyperlinks-off.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    # Don't actually try to rewrite any resources; the ones in
    # rewrite_domains.html don't actually exist.
    pagespeed RewriteLevel PassThrough;

    pagespeed DomainRewriteHyperlinks off;
    pagespeed MapRewriteDomain http://dst.example.com http://src.example.com;
    pagespeed EnableFilters rewrite_domains;
  }

  server {
    # Test host for shared memory cache.
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name shmcache.example.com;
    pagespeed FileCachePath "@@SHM_CACHE@@";

    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_images;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name xfp.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RespectXForwardedProto on;

    location /redirecting_origin {
      pagespeed off;
      # Hack: we clear the response headers using headers_more.
      # If we don't, nginx will add an extra empty Location: headers here.
      # It is kind of hard to get nginx to generate a relative location header
      # that starts with "/".
      more_clear_headers 'Location';
      add_header Location /mod_pagespeed_example;
      return 301;
    }
    location /redirect {
      proxy_method GET;
      proxy_pass http://127.0.0.1:@@SECONDARY_PORT@@/redirecting_origin;
      proxy_set_header "Host" "xfp.example.com";
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name xheader.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed XHeaderValue "UNSPECIFIED VERSION";
  }

  # Support for embedded configurations, where image flags in the
  # VirtualHost serving HTML is not the same as the one serving resources,
  # and thus we must embed the image flags in the rewritten image URLs.
  #
  # Note that we test with two distinct caches.
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name embed-config-html.example.org;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    root "@@SERVER_ROOT@@/mod_pagespeed_test";

    pagespeed AddOptionsToUrls on;
    pagespeed JpegRecompressionQuality 73;
    pagespeed DisableFilters inline_css,extend_cache,inline_javascript;
    pagespeed Domain embed-config-resources.example.com;

    # Share a cache keyspace with embed-config-resources.example.com.
    pagespeed CacheFragment "embed-config";

    pagespeed LoadFromFile "http://embed-config-resources.example.com/"
      "@@SERVER_ROOT@@/mod_pagespeed_example/";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name embed-config-resources.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    root "@@SERVER_ROOT@@/mod_pagespeed_example";

    pagespeed AddOptionsToUrls on;

    # Note that we do not set the jpeg quality here, but take
    # it from image URL query parameters that we synthesize in
    # from embed-config-html.example.org.

    # Share a cache keyspace with embed-config-html.example.org.
    pagespeed CacheFragment "embed-config";

    pagespeed LoadFromFile "http://embed-config-resources.example.com/"
      "@@SERVER_ROOT@@/mod_pagespeed_example/";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name ipro-for-browser.example.com;
    root "@@SERVER_ROOT@@/mod_pagespeed_example";
    pagespeed EnableFilters rewrite_images,rewrite_css;
    pagespeed EnableFilters convert_to_webp_lossless;
    pagespeed EnableFilters in_place_optimize_for_browser;
    pagespeed JpegRecompressionQuality 75;
    pagespeed WebpRecompressionQuality 70;
    pagespeed InPlaceResourceOptimization on;
    pagespeed AllowVaryOn "Accept";
    pagespeed FileCachePath "@@IPRO_CACHE@@";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name ipro-for-browser-vary-on-auto.example.com;
    root "@@SERVER_ROOT@@/mod_pagespeed_example";
    pagespeed EnableFilters rewrite_images,rewrite_css;
    pagespeed EnableFilters convert_to_webp_animated;
    pagespeed EnableFilters convert_to_webp_lossless;
    pagespeed EnableFilters in_place_optimize_for_browser;
    pagespeed InPlaceResourceOptimization on;
    # pagespeed AllowVaryOn "Accept";  # Default is "Auto".
    pagespeed ImageRecompressionQuality 90;
    pagespeed JpegRecompressionQuality 75;
    pagespeed JpegRecompressionQualityForSmallScreens 55;
    pagespeed JpegQualityForSaveData 35;
    pagespeed WebpRecompressionQuality 70;
    pagespeed WebpRecompressionQualityForSmallScreens 50;
    pagespeed WebpQualityForSaveData 30;
    pagespeed WebpAnimatedRecompressionQuality 60;
    pagespeed FileCachePath "@@IPRO_CACHE@@";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name ipro-for-browser-vary-on-none.example.com;
    root "@@SERVER_ROOT@@/mod_pagespeed_example";
    pagespeed EnableFilters rewrite_images,in_place_optimize_for_browser;
    pagespeed InPlaceResourceOptimization on;
    pagespeed AllowVaryOn "None";
    pagespeed ImageRecompressionQuality 75;
    pagespeed FileCachePath "@@IPRO_CACHE@@";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name respectvary.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed RespectVary on;
    add_header Vary User-Agent;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name cache_a.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed CacheFlushPollIntervalSec 1;
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters inline_css;

    # Make a non-empty subdirectory config to make sure that
    # cache.flush updates get transmitted to nested configurations.
    #
    # TODO(jmarantz): This test currently fails on ngx_pagespeed, meaning we
    # don't handle cache flushing correctly here.  Uncomment the config below to
    # expose the error.
    #location /mod_pagespeed_test/cache_flush/ {
    #  pagespeed RewriteLevel PassThrough;
    #  pagespeed EnableFilters inline_css;
    #  pagespeed DisableFilters add_instrumentation;
    #}
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name cache_b.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";

    pagespeed CacheFlushPollIntervalSec 1;
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters inline_css;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name cache_c.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed CacheFlushFilename "othercache.flush";
    pagespeed CacheFlushPollIntervalSec 1;
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters inline_css;
  }

  # The next three server blocks are for a cdn test.
  server {
    # Sets up a logical home-page server on www.example.com
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name www.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed LoadFromFile http://cdn.example.com @@SERVER_ROOT@@/;
    pagespeed MapRewriteDomain cdn.example.com origin.example.com;
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_css,rewrite_images;
    pagespeed CacheFragment "example";
  }
  server {
    # Sets up a logical origin for CDNs to fetch content from, on
    # origin.example.com.
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name origin.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed LoadFromFile http://cdn.example.com @@SERVER_ROOT@@/;
    pagespeed MapRewriteDomain cdn.example.com origin.example.com;
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_css,rewrite_images;
    pagespeed CacheFragment "example";
  }
  server {
    # Sets up a logical cdn, which is where we tell browsers to fetch resources
    # from.
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name cdn.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed LoadFromFile http://cdn.example.com @@SERVER_ROOT@@/;
    pagespeed MapRewriteDomain cdn.example.com origin.example.com;
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_css,rewrite_images;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name lff-ipro.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed LoadFromFile
      "http://lff-ipro.example.com/mod_pagespeed_example/lff_ipro"
      "@@SERVER_ROOT@@/mod_pagespeed_example/lff_ipro";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name tryfiles.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { }
    location ~ "^/ngx_pagespeed_static/" { }
    location ~ "^/ngx_pagespeed_beacon$" { }

    try_files $uri $uri/ /mod_pagespeed_example/index.html;
  }

  server {
    # Proxy modpagespeed.com for testing Issue 582.
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name modpagespeed.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed off;

    location / {
      proxy_pass http://modpagespeed.com;
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name custom-paths.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed StatisticsPath /custom_pagespeed_statistics;
    pagespeed ConsolePath /custom_pagespeed_console;
    pagespeed MessagesPath /custom_pagespeed_message;
    pagespeed AdminPath /custom_pagespeed_admin;

    pagespeed StatisticsDomains Allow *;
    pagespeed GlobalStatisticsDomains Allow *;
    pagespeed MessagesDomains Allow *;
    pagespeed ConsoleDomains Allow *;
    pagespeed AdminDomains Allow *;
    pagespeed GlobalAdminDomains Allow *;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name inherit-paths.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed StatisticsDomains Allow *;
    pagespeed GlobalStatisticsDomains Allow *;
    pagespeed MessagesDomains Allow *;
    pagespeed ConsoleDomains Allow *;
    pagespeed AdminDomains Allow *;
    pagespeed GlobalAdminDomains Allow *;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name blocking.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";

    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_images;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name keepalive-html.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel CoreFilters;
    error_log "@@TEST_TMP@@/keepalive-html.example.com.error.log" warn;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name keepalive-resource.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    error_log "@@TEST_TMP@@/keepalive-resource.example.com.error.log" warn;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name keepalive-beacon-get.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    error_log "@@TEST_TMP@@/keepalive-beacon-get.example.com.error.log" warn;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name keepalive-beacon-post.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    error_log "@@TEST_TMP@@/keepalive-beacon-post.example.com.error.log" warn;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name keepalive-static.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    error_log "@@TEST_TMP@@/keepalive-static.example.com.error.log" warn;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name response-header-filters.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RewriteLevel PassThrough;
    pagespeed on;
    location / {
      proxy_pass http://localhost:@@SECONDARY_PORT@@;
      proxy_set_header Host "enable-filter-header-origin.example.com";
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name response-header-disable.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed EnableFilters add_instrumentation;
    pagespeed on;
    location / {
      proxy_pass http://localhost:@@SECONDARY_PORT@@;
      proxy_set_header Host "pagespeed-off-header-origin.example.com";
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name headers.example.com;
    pagespeed InPlaceRewriteDeadlineMs -1;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed LoadFromFile "http://headers.example.com/"
              "@@SERVER_ROOT@@/";
    location /mod_pagespeed_test/ {
      more_set_headers "Server: override";
      more_set_headers -s '404' 'Cache-Control: override';
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name custom404.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    error_page 404 /404.html;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name ipro.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";

    pagespeed on;
    pagespeed InPlaceResourceOptimization on;

    location /mod_pagespeed_test/ipro/nocache/test_image_dont_reuse.png {
      add_header Cache-Control no-cache;
    }

    location /mod_pagespeed_test/ipro/no-cache-control-header {
      add_header Cache-Control "";
      pagespeed ImplicitCacheTtlMs 333000;
    }
  }

  # Test hosts to cover all possible cache configurations.  L1 will be filecache
  # or memcache depending on the setting of MEMCACHED_TEST.  These four hosts
  # are for the four settings for the L2 cache.

  # 1. L2_d=LRU, L2_m=LRU
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name lrud-lrum.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@_lrud_lrum";

    pagespeed LRUCacheKbPerProcess 1024;
    pagespeed LRUCacheByteLimit 2000;
    pagespeed EnableFilters rewrite_images;
    pagespeed CriticalImagesBeaconEnabled false;
  }

  # 2. L2_d=LRU, L2_m=SHM
  pagespeed CreateSharedMemoryMetadataCache
            "@@SECONDARY_CACHE@@_lrud_shmm" 8192;
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name lrud-shmm.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@_lrud_shmm";

    pagespeed LRUCacheKbPerProcess 1024;
    pagespeed LRUCacheByteLimit 2000;
    pagespeed EnableFilters rewrite_images;
    pagespeed CriticalImagesBeaconEnabled false;
  }

  # 3. L2_d=none, L2_m=SHM
  pagespeed CreateSharedMemoryMetadataCache
            "@@SECONDARY_CACHE@@_noned_shmm" 8192;
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name noned-shmm.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@_noned_shmm";

    pagespeed EnableFilters rewrite_images;
    pagespeed CriticalImagesBeaconEnabled false;
  }

  # 4. L2_d=none, L2_m=none
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name noned-nonem.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@_noned_nonem";

    pagespeed EnableFilters rewrite_images;
    pagespeed CriticalImagesBeaconEnabled false;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name date.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    add_header "Date" "Fri, 16 Oct 2009 23:05:07 GMT";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name options-by-cookies-enabled.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@_optionsbycookieson";
    pagespeed AllowOptionsToBeSetByCookies true;
    pagespeed StickyQueryParameters sticky_secret;
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters collapse_whitespace;
    pagespeed DisableFilters remove_comments,add_instrumentation;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name options-by-cookies-disabled.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@_optionsbycookiesoff";
    pagespeed AllowOptionsToBeSetByCookies false;
    pagespeed DisableFilters add_instrumentation;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name redirect.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@_redirected";
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters add_instrumentation,collapse_whitespace;
    location /redirect {
      rewrite ^/redirect/(.*) http://$server_name/$1 permanent;
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name request-option-override.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RequestOptionOverride abc;
    pagespeed RewriteLevel Passthrough;
    pagespeed EnableFilters collapse_whitespace;
    pagespeed DisableFilters remove_comments,add_instrumentation;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name signed-urls.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed UrlSigningKey helloworld;
    pagespeed RewriteLevel Passthrough;
    pagespeed EnableFilters collapse_whitespace,rewrite_images;
    pagespeed DisableFilters remove_comments,add_instrumentation;
  }

  # For testing signed URLs, ignoring signature validity.
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name signed-urls-transition.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed UrlSigningKey helloworld;
    pagespeed AcceptInvalidSignatures true;
    pagespeed RewriteLevel Passthrough;
    pagespeed EnableFilters collapse_whitespace,rewrite_images;
    pagespeed DisableFilters remove_comments,add_instrumentation;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name unsigned-urls-transition.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    # This server will not sign URLs, but AcceptInvalidSignature is on.
    pagespeed AcceptInvalidSignatures true;
    pagespeed RewriteLevel Passthrough;
    pagespeed EnableFilters collapse_whitespace,rewrite_images;
    pagespeed DisableFilters remove_comments,add_instrumentation;
  }

  # Start remote config servers.
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name remote-config.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/standard";
    pagespeed RemoteConfigurationTimeoutMs 1500;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name remote-config-partially-invalid.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RemoteConfigurationUrl
              "http://127.0.0.1:@@RCPORT@@/partly-invalid";
    pagespeed RemoteConfigurationTimeoutMs 1500;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name remote-config-invalid.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/invalid";
    pagespeed RemoteConfigurationTimeoutMs 1500;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name remote-config-failed-fetch.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/fail-future";
    pagespeed RemoteConfigurationTimeoutMs 1500;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name remote-config-slow-fetch.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/timeout";
    pagespeed RemoteConfigurationTimeoutMs 1500;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name remote-config-experiment.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/experiment";
    pagespeed RemoteConfigurationTimeoutMs 1500;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name remote-config-slightly-slow-fetch.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RemoteConfigurationUrl
              "http://127.0.0.1:@@RCPORT@@/slightly-slow";
    pagespeed RemoteConfigurationTimeoutMs 1500;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name remote-config-slightly-slow-expired-fetch.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/slow-expired";
    pagespeed RemoteConfigurationTimeoutMs 1500;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name remote-config-forbidden.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/forbidden";
    pagespeed RemoteConfigurationTimeoutMs 1500;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name remote-config-initially-forbidden.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed RemoteConfigurationUrl
              "http://127.0.0.1:@@RCPORT@@/forbidden-once";
    pagespeed RemoteConfigurationTimeoutMs 1500;
  }

  # Test that pagespeed is disabled when sendfile headers are present.
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name uses-sendfile.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed EnableFilters inline_javascript,rewrite_javascript;
    add_header 'X-Sendfile' 'blablabla';
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name doesnt-sendfile.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed EnableFilters inline_javascript,rewrite_javascript;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name uses-xaccelredirect.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed EnableFilters inline_javascript,rewrite_javascript;
    add_header 'X-Accel-Redirect' 'blablabla';
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name map-static-domain.example.com;
    pagespeed FileCachePath "@@SECONDARY_CACHE@@";
    pagespeed MapRewriteDomain http://static-cdn.example.com
                               http://map-static-domain.example.com;
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters defer_javascript,rewrite_domains;
  }

  # Proxy + IPRO a gzip'd file for testing Issue 896.
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name ipro-proxy.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@_ipro_proxy";

    pagespeed on;
    pagespeed InPlaceResourceOptimization on;
    pagespeed EnableFilters rewrite_domains;

    location / {
      proxy_pass
       "http://localhost:@@PRIMARY_PORT@@/mod_pagespeed_test/ipro/mod_deflate/";
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name compressedcache.example.com;
    pagespeed on;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed EnableFilters rewrite_css;
    pagespeed HttpCacheCompressionLevel 9;
    location ~ \.php$ {
      fastcgi_param SCRIPT_FILENAME $request_filename;
      fastcgi_param QUERY_STRING $query_string;
      fastcgi_param REQUEST_METHOD $request_method;
      fastcgi_param CONTENT_TYPE $content_type;
      fastcgi_param CONTENT_LENGTH $content_length;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_buffering off;
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name uncompressedcache.example.com;
    pagespeed on;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed EnableFilters rewrite_css;
    pagespeed HttpCacheCompressionLevel 0;
    location ~ \.php$ {
      fastcgi_param SCRIPT_FILENAME $request_filename;
      fastcgi_param QUERY_STRING $query_string;
      fastcgi_param REQUEST_METHOD $request_method;
      fastcgi_param CONTENT_TYPE $content_type;
      fastcgi_param CONTENT_LENGTH $content_length;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_buffering off;
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name compressed-css.example.com;
    pagespeed on;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed InPlaceResourceOptimization on;
  }

  # nested gzip config: pagespeed gzip on/off
  server {
    pagespeed on;
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name gzip-test1.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    location /mod_pagespeed_example/ {
      pagespeed gzip off;
    }
    location /mod_pagespeed_example/styles/ {
      pagespeed gzip on;
    }
  }

  # nested gzip config: pagespeed on/off
  server {
    pagespeed on;
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name gzip-test2.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    location /mod_pagespeed_example/ {
      pagespeed off;
    }
    location /mod_pagespeed_example/styles/ {
      pagespeed on;
    }
  }

  server {
    pagespeed on;
    pagespeed EnableFilters add_instrumentation;
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name proxy-post.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    location / {
      # Transform the POST to a GET request for the origin,
      # as nginx's static handler doesn't allow POST requests.
      proxy_method GET;
      proxy_pass http://127.0.0.1:@@SECONDARY_PORT@@/;
      proxy_set_header "Host" "proxy-post-origin.example.com";
    }
  }

  server {
    pagespeed off;
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name proxy-post-origin.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    root "@@SERVER_ROOT@@/";
  }

  server {
    # Write all post data to temp files
    client_body_in_file_only clean;
    pagespeed CriticalImagesBeaconEnabled true;
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name beacon-post-temp-file.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name script-filters.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    root "@@SERVER_ROOT@@/";
    set $filters "";
    set $domain_shards "cdn1.example.com,cdn2.example.com";
    if ($http_X_Script) {
        set $filters "add_instrumentation";
        set $domain_shards "";
    }
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_domains;
    pagespeed EnableFilters $filters;
    pagespeed ShardDomain script-filters.example.com "$domain_shards";
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name purge.example.com;

    # Test purging individual URLs without flushing the entire metadata cache.
    pagespeed EnableCachePurge on;

    pagespeed PurgeMethod PURGE;
    root "@@SERVER_ROOT@@/purge";
    pagespeed FileCachePath "@@FILE_CACHE@@_purge";
    pagespeed DisableFilters add_instrumentation;
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_css;
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name psoff-dir-on.example.com;

    # Test purging individual URLs without flushing the entire metadata cache.
    pagespeed EnableCachePurge on;

    pagespeed PurgeMethod PURGE;
    root "@@SERVER_ROOT@@/purge";
    pagespeed FileCachePath "@@FILE_CACHE@@_dir_on";
    pagespeed DisableFilters add_instrumentation;
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_css;
    pagespeed off;
    location / {
      pagespeed on;
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name  cc-header-origin.example.com;
    pagespeed InPlaceResourceOptimization off;
    pagespeed off;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    root "@@SERVER_ROOT@@/";
    location /mod_pagespeed_test/nostore {
      add_header "Cache-Control" "max-age=12345";
      add_header "Cache-Control" "public, no-store";
      add_header "Cache-Control" "max-age=14";
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name  enable-filter-header-origin.example.com;
    pagespeed InPlaceResourceOptimization off;
    pagespeed off;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    root "@@SERVER_ROOT@@/";
    location / {
      add_header "PageSpeedFilters" "add_instrumentation";
    }
  }

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name  pagespeed-off-header-origin.example.com;
    pagespeed InPlaceResourceOptimization off;
    pagespeed off;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    root "@@SERVER_ROOT@@/";
    location / {
      add_header "PageSpeed" "off";
    }
  }

  pagespeed MessagesDomains Allow messages-allowed.example.com;
  pagespeed MessagesDomains Allow cleared-inherited.example.com;
  pagespeed MessagesDomains Allow cleared-inherited-reallowed.example.com;
  pagespeed MessagesDomains Allow more-messages-allowed.example.com;
  pagespeed MessagesDomains Allow anything-*-wildcard.example.com;
  pagespeed MessagesDomains Allow localhost;

  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name messages-allowed.example.com
                messages-not-allowed.example.com
                more-messages-allowed.example.com
                anything-a-wildcard.example.com
                anything-b-wildcard.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name messages-still-not-allowed.example.com
                but-this-message-allowed.example.com
                and-this-one.example.com;
    pagespeed MessagesDomains Allow but-this-message-allowed.example.com;
    pagespeed MessagesDomains Allow and-this-one.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name cleared-inherited.example.com
                cleared-inherited-reallowed.example.com
                messages-allowed-at-vhost.example.com
                messages-not-allowed-at-vhost.example.com
                anything-c-wildcard.example.com;
    pagespeed MessagesDomains Disallow *;
    pagespeed MessagesDomains Allow cleared-inherited-reallowed.example.com;
    pagespeed MessagesDomains Allow messages-allowed-at-vhost.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name cleared-inherited-unlisted.example.com;
    pagespeed MessagesDomains Allow *;
    pagespeed FileCachePath "@@FILE_CACHE@@";
  }
  server {
    server_name nothing-allowed.example.com;
    pagespeed MessagesDomains Disallow *;
    pagespeed FileCachePath "@@FILE_CACHE@@";
  }
  server {
    server_name nothing-explicitly-allowed.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name everything-explicitly-allowed.example.com
                everything-explicitly-allowed-but-aliased.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    pagespeed StatisticsDomains Allow everything-explicitly-allowed.example.com;
    pagespeed GlobalStatisticsDomains
      Allow everything-explicitly-allowed.example.com;
    pagespeed MessagesDomains Allow everything-explicitly-allowed.example.com;
    pagespeed ConsoleDomains Allow everything-explicitly-allowed.example.com;
    pagespeed AdminDomains Allow everything-explicitly-allowed.example.com;
    pagespeed GlobalAdminDomains
     Allow everything-explicitly-allowed.example.com;
  }
  server {
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name psol-vary.example.com;
    pagespeed on;
    pagespeed InPlaceResourceOptimization on;
    pagespeed FileCachePath "@@FILE_CACHE@@";
  }
  server {
    pagespeed on;
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name flush.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel PassThrough;
    pagespeed RewriteDeadlinePerFlushMs 1;

    location ~ \.php$ {
      fastcgi_param SCRIPT_FILENAME $request_filename;
      fastcgi_param QUERY_STRING $query_string;
      fastcgi_param REQUEST_METHOD $request_method;
      fastcgi_param CONTENT_TYPE $content_type;
      fastcgi_param CONTENT_LENGTH $content_length;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_buffering off;
    }
  }
  server {
    pagespeed on;
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name noflush.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel PassThrough;
    pagespeed RewriteDeadlinePerFlushMs 1;
    pagespeed FollowFlushes off;

    location ~ \.php$ {
      fastcgi_param SCRIPT_FILENAME $request_filename;
      fastcgi_param QUERY_STRING $query_string;
      fastcgi_param REQUEST_METHOD $request_method;
      fastcgi_param CONTENT_TYPE $content_type;
      fastcgi_param CONTENT_LENGTH $content_length;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_buffering off;
    }
  }
  server {
    pagespeed on;
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name special-response.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    error_page 404 /mod_pagespeed_test/php_withflush.php;
    location ~ \.php$ {
      fastcgi_param SCRIPT_FILENAME $request_filename;
      fastcgi_param QUERY_STRING $query_string;
      fastcgi_param REQUEST_METHOD $request_method;
      fastcgi_param CONTENT_TYPE $content_type;
      fastcgi_param CONTENT_LENGTH $content_length;
      fastcgi_pass 127.0.0.1:9000;
    }
  }
  server {
    pagespeed on;
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name debug-filters.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters debug;
  }
  server {
    pagespeed on;
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name broken-fetch.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@/broken-fetch";

    # Set up a fetch proxy that will 404 every request.
    pagespeed FetchProxy "brokenfetch.example.com:1111";

    # Prevent loopback fetch by explicitly authorizing the domain.  Loopback
    # fetches would work, and for this test, we're trying to have fetches fail,
    # so they are instead picked up by the ipro recorder.
    pagespeed Domain http://broken-fetch.example.com;
    pagespeed InPlaceResourceOptimization on;

    pagespeed RewriteLevel PassThrough;
    pagespeed EnableFilters rewrite_javascript;
    pagespeed DisableFilters add_instrumentation;
    pagespeed CriticalImagesBeaconEnabled false;
  }
  server {
    pagespeed on;
    listen @@SECONDARY_PORT@@;
    listen [::]:@@SECONDARY_PORT@@;
    server_name image-rewrite-with-flush.example.com;
    pagespeed FileCachePath "@@FILE_CACHE@@";
    pagespeed RewriteLevel PassThrough;
    pagespeed UrlValuedAttribute li data-thumb image;
    pagespeed EnableFilters core;
    location ~ \.php$ {
      fastcgi_param SCRIPT_FILENAME $request_filename;
      fastcgi_param QUERY_STRING $query_string;
      fastcgi_param REQUEST_METHOD $request_method;
      fastcgi_param CONTENT_TYPE $content_type;
      fastcgi_param CONTENT_LENGTH $content_length;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_buffering off;
    }
  }
  server {
    listen @@PRIMARY_PORT@@;
    listen [::]:@@PRIMARY_PORT@@;
    server_name  localhost;
    pagespeed FileCachePath "@@FILE_CACHE@@";

    location ~ ^/pagespeed_admin {
      allow 127.0.0.1;
      allow ::1;
      deny all;
    }

    location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
      # TODO(oschaaf): The following breaks nginx starting up, as the bad header
      # value gets rejected during configuration parsing. However, we can't easily
      # build a test for that right now.
      # pagespeed AddResourceHeader "X-Fo\n\no" "Bar";
      # pagespeed AddResourceHeader "X-Foo" "Ba\nr";

      # For testing that AddResourceHeader gets passed through
      pagespeed AddResourceHeader "X-Foo" "Bar";
      add_header "" "";
    }

    # Backend for ipro-proxy.example.com
    location /mod_pagespeed_test/ipro/mod_deflate/ {
      pagespeed off;
    }

    location /mod_pagespeed_test/cachable_rewritten_html/ {
      # This location has the html files that will be configured to be stored
      # in the proxy_cache layer.
      pagespeed DownstreamCachePurgeMethod "GET";
      pagespeed DownstreamCachePurgeLocationPrefix "http://localhost:@@SECONDARY_PORT@@/purge";
      pagespeed DownstreamCacheRebeaconingKey "random_rebeaconing_key";
      # We use a very small deadline here to force the rewriting to not complete
      # in the very first attempt.
      pagespeed RewriteDeadlinePerFlushMs 1;
      pagespeed RewriteLevel PassThrough;
      pagespeed EnableFilters collapse_whitespace,extend_cache,recompress_images;
      pagespeed CriticalImagesBeaconEnabled true;
      add_header Cache-Control "public, max-age=100";
    }

    location /mod_pagespeed_test/disable_no_transform/index.html {
      pagespeed DisableRewriteOnNoTransform off;
    }

    location /mod_pagespeed_test/disable_no_transform/disable_no_transform.css {
      add_header 'Cache-Control' 'no-transform';
    }

    location /mod_pagespeed_test/no_transform {
      add_header 'Cache-Control' 'no-transform';
    }

    # uncomment the following two lines if you're testing memcached
    #pagespeed MemcachedServers "localhost:11211";
    #pagespeed MemcachedThreads 1;

    pagespeed on;

    #pagespeed CacheFlushPollIntervalSec 1;

    #pagespeed RunExperiment on;
    #pagespeed AnalyticsID "UA-XXXXXXXX-Y";
    #pagespeed ExperimentSpec "id=1;percent=50;default";
    #pagespeed ExperimentSpec "id=2;percent=50";

    pagespeed Library 43 1o978_K0_LNE5_ystNklf
      http://www.modpagespeed.com/rewrite_javascript.js;
    pagespeed RetainComment " google_ad_section*";
    pagespeed PermitIdsForCssCombining "allowed-to-combine-1-*";
    pagespeed PermitIdsForCssCombining "allowed-to-combine-2-*";

    # Test proxying of non-.pagespeed. resources.
    pagespeed MapProxyDomain http://localhost:@@PRIMARY_PORT@@/modpagespeed_http
                           http://@@PAGESPEED_TEST_HOST@@/do_not_modify;
    pagespeed MapProxyDomain http://localhost:@@PRIMARY_PORT@@/content_type_present
                           http://@@PAGESPEED_TEST_HOST@@:8091;
    pagespeed MapProxyDomain http://localhost:@@PRIMARY_PORT@@/content_type_absent
                           http://@@PAGESPEED_TEST_HOST@@:8092;

    add_header X-Extra-Header 1;

    # Establish a proxy mapping where the current server proxies an image
    # stored on ref.pssdemos.com.
    pagespeed MapProxyDomain localhost:@@PRIMARY_PORT@@/gstatic_images
                             http://www.gstatic.com/psa/static;

    location /ngx_pagespeed_statistics {
      allow 127.0.0.1;
      allow ::1;
      deny all;
    }

    location /ngx_pagespeed_message {
      allow 127.0.0.1;
      allow ::1;
      deny all;
    }

    pagespeed Domain modpagespeed.com:1023;
    # As opposed to mod_pagespeed, our default for aris is 'on'
    pagespeed AvoidRenamingIntrospectiveJavascript off;

    location /mod_pagespeed_test/nostore {
      proxy_pass http://localhost:@@SECONDARY_PORT@@;
      proxy_set_header Host "cc-header-origin.example.com";
    }

    location /mod_pagespeed_test/forbid_all_disabled/disabled {
      # Prevent the enabling of these filters for files in this directory
      # -and- all subdirectories.
      #
      # Apache checks here that they can't be renabled with .htaccess, but
      # that's not how Nginx location blocks work.
      pagespeed ForbidAllDisabledFilters true;
      pagespeed DisableFilters remove_quotes,remove_comments;
      pagespeed DisableFilters collapse_whitespace;
    }

    location /mod_pagespeed_test/max_html_parse_size {
      pagespeed MaxHtmlParseBytes 5000;
    }

    location ~ \.php$ {
      fastcgi_param SCRIPT_FILENAME $request_filename;
      fastcgi_param QUERY_STRING $query_string;
      fastcgi_param REQUEST_METHOD $request_method;
      fastcgi_param CONTENT_TYPE $content_type;
      fastcgi_param CONTENT_LENGTH $content_length;
      fastcgi_pass 127.0.0.1:9000;
    }

    location /mod_pagespeed_example/core_filters/ {
      pagespeed RewriteLevel CoreFilters;
    }

    location /mod_pagespeed_example/pass_through/ {
      pagespeed RewriteLevel PassThrough;
    }

    #location / {
    #  proxy_pass http://www.google.com;
    #}

    location /mod_pagespeed_test/ssi/ {
      ssi on;

      pagespeed EnableFilters collapse_whitespace,remove_comments,combine_css;
      pagespeed DisableFilters add_instrumentation;
      pagespeed DisableFilters inline_css;
    }

    location /mod_pagespeed_test/no_cache/ {
      add_header Cache-Control no-cache;
    }

    location /mod_pagespeed_test/compressed/ {
      add_header Content-Encoding gzip;

      # Even though this is also in the server block it must be repeated here
      # because add_header directives are only inherited if you don't define
      # more of them.  See: http://serverfault.com/questions/400197
      add_header X-Extra-Header 1;

      types {
        text/javascript custom_ext;
      }
    }

    location /mod_pagespeed_test/shard/ {
      pagespeed ShardDomain "localhost:@@PRIMARY_PORT@@" shard1,shard2;
      pagespeed RewriteLevel PassThrough;
      pagespeed EnableFilters extend_cache;
    }

    location /mod_pagespeed_test/retain_cache_control/ {
      pagespeed ModifyCachingHeaders off;
      add_header Cache-Control "private, max-age=3000";
    }

    location /mod_pagespeed_test/retain_cache_control_with_downstream_caching/ {
      pagespeed ModifyCachingHeaders on;
      pagespeed DownstreamCachePurgeLocationPrefix "http://localhost:8020/";
      add_header Cache-Control "private, max-age=3000";
    }

    location /mod_pagespeed_test/avoid_renaming_introspective_javascript__on/ {
      pagespeed AvoidRenamingIntrospectiveJavascript on;
    }

    location /mod_pagespeed_test/custom_options/ {
      pagespeed DisableFilters convert_jpeg_to_progressive;
    }

    location /mod_pagespeed_test/ipro/test_image_dont_reuse.png {
      expires 5m;
    }

    location /mod_pagespeed_test/example.json {
      expires 10m;
    }

    location /mod_pagespeed_test/ipro/cc200/ {
      add_header "Cache-Control" "max-age=200";
    }
    location /mod_pagespeed_test/ipro/cc200p/ {
      add_header "Cache-Control" "private, max-age=200";
    }
    location /mod_pagespeed_test/ipro/cc200nc/ {
      add_header "Cache-Control" "no-cache, max-age=200";
    }
    location /mod_pagespeed_test/ipro/cc200ns/ {
      add_header "Cache-Control" "no-store, max-age=200";
    }
    location /mod_pagespeed_test/ipro/cc200nt/ {
      add_header "Cache-Control" "no-transform, max-age=200";
    }
    location /mod_pagespeed_test/ipro/cc200sma5/ {
      add_header "Cache-Control" "s-maxage=5, max-age=200";
    }
    location /mod_pagespeed_test/ipro/cc200sma50/ {
      add_header "Cache-Control" "s-maxage=50, max-age=200";
    }
    location /mod_pagespeed_test/ipro/cc200sma50nsp/ {
      add_header "Cache-Control" "s-maxage=50,max-age=200";
    }
    location /mod_pagespeed_test/ipro/cc9/ {
      add_header "Cache-Control" "max-age=9";
    }
    location /mod_pagespeed_test/ipro/cc200cc9/ {
      add_header "Cache-Control" "max-age=200, max-age=9";
    }
    location /mod_pagespeed_test/ipro/cc200sma50sma5/ {
      add_header "Cache-Control" "max-age=200, s-maxage=50, s-maxage=5";
    }
    location /mod_pagespeed_test/ipro/cc200sma50cc9/ {
      add_header "Cache-Control" "max-age=200, s-maxage=50, max-age=9";
    }
    location /mod_pagespeed_test/ipro/cc200sma50cc9nsp/ {
      add_header "Cache-Control" "max-age=200,s-maxage=50,max-age=9";
    }
    location /mod_pagespeed_test/ipro/cc200sma50sma51/ {
      add_header "Cache-Control" "max-age=200, s-maxage=50, s-maxage=51";
    }

    location /mod_pagespeed_test/ipro/wait/ {
      # TODO(jmarantz): ModPagespeedInPlaceWaitForOptimized should be superfluous,
      # or made equivalent to ModPagespeedInPlaceRewriteDeadlineMs -1, which waits
      # forever.  Otherwise ModPagespeedInPlaceRewriteDeadlineMs should just have
      # the specified deadline.
      # # See https://github.com/apache/incubator-pagespeed-mod/issues/1171 for more
      # detailed discussion.
      pagespeed InPlaceWaitForOptimized on;
    }

    location /mod_pagespeed_test/ipro/wait/long/ {
      # Make the deadline long here for valgrind tests.  We could
      # conditionalize this.
      pagespeed InPlaceRewriteDeadlineMs 10000;
    }

    location /mod_pagespeed_test/ipro/wait/short/ {
      pagespeed EnableFilters in_place_optimize_for_browser;

      # Make the deadline short here as we expect to always miss it
      # in tests.
      pagespeed InPlaceRewriteDeadlineMs 1;
    }

    location /mod_pagespeed_test/ipro/instant/wait/ {
      pagespeed InPlaceWaitForOptimized on;

      # TODO(jefftk): When running with valgrind we need to raise the rewrite
      # deadline or else we get "Deadline exceeded for rewrite of resource".
      # I had thought InPlaceWaitForOptimized was supposed to disable the
      # rewrite deadline, but it seems not to.
      #
      # InPlaceWaitForOptimized is definitely doing something, though: when I
      # remove the InPlaceRewriteDeadlineMs line below and run without valgrind,
      # purple.css is optimized via ipro on the first request but if I set
      # InPlaceWaitForOptimized to off then it is not.
      pagespeed InPlaceRewriteDeadlineMs 1000;
    }

    location /mod_pagespeed_test/ipro/instant/deadline/ {
      set $ps_deadline -1;
      pagespeed ImageRecompressionQuality $ps_deadline;
      pagespeed InPlaceRewriteDeadlineMs $ps_deadline;
    }

    # Test to make sure that user-authenticated resources do not get cached and
    # optimized.
    location /mod_pagespeed_test/auth/ {
       auth_basic "Restricted";
       auth_basic_user_file "@@SERVER_ROOT@@/mod_pagespeed_test/auth/passwd.conf";
    }

    location /mod_pagespeed_test/ipro/cookie/ {
      # Add Vary:Cookie.  This should prevent us from optimizing the
      # vary_cookie.css even though PagespeedRespectVary is off.
      # test/nginx_system_test.sh does the fetches test with and w/o cookies.
      add_header Vary Cookie;
      pagespeed RespectVary off;
      pagespeed InPlaceWaitForOptimized on;
    }

    location /mod_pagespeed_test/ipro/cookie2/ {
      # Add Vary:Cookie2.  This should prevent us from optimizing the
      # vary_cookie2.css even though PagespeedRespectVary is off.
      # test/nginx_system_test.sh does the fetches test with and w/o cookie2.
      add_header Vary Cookie2;
      pagespeed RespectVary off;
      pagespeed InPlaceWaitForOptimized on;
    }

    location /mod_pagespeed_test/vary/ {
      pagespeed RespectVary on;
    }

    location ~ /mod_pagespeed_test/vary/\.(js|css)$ {
        add_header Vary User-Agent;
    }

    location /mod_pagespeed_test/vary/no_respect/ {
      pagespeed DisableFilters add_instrumentation,inline_css;
      pagespeed RespectVary off;
    }

    location /mod_pagespeed_test/experimental_js_minifier/ {
      pagespeed UseExperimentalJsMinifier on;
    }

    pagespeed FetchHttps enable;
    location /mod_pagespeed_test/https_fetch/ {
      pagespeed DisableFilters inline_images;
      set $ps_gstatic "https://www.gstatic.com/psa/static";
      pagespeed MapProxyDomain
          http://localhost:@@PRIMARY_PORT@@/https_gstatic_dot_com
          $ps_gstatic;
    }

    location /mod_pagespeed_test/strip_subresource_hints/default/ {
      pagespeed DisableFilters add_instrumentation;
      pagespeed RewriteLevel CoreFilters;
      pagespeed DisAllow *dontrewriteme*;
    }
    location /mod_pagespeed_test/strip_subresource_hints/default_passthrough/ {
      pagespeed DisableFilters add_instrumentation;
      pagespeed RewriteLevel PassThrough;
    }
    location /mod_pagespeed_test/strip_subresource_hints/preserve_on/ {
      pagespeed DisableFilters add_instrumentation;
      pagespeed PreserveSubresourceHints on;
      pagespeed RewriteLevel CoreFilters;
    }
    location /mod_pagespeed_test/strip_subresource_hints/preserve_off/ {
      pagespeed DisableFilters add_instrumentation;
      pagespeed PreserveSubresourceHints off;
      pagespeed RewriteLevel CoreFilters;
    }
    # $host implicitly tests script variable support. I'd love to test it more
    # directly, but so far this is the best I've come up with and duplicating
    # the test doesn't seem to make sense.
    pagespeed LoadFromFile
        "http://$host:@@PRIMARY_PORT@@/mod_pagespeed_test/ipro/instant/"
        "@@SERVER_ROOT@@/mod_pagespeed_test/ipro/instant/";

    location /mod_pagespeed_test/public/ {
      add_header "Cache-Control" "public, max-age=600";
      pagespeed PreserveUrlRelativity off;
    }

    pagespeed EnableFilters remove_comments;

    # Test LoadFromFile mapping by mapping one dir to another.
    pagespeed LoadFromFile
      "http://localhost:@@PRIMARY_PORT@@/mod_pagespeed_test/load_from_file/web_dir/"
      "@@SERVER_ROOT@@/mod_pagespeed_test/load_from_file/file_dir/";
    pagespeed LoadFromFileMatch
      "^http://localhost:@@PRIMARY_PORT@@/mod_pagespeed_test/load_from_file_match/web_([^/]*)/"
      "@@SERVER_ROOT@@/mod_pagespeed_test/load_from_file/file_\1/";
    pagespeed LoadFromFileRule Disallow
      "@@SERVER_ROOT@@/mod_pagespeed_test/load_from_file/file_dir/httponly/";
    pagespeed LoadFromFileRuleMatch Disallow \.ssp.css$ps_dollar;
    pagespeed LoadFromFileRuleMatch Allow exception\.ssp\.css$ps_dollar;
    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    index index.html;


    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   html;
    }
  }

  sendfile        on;

  keepalive_timeout  65;

  types {
    text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    application/x-javascript              js;
    application/atom+xml                  atom;
    application/rss+xml                   rss;

    text/mathml                           mml;
    text/plain                            txt;
    text/vnd.sun.j2me.app-descriptor      jad;
    text/vnd.wap.wml                      wml;
    text/x-component                      htc;

    image/png                             png;
    image/tiff                            tif tiff;
    image/vnd.wap.wbmp                    wbmp;
    image/x-icon                          ico;
    image/x-jng                           jng;
    image/x-ms-bmp                        bmp;
    image/svg+xml                         svg svgz;
    image/webp                            webp;

    application/json                      json;
    application/java-archive              jar war ear;
    application/mac-binhex40              hqx;
    application/msword                    doc;
    application/pdf                       pdf;
    application/postscript                ps eps ai;
    application/rtf                       rtf;
    application/vnd.ms-excel              xls;
    application/vnd.ms-powerpoint         ppt;
    application/vnd.wap.wmlc              wmlc;
    application/vnd.google-earth.kml+xml  kml;
    application/vnd.google-earth.kmz      kmz;
    application/x-7z-compressed           7z;
    application/x-cocoa                   cco;
    application/x-java-archive-diff       jardiff;
    application/x-java-jnlp-file          jnlp;
    application/x-makeself                run;
    application/x-perl                    pl pm;
    application/x-pilot                   prc pdb;
    application/x-rar-compressed          rar;
    application/x-redhat-package-manager  rpm;
    application/x-sea                     sea;
    application/x-shockwave-flash         swf;
    application/x-stuffit                 sit;
    application/x-tcl                     tcl tk;
    application/x-x509-ca-cert            der pem crt;
    application/x-xpinstall               xpi;
    application/xhtml+xml                 xhtml;
    application/zip                       zip;

    application/octet-stream              bin exe dll;
    application/octet-stream              deb;
    application/octet-stream              dmg;
    application/octet-stream              eot;
    application/octet-stream              iso img;
    application/octet-stream              msi msp msm;

    audio/midi                            mid midi kar;
    audio/mpeg                            mp3;
    audio/ogg                             ogg;
    audio/x-m4a                           m4a;
    audio/x-realaudio                     ra;

    video/3gpp                            3gpp 3gp;
    video/mp4                             mp4;
    video/mpeg                            mpeg mpg;
    video/quicktime                       mov;
    video/webm                            webm;
    video/x-flv                           flv;
    video/x-m4v                           m4v;
    video/x-mng                           mng;
    video/x-ms-asf                        asx asf;
    video/x-ms-wmv                        wmv;
    video/x-msvideo                       avi;
  }
  default_type  application/octet-stream;

}
