Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS
Go to file
Matthew Holt e3f2d96a5e
httpserver: Flags to customize HTTP and HTTPS ports (incl. for ACME)
This commit removes _almost_ all instances of hard-coded ports 80 and
443 strings, and now allows the user to define what the HTTP and HTTPS
ports are by the -http-port and -https-ports flags.

(One instance of "80" is still hard-coded in tls.go because it cannot
import httpserver to get access to the HTTP port variable. I don't
suspect this will be a problem in practice, but one workaround would be
to define an exported variable in the caddytls package and let the
httpserver package set it as well as its own HTTPPort variable.)

The port numbers required by the ACME challenges HTTP-01 and TLS-SNI-01
are hard-coded into the spec as ports 80 and 443 for good reasons,
but the big question is whether they necessarily need to be the HTTP
and HTTPS ports. Although the answer is probably no, they chose those
ports for convenience and widest compatibility/deployability. So this
commit also assumes that the "HTTP port" is necessarily the same port
on which to serve the HTTP-01 challenge, and the "HTTPS port" is
necessarily the same one on which to serve the TLS-SNI-01 challenge. In
other words, changing the HTTP and HTTPS ports also changes the ports
the challenges will be served on.

If you change the HTTP and HTTPS ports, you are responsible for
configuring your system to forward ports 80 and 443 properly.

