• Stars
    star
    3,193
  • Rank 14,059 (Top 0.3 %)
  • Language
    Shell
  • License
    MIT License
  • Created over 11 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Apache HTTP server boilerplate configs

Apache Server Configs

Test

Apache Server Configs is a collection of configuration snippets that can help your server improve the website's performance and security, while also ensuring that resources are served with the correct content-type and are accessible, if needed, even cross-domain.

Getting Started

There are two options for getting the Apache server configs:

  • If you have access to the main server configuration file (usually called httpd.conf), you should configure Apache this way. This is usually the recommended way, as using .htaccess files slows down Apache!
  • If you don't have access to it, which is quite common with hosting services, checkout the .htaccess guide.

Using the Apache server configs repo directly has a few required steps to be able to work.

See also the Apache Getting Started.

Check httpd.conf settings

The first thing to check is that the httpd.conf file contains appropriate values for your specific install.

Most specific variables are:

  • ServerRoot
  • User
  • Group
  • ErrorLog
  • CustomLog
  • TypesConfig (ensure that the path for the mime.types file is valid)

Apache test and restart

  • To verify Apache config

    apache2 -t
  • To verify Apache config with a custom file

    apache2 -t -f httpd.conf
  • To reload Apache and apply the new config

    apache2ctl reload

Enable Apache httpd modules

Some configurations won't have any effect if the appropriate modules aren't enabled. So, in order for everything to work as intended, you need to ensure you have the following Apache modules enabled:

For more detailed information on configuration files and how to use them, please check the appropriate Apache documentation:

Standalone

These instructions should work on any distribution where apt-get has been used to install Apache.

  1. Open up a terminal and type the following command. Enter your password when prompted.

    sudo a2enmod setenvif headers deflate filter expires rewrite include
  2. Restart apache by using the following command, so the new configuration takes effect.

    sudo /etc/init.d/apache2 restart

With MAMP/WAMP/XAMPP

  • MAMP PRO. On the main screen, click the Apache tab and ensure that all the required modules are 'checked', indicating they are enabled.

  • WampServer. If you have installed WampServer just click on the icon in the task bar then Apache section then modules section. You will be presented with a list of modules. Simply click on a module name to enable it. WampServer will automatically restart the Apache service after you enable a module.

  • Others. Locate the httpd.conf file, which is typically found in:

    • MAMP: /Applications/MAMP/conf/apache/httpd.conf
    • XAMPP: /Applications/XAMPP/etc/httpd.conf
    • WAMP: C:\apache\conf\httpd.conf

    Open the file in a text editor and uncomment all the required modules. Once you have done so, reset MAMP/WAMP/XAMPP.

Basic structure

This repository has the following structure:

./
β”œβ”€β”€ vhosts/
β”‚   β”œβ”€β”€ 000-default.conf
β”‚   └── templates/
β”œβ”€β”€ h5bp/
β”‚   β”œβ”€β”€ basic.conf
β”‚   └── .../
└── httpd.conf
  • vhosts/

    This directory should contain all the server definitions.

    Except if they are dot prefixed or non .conf extension, all files in this folder are loaded automatically.

    • templates folder

      Files in this folder contain a <VirtualHost/> template for secure and non-secure hosts. They are intended to be copied in the vhosts folder with all example.com occurrences changed to the target host.

  • h5bp/

    This directory contains config snippets (mixins) to be included as desired.

    There are two types of config files provided, individual config snippets and combined config files which provide convenient defaults.

    • basic.conf

      This file loads a small subset of the rules provided by this repository to add expires headers, allow cross-domain fonts and protect system files from web access. The basic.conf file includes the rules which are recommended to always be defined.

  • httpd.conf

    The main Apache config file.

Usage

The default location of the configuration files is /usr/local/apache2/, but these files may be located any of a variety of places, depending on how exactly you installed the server.
Common locations for these files may be found in the httpd wiki.

As a reference

To use as reference requires no special installation steps, download/checkout the repository to a convenient location and adapt your existing httpd configuration incorporating the desired functionality from this repository.

Download the latest release archive.

Directly

To use directly, add httpd config files from this repository.
For example:

apache2ctl stop
git clone https://github.com/h5bp/server-configs-apache.git /tmp/h5bp-apache
cd /usr/local
cp -r apache2 apache2-previous
cp -r /tmp/h5bp-apache/* apache2
# install-specific edits
apache2ctl start

Manage sites

cd /usr/local/apache2/vhosts
  • Creating a new site

    cp templates/example.com.conf .actual-hostname.conf
    sed -i 's/example.com/actual-hostname/g' .actual-hostname.conf
  • Enabling a site

    mv .actual-hostname.conf actual-hostname.conf
  • Disabling a site

    mv actual-hostname.conf .actual-hostname.conf
apache2ctl reload

.htaccess file

Usage

Just copy the .htaccess file in the root of the website.

Getting options:

  • Download the h5bp.htaccess on the latest release and rename the file to .htaccess
  • Install them via npm: npm install --save-dev apache-server-configs Inside the dist/ folder, you'll find a ready-to-use .htaccess file.

Custom .htaccess builds

Security, mime-type, and caching best practices evolve, and so should do your .htaccess file. In the past, with each new Apache Server Configs release it was quite tedious to find out which .htaccess trick was just new or only had changes in certain nuances.

The build script with its re-usable and customizable build configuration lets you easily update your .htaccess file. Each new .htaccess build will contain the updated Apache Server Configs source files, enabled or commented-out according to your settings in the htaccess.conf of your project root.

Configuration file: htaccess.conf

It allows you to define which module to enable or disable for your project. Just copy the default htaccess.conf from this repo into your project directory. Adjust to your needs, and/or add custom code snippets you need for your project. Its syntax is straight and pretty much self-explanatory:

# Example Module

title   "example module"
enable  "src/example-module/images.conf"
enable  "src/example-module/web_fonts.conf"
disable "src/example-module/not-needed.conf"
omit    "src/example-module/not-needed-at-all.conf"

#... more modules ...
Disabling modules

For example, the β€œCross-origin web fonts” snippet is always included in our pre-built .htaccess file and enabled. If your project does not deal with web fonts, you can disable or omit this section:

This will comment out the section:

disable  "h5bp/cross-origin/web_fonts.conf"

…and this will exclude the section, saving lines in output:

omit  "h5bp/cross-origin/web_fonts.conf"
Enabling modules

For example, the β€œForcing https://” snippet is disabled by default, although being included in our pre-built .htaccess. To enable this snippet, change the disable keyword to enable:

enable "h5bp/rewrites/rewrite_http_to_https.conf"
Controlling the size of the output .htaccess file

The default partials contain significant numbers of comment lines, which contain valuable guidance about how and why to use the setting as well as web references. However, some may feel that the size of the resulting .htaccess file is too large.

The special keyword no-partials-comments can be used to prevent comment lines from being copied out of the partials into .htaccess.

Note This keyword does not control comments created by the build script (such as title or disabled directives), only those that are in the source partials files.

no-partials-comments
Adding custom modules

Imagine you're passing all requests to non-existing files to your favorite web framework. The according mod_dir snippet would go like this:

FallbackResource index.php

Store this snippet in a file, e.g. config/framework_rewrites.conf, and add a reference in your htaccess.conf:

# PROJECT MODULES
enable "config/framework_rewrites.conf"

Build script: build.sh

Dive into your project root and call the build script from wherever you cloned the repo. Here are three examples:

  1. Create a default .htaccess

Create a default .htaccess in the current work directory. An existing htaccess.conf in this directory will be used; if none is present, the default configuration will apply.

$ path/to/server-configs-apache/bin/build.sh

# Output looks like:
[βœ”] Build .htaccess
[βœ”] Moved in place: './.htaccess'
  1. Custom output location

Just add an output path and filename as a parameter. By the way, if there's an existing .htaccess file, the build script will create a backup.

$ path/to/server-configs-apache/bin/build.sh htdocs/.htaccess
[βœ”] Build .htaccess
[βœ”] Create backup: 'htdocs/.htaccess~'
[βœ”] Moved in place: 'htdocs/.htaccess'
  1. Custom .htaccess configuration

Why not maintain your personal ~/htaccess.conf? This example creates a .htaccess in the current work directory, according to your favorite settings you may have stored in your $HOME directory:

path/to/server-configs-apache/bin/build.sh ./.htaccess ~/htaccess.conf

Support

  • Apache v2.4.17+

Contributing

Anyone is welcome to contribute, however, if you decide to get involved, please take a moment to review the guidelines:

Acknowledgements

Apache Server Configs is only possible thanks to all the awesome contributors!

License

The code is available under the MIT license.

More Repositories

1

Front-end-Developer-Interview-Questions

A list of helpful front-end related questions you can use to interview potential candidates, test yourself or completely ignore.
Nunjucks
59,382
star
2

html5-boilerplate

A professional front-end template for building fast, robust, and adaptable web apps or sites.
JavaScript
56,323
star
3

server-configs-nginx

Nginx HTTP server boilerplate configs
11,104
star
4

Effeckt.css

This repo is archived. Thanks!
CSS
10,883
star
5

mobile-boilerplate

DEPRECATED - A front-end template that helps you build fast, modern mobile web apps.
ApacheConf
3,861
star
6

server-configs

Boilerplate configurations for various web servers.
3,097
star
7

lazyweb-requests

Get projects and ideas built by the community
1,688
star
8

ant-build-script

Ant build script intended for use with HTML5 Boilerplate. You may find something useful here, but this project is archived.
Shell
985
star
9

html5please

Graded Feature Support: Look up web technologies and find out if they are ready for use.
JavaScript
837
star
10

html5boilerplate.com

Files for the HTML5 Boilerplate website.
HTML
487
star
11

mothereffinganimatedgif

Make your animated gifs in the browser! Oh yeah!
JavaScript
378
star
12

server-configs-node

Express / Connect middleware for websites. Goes well with HTML5 Boilerplate.
JavaScript
342
star
13

server-configs-iis

IIS Web.Config Boilerplates
338
star
14

movethewebforward

Project archived.
JavaScript
284
star
15

create-html5-boilerplate

npx quick start for html5-boilerplate
JavaScript
283
star
16

generator-h5bp

Archived!
JavaScript
239
star
17

main.css

A repository for the development of the HTML5 Boilerplate CSS file, main.css
CSS
201
star
18

generator-server-configs

This project is archived
JavaScript
136
star
19

html5-boilerplate-template

HTML5-Boilerplate Template Repo
CSS
115
star
20

h5bp.github.io

A website for the H5BP organization. Browse all the H5BP projects in one place.
JavaScript
84
star
21

generator-mobile-boilerplate

Scaffolds out H5BP Mobile Boilerplate
JavaScript
76
star
22

server-configs-gae

Google App Engine (GAE) app boilerplate config
62
star
23

server-configs-lighttpd

Lighttpd HTTP server boilerplate configs
55
star
24

html5boilerplate.com-mobile

Deprecated- thanks!
JavaScript
40
star
25

server-configs-test

Tests for HTTP server boilerplate configs
JavaScript
40
star
26

.github

The readme for the @h5bp organization's homepage
4
star