Choose the kind of site, enter your domain and get a complete, commented Apache VirtualHost file. It handles HTTPS with Let's Encrypt or your own certificate, HTTP to HTTPS and www redirects, PHP-FPM, reverse proxying with WebSockets, single-page app routing, compression, caching and security headers, plus the exact commands for Debian/Ubuntu or RHEL-based servers.
Last updated:
Generated configuration
Advertisement
Advertisement
How to use the Apache Virtual Host Generator
Choose the site type: static files, PHP through PHP-FPM, a reverse proxy to an app server, or a single-page app.
Enter ServerName and aliases, the document root or backend URL, and pick how www should be handled.
Set up HTTPS with Let's Encrypt or your own certificate, and choose the HTTP to HTTPS redirect, HTTP/2 and HSTS.
Pick performance and security options and add any custom redirects.
Copy the config or the install commands, save the file, run the config test and reload Apache.
How Apache chooses a virtual host
For each request Apache first looks at the IP address and port, then at the host name:
All <VirtualHost> blocks whose address and port match the connection (for example *:443) are candidates.
Among them, the first one whose ServerName or ServerAlias matches the request's Host header wins.
If no name matches, the first candidate in load order is used as the default. That is why the stock 000-default.conf often answers unknown names on Debian and Ubuntu.
Modules used by the generated config
Module
Needed for
Key directives
mod_ssl
HTTPS
SSLEngine, SSLCertificateFile, SSLProtocol
mod_http2
HTTP/2
Protocols h2 http/1.1
mod_proxy + mod_proxy_http
Reverse proxy
ProxyPass, ProxyPassReverse, ProxyPreserveHost
mod_proxy_fcgi
PHP-FPM
SetHandler "proxy:unix:…|fcgi://localhost"
mod_headers
Security headers, HSTS, X-Forwarded-Proto
Header always set, RequestHeader set
mod_deflate + mod_filter
Compression
AddOutputFilterByType DEFLATE
mod_expires
Browser caching
ExpiresActive, ExpiresByType
mod_dir
Single-page apps
FallbackResource /index.html
mod_alias
Redirects
Redirect, RedirectMatch
Troubleshooting checklist
Always run the config test (apache2ctl configtest or apachectl configtest) and reload instead of restart so open connections are not dropped.
403 Forbidden: the Apache user (www-data or apache) needs read access to the files and execute access to every parent folder, and the <Directory> block must contain Require all granted. On SELinux systems also check the file context with ls -Z.
503 Service Unavailable behind a proxy: the backend is not running or listens elsewhere. Test it on the server with curl -I http://127.0.0.1:3000/ and read the site's error log.
PHP source is downloaded instead of run: the PHP handler is missing; check the PHP-FPM socket path with ls /run/php/ and that mod_proxy_fcgi is enabled.
Redirect loop behind Cloudflare or a load balancer: the proxy may talk to Apache over HTTP, so the HTTP to HTTPS redirect fires again. Use the proxy's own HTTPS redirect or full end-to-end TLS.
Frequently asked questions
Where do Apache virtual host files go?
On Debian and Ubuntu, save the file in /etc/apache2/sites-available/ with a .conf extension and enable it with sudo a2ensite name.conf. On RHEL, Rocky, AlmaLinux and Fedora, put it in /etc/httpd/conf.d/ with a .conf extension; every .conf file there is loaded automatically. Reload Apache afterwards.
How do I redirect HTTP to HTTPS in Apache?
Create a VirtualHost on port 80 for your domain that contains only Redirect permanent / https://example.com/ and put the real site in the VirtualHost on port 443. Redirect keeps the rest of the path, so /about goes to https://example.com/about.
How do I set up Apache as a reverse proxy?
Enable mod_proxy and mod_proxy_http, then add ProxyPass / http://127.0.0.1:3000/ and ProxyPassReverse / http://127.0.0.1:3000/ inside the VirtualHost. ProxyPreserveHost On passes the original host name, and RequestHeader set X-Forwarded-Proto https tells the app that the visitor used HTTPS.
How do I use PHP-FPM with Apache?
Enable mod_proxy and mod_proxy_fcgi and send .php files to the PHP-FPM socket with a FilesMatch block containing SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost". This lets Apache use the event MPM and HTTP/2, which do not work with mod_php.
Why does apachectl configtest fail with an SSL certificate error?
SSLCertificateFile and SSLCertificateKeyFile must point to files that exist when Apache starts. Obtain the certificate first, for example with sudo certbot certonly --apache -d example.com, or temporarily disable HTTPS in the generator, deploy, get the certificate and then enable HTTPS.
What is the difference between ServerName and ServerAlias?
ServerName is the main host name of the virtual host and is used when Apache builds self-referencing URLs. ServerAlias lists additional names, such as www.example.com, that the same VirtualHost answers. Apache picks the virtual host whose ServerName or ServerAlias matches the Host header of the request.
Is anything uploaded when I use this generator?
No. The configuration is built in your browser, and your settings are only remembered in this browser's local storage.
Are all the tools on FreeToolCabin tested for quality and accuracy?
Yes! Every tool on our site undergoes automated Q/A testing in real browser environments to ensure high precision, correct output, and zero errors. If you happen to spot a bug or have a suggestion, please contact us at [email protected] and our team will review it right away.