Closes #918 and closes #1293. Also related: #468.
2017-03-06 18:18:49 -07:00
caddy Godoc comment; report -validate results to stdout too 2017-01-23 23:48:12 -07:00
caddyfile Revert "Revert removed method" (#1465) 2017-02-20 08:47:56 -07:00
caddyhttp httpserver: Flags to customize HTTP and HTTPS ports (incl. for ACME) 2017-03-06 18:18:49 -07:00
caddytls httpserver: Flags to customize HTTP and HTTPS ports (incl. for ACME) 2017-03-06 18:18:49 -07:00
dist Version 0.9.5 2017-01-24 08:29:01 -07:00
startupshutdown Log Startup and Shutdown Commands 2016-10-24 20:48:36 +01:00
.gitattributes Catch whitespace code style violations locally (#774) 2016-04-20 16:56:57 +02:00
.gitignore Enable downloading of protected content. See issue #979 (#980) 2016-08-07 23:16:33 -06:00
.travis.yml Update CI to use Go 1.8 (#1444) 2017-02-16 16:37:12 -07:00
appveyor.yml Update CI to use Go 1.8 (#1444) 2017-02-16 16:37:12 -07:00
assets_test.go Rewrote Caddy from the ground up; initial commit of 0.9 branch 2016-06-04 17:00:29 -06:00
assets.go Rewrote Caddy from the ground up; initial commit of 0.9 branch 2016-06-04 17:00:29 -06:00
caddy_test.go Minor test cleanup 2017-01-23 22:06:55 -07:00
caddy.go Use RequestURI when redirecting to canonical path. (#1331) 2017-02-28 05:54:12 -07:00
commands_test.go Fix misspellings 2016-09-05 10:20:34 -06:00
commands.go Rewrote Caddy from the ground up; initial commit of 0.9 branch 2016-06-04 17:00:29 -06:00
CONTRIBUTING.md Detect HTTPS interception (#1430) 2017-02-17 14:07:57 -07:00
controller.go OnFirstStartup and OnFinalShutdown callbacks added 2016-06-23 18:02:12 -06:00
ISSUE_TEMPLATE More minor text fixes 2016-08-30 13:37:35 -06:00
LICENSE.txt License is a text file 2015-08-01 16:07:59 -06:00
plugins.go Add StartupHooks to Plugins (#1330) 2017-01-14 07:25:57 -07:00
README.md Update CI to use Go 1.8 (#1444) 2017-02-16 16:37:12 -07:00
rlimit_posix.go improve rlimit usage (#982) 2016-08-02 21:01:36 -06:00
rlimit_windows.go improve rlimit usage (#982) 2016-08-02 21:01:36 -06:00
sigtrap_posix.go Rewrote Caddy from the ground up; initial commit of 0.9 branch 2016-06-04 17:00:29 -06:00
sigtrap_windows.go Rewrote Caddy from the ground up; initial commit of 0.9 branch 2016-06-04 17:00:29 -06:00
sigtrap.go OnFirstStartup and OnFinalShutdown callbacks added 2016-06-23 18:02:12 -06:00

Caddy

community twitter Documentation Linux Build Status Windows Build Status
Go Report Card
Sourcegraph Badge

Caddy is a general-purpose web server for Windows, Mac, Linux, BSD, and
Android. It is
a capable but easier alternative to other popular web servers.

Releases ·
User Guide ·
Community

Try browsing the code on Sourcegraph!

Menu

Features

  • Easy configuration with Caddyfile
  • Automatic HTTPS via Let's Encrypt; Caddy
    obtains and manages all cryptographic assets for you
  • HTTP/2 enabled by default (powered by Go standard library)
  • Virtual hosting for hundreds of sites per server instance, including TLS
    SNI
  • Experimental QUIC support for those that like speed
  • TLS session ticket key rotation for more secure connections
  • Brilliant extensibility so Caddy can be customized for your needs
  • Runs anywhere with no external dependencies (not even libc)

Quick Start

Caddy binaries have no dependencies and are available for every platform.
Install Caddy any one of these ways:

Once caddy is in your PATH, you can cd to your website's folder and run
caddy to serve it. By default, Caddy serves the current directory at
localhost:2015.

To customize how your site is served, create a file named Caddyfile by your
site and paste this into it:

localhost

gzip
browse
websocket /echo cat
ext    .html
log    /var/log/access.log
proxy  /api 127.0.0.1:7005
header /api Access-Control-Allow-Origin *

When you run caddy in that directory, it will automatically find and use
that Caddyfile to configure itself.

This simple file enables compression, allows directory browsing (for folders
without an index file), hosts a WebSocket echo server at /echo, serves clean
URLs, logs requests to access.log, proxies all API requests to a backend on
port 7005, and adds the coveted Access-Control-Allow-Origin: * header for
all responses from the API.

Wow! Caddy can do a lot with just a few lines.

To host multiple sites and do more with the Caddyfile, please see the
Caddyfile documentation.

Note that production sites are served over
HTTPS by default.

Caddy has a command line interface. Run caddy -h to view basic help or see
the CLI documentation for details.

Running as root: We advise against this. You can still listen on ports
< 1024 using setcap like so: sudo setcap cap_net_bind_service=+ep ./caddy

Running from Source

Note: You will need Go 1.8 or newer.

  1. go get github.com/mholt/caddy/caddy
  2. cd into your website's directory
  3. Run caddy (assuming $GOPATH/bin is in your $PATH)

Caddy's main() is in the caddy subfolder. To recompile Caddy, use
build.bash found in that folder.

Running in Production

The Caddy project does not officially maintain any system-specific
integrations, but your download file includes
unofficial resources
contributed by the community that you may find helpful for running Caddy in
production.

How you choose to run Caddy is up to you. Many users are satisfied with
nohup caddy &. Others use screen. Users who need Caddy to come back up
after reboots either do so in the script that caused the reboot, add a command
to an init script, or configure a service with their OS.

Contributing

Join our community where you can chat with
other Caddy users and developers!

Please see our contributing guidelines
and check out the developer wiki.

We use GitHub issues and pull requests only for discussing bug reports and
the development of specific changes. We welcome all other topics on the
forum!

If you want to contribute to the documentation, please submit pull requests to caddyserver/caddyserver.com.

Thanks for making Caddy -- and the Web -- better!

Special thanks to
DigitalOcean
for hosting the Caddy project.

About the Project

Caddy was born out of the need for a "batteries-included" web server that runs
anywhere and doesn't have to take its configuration with it. Caddy took
inspiration from spark,
nginx, lighttpd,
Websocketd
and Vagrant,
which provides a pleasant mixture of features from each of them.

The name "Caddy": The name of the software is "Caddy", not "Caddy Server"
or "CaddyServer". Please call it "Caddy" or, if you wish to clarify, "the
Caddy web server". See brand guidelines.

Author on Twitter: @mholt6