使用 Caddy 替代 Nginx,全站升级 https,配置更加简单

Caddy 是什么?

Caddy 是一个多功能的 HTTP web服务器,并且使用Let's Encrypt提供的免费证书,自动让网站升级到HTTPS

Every Site on HTTPS
Caddy is a general-purpose HTTP/2 web server that serves HTTPS by default.
Fork Caddy On Github

为什么要使用 Caddy

  1. 安全
    Caddy 是一个默认使用https协议的web服务器
  2. 无依赖
    Caddy 使用 Go 语言编写,编译好的二进制文件能够运行在任何支持Go语言的平台,不需要自己安装任何库。
  3. 使用简单
    Caddy 的配置简单,不管你是新的web开发者,还是专业人士,都能够快速上手

安装以及运行

  1. 下载 Caddy download
    在官网上选择指定的平台,下载指定平台的运行包。 这里以 CentOS 7.0 x64 为例。 选择 Linux 64-bit,然后点 DOWNLOAD。
    通过ftp将下载好的包上传到服务器,或者复制出下载地址直接在服务端 wget https://caddyserver.com/download/linux/amd64。
    使用 wget 的模式下载下来的文件名是 amd64。 tar -xzvf amd64 解压, 解压后文件如下。

    我们可以直接运行 ./caddy,这样就启动了一个静态的web服务器,根目录为当前目录,端口为 2015,可以通过你服务器的ip地址加上:2015 进行访问了。 如果你访问的时候,报404异常,在你当前目录下添加一个 index.html 文件即可。

Caddyfile 配置

这里我们看一下官网的例子说明 Caddy Documentation

:2015                    # Host: (any), Port: 2015
localhost                # Host: localhost; Port: 2015
localhost:8080           # Host: localhost; Port: 8080
example.com              # Host: example.com; Ports: 80->443
http://example.com       # Host: example.com; Port: 80
https://example.com      # Host: example.com; Ports: 80->443
http://example.com:1234  # Host: example.com; Port: 1234
https://example.com:80   # Error! HTTPS on port 80
*.example.com            # Hosts: *.example.com; Port: 2015
example.com/foo/         # Host: example.com; Ports: 80, 443; Path: /foo/
/foo/                    # Host: (any), Port: 2015, Path: /foo/

通过上面这些例子,就可以大概了解到Caddy的域名适配规则。

这个是我的所有站点的配置,可以看出来相比Nginx简单了很多:
log 用于记录访问日志
gzip 用于启用gzip压缩
proxy 用于支持反向代理
websocket 用于支持websocket协议
所有的插件文档,可以 Caddy Documentation 从官方文档上看到,都有详细的配置说明,简单易上手。
使用 caddy -conf Caddyfile 就可以使用配置文件来启动,确保80和443端口没有被服务占用。
Caddyfile 文件:

diamondfsd.com {  # 启动 http 和 https,访问 http 会自动转跳到 httpslog access_log.log  # 日志gzip  # 使用gzip压缩proxy / http://127.0.0.1:3999 { # 路径转发header_upstream Host {host}header_upstream X-Real-IP {remote}header_upstream X-Forwarded-For {remote}header_upstream X-Forwarded-Proto {scheme}}
}http://api.diamondfsd.com https://api.diamondfsd.com {  # 同时启用 http 和 https 不会自动转跳gzipproxy / http://127.0.0.1:4999 {header_upstream Host {host}header_upstream X-Real-IP {remote}header_upstream X-Forwarded-For {remote}header_upstream X-Forwarded-Proto {scheme}}
}hook.diamondfsd.com {proxy / http://127.0.0.1:9000 {header_upstream Host {host}header_upstream X-Real-IP {remote}header_upstream X-Forwarded-For {remote}header_upstream X-Forwarded-Proto {scheme}}
}http://file.diamondfsd.com {proxy / http://127.0.0.1:22222
}https://file.diamondfsd.com {  root /data/file-upload  # 指定静态文件根目录
}yd.diamondfsd.com { gziproot /data/ydigproxy /ws http://127.0.0.1:9001 {  # 转发所有 /ws 为 websocketwebsocket}
}8.diamondfsd.com {gziproot /data/quaver
}

在对比同等情况下 nginx 的配置:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;events {worker_connections 1024;
}http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 2048;include             /etc/nginx/mime.types;default_type        application/octet-stream;gzip on;gzip_min_length 1k;gzip_buffers 16 64k;gzip_http_version 1.1;gzip_comp_level 6;gzip_types application/json application/xml text/plain application/javascript text/css image/jpeg image/gif image/png text/javascript;gzip_vary on;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.server {listen 80;server_name diamondfsd.com www.diamondfsd.com;rewrite ^(.*) https://$server_name$1 permanent;}server {server_name diamondfsd.com www.diamondfsd.com;listen 443;ssl on;ssl_certificate /etc/letsencrypt/live/diamondfsd.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/diamondfsd.com/privkey.pem;location / {proxy_pass http://127.0.0.1:3999;proxy_http_version 1.1;proxy_set_header X_FORWARDED_PROTO https;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;}}server {server_name api.diamondfsd.com;listen 443;ssl on;ssl_certificate /etc/letsencrypt/live/api.diamondfsd.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/api.diamondfsd.com/privkey.pem;location / {proxy_pass http://127.0.0.1:4999;proxy_http_version 1.1;proxy_set_header X_FORWARDED_PROTO https;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;}}server {server_name api.diamondfsd.com;listen 80;location / {proxy_pass http://127.0.0.1:4999;proxy_http_version 1.1;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;}}server {server_name hook.diamondfsd.com;listen 80;location / {proxy_pass http://127.0.0.1:9000;proxy_http_version 1.1;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;}} server {server_name file.diamondfsd.com;listen 80;location / {proxy_pass http://127.0.0.1:22222;proxy_http_version 1.1;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;}}server {server_name file.diamondfsd.com;listen 443;ssl on;ssl_certificate /etc/letsencrypt/live/file.diamondfsd.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/file.diamondfsd.com/privkey.pem;root /data/file-upload; expires max;access_log /data/file-domain.log;}server {listen 80;server_name yd.diamondfsd.com;rewrite ^(.*) https://$server_name$1 permanent;} server {server_name yd.diamondfsd.com;listen 443;ssl on;ssl_certificate /etc/letsencrypt/live/yd.diamondfsd.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/yd.diamondfsd.com/privkey.pem;location /ws/ {proxy_pass http://127.0.0.1:9001;proxy_http_version 1.1;proxy_set_header Host $host;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}root /data/ydig;expires max;access_log /data/ydig-domain.log;} server {listen 80;server_name about.diamondfsd.com;rewrite ^(.*) https://$server_name$1 permanent;}server {server_name about.diamondfsd.com;listen 443;ssl on;ssl_certificate /etc/letsencrypt/live/about.diamondfsd.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/about.diamondfsd.com/privkey.pem;root /data/about-me;expires max;access_log /data/about-me-domain.log;}server {server_name 8.diamondfsd.com;listen 80;rewrite ^(.*) https://$server_name$1 permanent;}server {server_name 8.diamondfsd.com;listen 443;ssl on;ssl_certificate /etc/letsencrypt/live/8.diamondfsd.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/8.diamondfsd.com/privkey.pem;root /data/quaver;expires max;access_log /data/quaver-domain.log;}
}

可以看出,相较于Nginx来说,Caddy 的配置简单了很多,而且默认启用了 https,更加的安全。
这篇文章也比较简单,更高级的应用大家可以去阅读官方文档。
有什么问题和简介,欢迎大家相互讨论。

使用 Caddy 替代 Nginx,全站升级 https,配置更加简单相关推荐

  1. Nginx全站开启HTTPS

    Nginx配置全站HTTPS -- 以腾讯云CentOS7为例 本文章讲述了如何通过 acme.sh 申请泛域名 SSL 证书,并使用 Nginx 配置全站 HTTPS 的详细过程. 本文章始发于:N ...

  2. 为什么非全站升级HTTPS不可?

    升级HTTPS已经是大势所趋,但仍有大量互联网企业犹豫是否要全站升级HTTPS,本文梳理了全站升级HTTPS与部分升级HTTPS的优劣势对比,来判断是否真的有必要进行全站HTTPS升级. HTTPS拥 ...

  3. 为什么非全站升级HTTPS不可? 1

    升级HTTPS已经是大势所趋,但仍有大量互联网企业犹豫是否要全站升级HTTPS,为此本文梳理了全站升级HTTPS与部分升级HTTPS的优劣势对比,来判断是否真的有必要进行全站HTTPS升级. HTTP ...

  4. Nginx下的https配置

    https: https(Secure Hypertext Transfer Protocol) 安全超文本传输协议 它是以安全为目标的http通道,即它是http的安全版,它使用安全套接字层(SSL ...

  5. nginx 反向代理https配置

    配置nginx 反向代理https server {listen 443 ;#ssl http2 default_server;server_name xxxx.com;# access_log lo ...

  6. nginx https配置演示 简单可用

    直接看配置: server {listen 443 ssl;server_name {{你的域名}};root {{项目目录}};charset utf-8;location / {index ind ...

  7. nginx 正向代理https配置

    1.需求描述 nginx正向代理 如图所示,公司内网为了安全考虑,只提供一台服务器可与外网作为网关,进行访问. 1.服务器A可以访问外网: 2.服务器B,C无法访问外网: 3.服务器ABC之间内网互通 ...

  8. nginx 1.14 php,nginx 1.14.0 配置部署 thinkphp 5.1

    开始接触NGINX,配置tp5配了半天,找不到具体原因,于是用网上搜索到的配置复制粘贴搞定. 感谢 https://blog.csdn.net/qq_36431213/article/details/ ...

  9. Nginx配置http升级https

    Nginx配置https 记录一下实验室测试版服务器的https配置流程,本次为http升级至https 原有的http配置: server {listen 8001;server_name loca ...

最新文章

  1. mongodb 用户 设计_MongoDB 是什么?看完你就知道了
  2. 读取Assets中的文件数据
  3. 客户管理系统企业客户管理crm客户管理
  4. 概括鸿蒙系统的优势,从开发语言分析鸿蒙系统有何优势
  5. python阿凡提麦子问题_阿凡提愚弄国王
  6. 软件测试职业发展之路的反思(转)
  7. h5-plus.webview
  8. inherits java_JAVA内部类和组合的区别
  9. php如何用session做查询条件,php如何使用session?
  10. 从源码分析RocketMQ系列-Remoting通信架构源码详解
  11. LeetCode简单题目(#225 #226 #231 #232 #234)-5道(栈、队列、树、数字)
  12. UVA669 LA5662 Defragment【暴力】
  13. matlab 可视化 —— axis
  14. 中指北针怎么画_木工图纸怎么快速看懂?助你看懂施工图的9个技巧
  15. samba服务器无法映射,ubuntu映射网络驱动器失败,以及samba服务
  16. 【编译原理】递归下降语法分析设计原理与实现
  17. C# 打印PDF文件
  18. 零基础Java学习路线
  19. (六)DDR协议功能之ODT模式与ZQ校准
  20. 子网掩码、IP和默认网关

热门文章

  1. WordPress 主题教程 #5c:日志元数据
  2. Sql Server 2005 row_number()分页性能测试
  3. PHP7革新与性能优化
  4. Magento:在head.phtml中获取产品属性 echo a product attribute in magento head.phtml
  5. 如何编写出拥抱变化的代码
  6. HTTP协议之HTTP的结构
  7. Leetcode算法题(C语言)13--反转字符串
  8. CMake和Make——make makefile cmake qmake都是什么,有什么区别?
  9. Mysql 加锁防并发
  10. 定时备份mysql数据库压缩文件