Skip to content

Instantly share code, notes, and snippets.

@leosuncin
Created February 28, 2018 04:10
Show Gist options
  • Save leosuncin/5ca8f327af3d61d8e2ff615fd4c10976 to your computer and use it in GitHub Desktop.
Save leosuncin/5ca8f327af3d61d8e2ff615fd4c10976 to your computer and use it in GitHub Desktop.
Apache2 virtualhost for Symfony application
<VirtualHost *:80>
ServerSignature Off
DocumentRoot "/var/www/symfony/web/"
DirectoryIndex app.php
<Directory "/var/www/symfony/web">
AllowOverride None
        Order Allow,Deny
        Allow from All
        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
        <FilesMatch "(^#.*#|\.(bak|conf|dist|fla|in[ci]|log|orig|psd|sh|sql|sw[op])|~)$">
            <IfModule mod_authz_core.c>
                Require all denied
            </IfModule>
        </FilesMatch>
    </Directory>
    CustomLog /var/log/apache2/symfony-access.log combined
    KeepAlive On
    MaxKeepAliveRequests 200
    KeepAliveTimeout 5
    AddDefaultCharset utf-8
    <IfModule mod_deflate.c>
        <IfModule mod_setenvif.c>
            <IfModule mod_headers.c>
                SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
                RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
            </IfModule>
        </IfModule>
        <IfModule mod_filter.c>
            AddOutputFilterByType DEFLATE "application/atom+xml" \
                                        "application/javascript" \
                                        "application/json" \
                                        "application/ld+json" \
                                        "application/manifest+json" \
                                        "application/rdf+xml" \
                                        "application/rss+xml" \
                                        "application/schema+json" \
                                        "application/vnd.geo+json" \
                                        "application/vnd.ms-fontobject" \
                                        "application/x-font-ttf" \
                                        "application/x-javascript" \
                                        "application/x-web-app-manifest+json" \
                                        "application/xhtml+xml" \
                                        "application/xml" \
                                        "font/collection" \
                                        "font/eot" \
                                        "font/opentype" \
                                        "font/otf" \
                                        "font/ttf" \
                                        "image/bmp" \
                                        "image/svg+xml" \
                                        "image/vnd.microsoft.icon" \
                                        "image/x-icon" \
                                        "text/cache-manifest" \
                                        "text/calendar" \
                                        "text/css" \
                                        "text/html" \
                                        "text/javascript" \
                                        "text/plain" \
                                        "text/markdown" \
                                        "text/vcard" \
                                        "text/vnd.rim.location.xloc" \
                                        "text/vtt" \
                                        "text/x-component" \
                                        "text/x-cross-domain-policy" \
                                        "text/xml"
        </IfModule>
    </IfModule>
    <IfModule mod_headers.c>
        Header append Vary User-Agent env=!dont-vary
        Header set X-UA-Compatible "IE=edge"
        # `mod_headers` cannot match based on the content-type, however,
        # the `X-UA-Compatible` response header should be send only for
        # HTML documents and not for the other resources.
        <FilesMatch "\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ic[os]|jpe?g|m?js|json(ld)?|m4[av]|manifest|map|markdown|md|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$">
            Header unset X-UA-Compatible
        </FilesMatch>
        # Prevent some browsers from MIME-sniffing the response.
        #
        # This reduces exposure to drive-by download attacks and cross-origin
        # data leaks, and should be left uncommented, especially if the server
        # is serving user-uploaded content or content that could potentially be
        # treated as executable by the browser.
        Header set X-Content-Type-Options "nosniff"
        # Remove the `X-Powered-By` response header
        Header unset X-Powered-By
    </IfModule>
    <IfModule mod_expires.c>
        ExpiresActive on
        ExpiresDefault "access plus 1 month"
        # CSS
        ExpiresByType text/css "access plus 1 year"
        # Data interchange
        ExpiresByType application/atom+xml "access plus 1 hour"
        ExpiresByType application/rdf+xml "access plus 1 hour"
        ExpiresByType application/rss+xml "access plus 1 hour"
        ExpiresByType application/json "access plus 0 seconds"
        ExpiresByType application/ld+json "access plus 0 seconds"
        ExpiresByType application/schema+json "access plus 0 seconds"
        ExpiresByType application/vnd.geo+json "access plus 0 seconds"
        ExpiresByType application/xml "access plus 0 seconds"
        ExpiresByType text/calendar "access plus 0 seconds"
        ExpiresByType text/xml "access plus 0 seconds"
        # Favicon (cannot be renamed!) and cursor images
        ExpiresByType image/vnd.microsoft.icon "access plus 1 week"
        ExpiresByType image/x-icon "access plus 1 week"
        # HTML
        ExpiresByType text/html "access plus 0 seconds"
        # JavaScript
        ExpiresByType application/javascript "access plus 1 year"
        ExpiresByType application/x-javascript "access plus 1 year"
        ExpiresByType text/javascript "access plus 1 year"
        # Manifest files
        ExpiresByType application/manifest+json "access plus 1 week"
        ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
        ExpiresByType text/cache-manifest "access plus 0 seconds"
        # Markdown
        ExpiresByType text/markdown "access plus 0 seconds"
        # Media files
        ExpiresByType audio/ogg "access plus 1 month"
        ExpiresByType image/bmp "access plus 1 month"
        ExpiresByType image/gif "access plus 1 month"
        ExpiresByType image/jpeg "access plus 1 month"
        ExpiresByType image/png "access plus 1 month"
        ExpiresByType image/svg+xml "access plus 1 month"
        ExpiresByType image/webp "access plus 1 month"
        ExpiresByType video/mp4 "access plus 1 month"
        ExpiresByType video/ogg "access plus 1 month"
        ExpiresByType video/webm "access plus 1 month"
        # Web fonts
        # Collection
        ExpiresByType font/collection "access plus 1 month"
        # Embedded OpenType (EOT)
        ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
        ExpiresByType font/eot "access plus 1 month"
        # OpenType
        ExpiresByType font/opentype "access plus 1 month"
        ExpiresByType font/otf "access plus 1 month"
        # TrueType
        ExpiresByType application/x-font-ttf "access plus 1 month"
        ExpiresByType font/ttf "access plus 1 month"
        # Web Open Font Format (WOFF) 1.0
        ExpiresByType application/font-woff "access plus 1 month"
        ExpiresByType application/x-font-woff "access plus 1 month"
        ExpiresByType font/woff "access plus 1 month"
        # Web Open Font Format (WOFF) 2.0
        ExpiresByType application/font-woff2 "access plus 1 month"
        ExpiresByType font/woff2 "access plus 1 month"
        # Other
        ExpiresByType text/x-cross-domain-policy "access plus 1 week"
    </IfModule>
</VirtualHost>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment