Categorygithub.com/comp500/caddy
modulepackage
0.10.14
Repository: https://github.com/comp500/caddy.git
Documentation: pkg.go.dev

# README

Caddy

Every Site on HTTPS

Caddy is a general-purpose HTTP/2 web server that serves HTTPS by default.


@caddyserver on Twitter Caddy Forum Caddy on Sourcegraph

Download · Documentation · Community


Caddy is a production-ready open-source web server that is fast, easy to use, and makes you more productive.

Available for Windows, Mac, Linux, BSD, Solaris, and Android.

Menu

Features

  • Easy configuration with the Caddyfile
  • Automatic HTTPS on by default (via Let's Encrypt)
  • HTTP/2 by default
  • Virtual hosting so multiple sites just work
  • Experimental QUIC support for cutting-edge transmissions
  • TLS session ticket key rotation for more secure connections
  • Extensible with plugins because a convenient web server is a helpful one
  • Runs anywhere with no external dependencies (not even libc)

See a more complete list of features built into Caddy. On top of all those, Caddy does even more with plugins: choose which plugins you want at download.

Altogether, Caddy can do things other web servers simply cannot do. Its features and plugins save you time and mistakes, and will cheer you up. Your Caddy instance takes care of the details for you!

Install

Caddy binaries have no dependencies and are available for every platform. Get Caddy either of these ways:

Build

To build from source you need Git and Go (1.9 or newer). Follow these instruction for fast building:

  • Get the source with go get github.com/mholt/caddy/caddy and then run go get github.com/caddyserver/builds
  • Now cd $GOPATH/src/github.com/mholt/caddy/caddy and run go run build.go

Then make sure the caddy binary is in your PATH.

To build for other platforms, use build.go with the --goos and --goarch flags.

Quick Start

To serve static files from the current working directory, run:

caddy

Caddy's default port is 2015, so open your browser to http://localhost:2015.

Go from 0 to HTTPS in 5 seconds

If the caddy binary has permission to bind to low ports and your domain name's DNS records point to the machine you're on:

caddy -host example.com

This command serves static files from the current directory over HTTPS. Certificates are automatically obtained and renewed for you! Caddy is also automatically configuring ports 80 and 443 for you, and redirecting HTTP to HTTPS. Cool, huh?

Customizing your site

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

localhost

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

This simple file enables server push (via Link headers), allows directory browsing (for folders without an index file), hosts a WebSocket echo server at /echo, serves clean URLs, logs requests to an 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.

Doing more with Caddy

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

Sites with qualifying hostnames are served over HTTPS by default.

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

Running in Production

Caddy is production-ready if you find it to be a good fit for your site and workflow.

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

The Caddy project does not officially maintain any system-specific integrations nor suggest how to administer your own system. 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.

If you have questions or concerns about Caddy' underlying crypto implementations, consult Go's crypto packages, starting with their documentation, then issues, then the code itself; as Caddy uses mainly those libraries.

Contributing

Join our forum where you can chat with other Caddy users and developers! To get familiar with the code base, try Caddy code search on Sourcegraph!

Please see our contributing guidelines for instructions. If you want to write a plugin, 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 an issue describing the change that should be made.

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

Donors

  • DigitalOcean is hosting the Caddy project.
  • DNSimple provides DNS services for Caddy's sites.
  • DNS Spy keeps an eye on Caddy's DNS properties.

We thank them for their services. If you want to help keep Caddy free, please become a sponsor!

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" is trademarked: 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. Caddy is a registered trademark of Light Code Labs, LLC.

Author on Twitter: @mholt6

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
Package caddytls facilitates the management of TLS assets and integrates Let's Encrypt functionality into Caddy with first-class support for creating and renewing certificates automatically.
No description provided by the author

# Functions

AssetsPath returns the path to the folder where the application may store data.
CaddyfileFromPipe loads the Caddyfile input from f if f is not interactive input.
DefaultInput returns the default Caddyfile input to use when it is otherwise empty or missing.
DescribePlugins returns a string describing the registered plugins.
DirectiveAction gets the action for directive dir of server type serverType.
EmitEvent executes the different hooks passing the EventType as an argument.
HasListenerWithAddress returns whether this package is tracking a server using a listener with the address addr.
No description provided by the author
IsInternal returns true if the IP of addr belongs to a private network IP range.
IsLoopback returns true if the hostname of addr looks explicitly like a common local hostname.
IsUpgrade returns true if this process is part of an upgrade where a parent caddy process spawned this one to upgrade the binary.
LoadCaddyfile loads a Caddyfile by calling the plugged in Caddyfile loader methods.
NewTestController creates a new Controller for the server type and input specified.
RegisterCaddyfileLoader registers loader named name.
RegisterEventHook plugs in hook.
RegisterParsingCallback registers callback to be called after executing the directive afterDir for server type serverType.
RegisterPlugin plugs in plugin.
RegisterServerType registers a server type srv by its name, typeName.
SetDefaultCaddyfileLoader registers loader by name as the default Caddyfile loader if no others produce a Caddyfile.
SplitCommandAndArgs takes a command string and parses it shell-style into the command and its separate arguments.
Start starts Caddy with the given Caddyfile.
Started returns true if at least one instance has been started by this package.
Stop stops ALL servers.
TrapSignals create signal handlers for all applicable signals for this system.
Upgrade re-launches the process, preserving the listeners for a graceful upgrade.
ValidateAndExecuteDirectives will load the server blocks from cdyfile by parsing it, then execute the directives configured by it and store the resulting server blocks into inst.
ValidDirectives returns the list of all directives that are recognized for the server type serverType.

# Constants

Define names for the various events.
Define names for the various events.
Define names for the various events.
Define names for the various events.

# Variables

AppName is the name of the application.
AppVersion is the version of the application.
DefaultConfigFile is the name of the configuration file that is loaded by default if no other file is specified.
GracefulTimeout is the maximum duration of a graceful shutdown.
OnProcessExit is a list of functions to run when the process exits -- they are ONLY for cleanup and should not block, return errors, or do anything fancy.
PidFile is the path to the pidfile to create.
Quiet mode will not show any informative output on initialization.

# Structs

CaddyfileInput represents a Caddyfile as input and is simply a convenient way to implement the Input interface.
Controller is given to the setup function of directives which gives them access to be able to read tokens with which to configure themselves.
Instance contains the state of servers created as a result of calling Start and can be used to access or control those servers.
Plugin is a type which holds information about a plugin.
ServerListener pairs a server to its listener and/or packetconn.
ServerType contains information about a server type.

# Interfaces

AfterStartup is an interface that can be implemented by a server type that wants to run some code after all servers for the same Instance have started.
Context is a type which carries a server type through the load and setup phase; it maintains the state between loading the Caddyfile, then executing its directives, then making the servers for Caddy to manage.
GracefulServer is a Server and Stopper, the stopping of which is graceful (whatever that means for the kind of server being implemented).
Input represents a Caddyfile; its contents and file path (which should include the file name at the end of the path).
Listener is a net.Listener with an underlying file descriptor.
Loader is a type that can load a Caddyfile.
PacketConn is a net.PacketConn with an underlying file descriptor.
Server is a type that can listen and serve.
Stopper is a type that can stop serving.
TCPServer is a type that can listen and serve connections.
UDPServer is a type that can listen and serve packets.

# Type aliases

CtxKey is a value type for use with context.WithValue.
EventHook is a type which holds information about a startup hook plugin.
EventName represents the name of an event used with event hooks.
LoaderFunc is a convenience type similar to http.HandlerFunc that allows you to use a plain function as a Load() method.
ParsingCallback is a function that is called after a directive's setup functions have been executed for all the server blocks.
SetupFunc is used to set up a plugin, or in other words, execute a directive.