使用 Caddy 替代 Nginx,全站升级 https,配置更加简单_caddy websocket-程序员宅基地

技术标签: Caddy  

使用 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 会自动转跳到 https
        log 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 不会自动转跳
        gzip
        proxy / 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 { 
        gzip
        root /data/ydig
        proxy /ws http://127.0.0.1:9001 {  # 转发所有 /ws 为 websocket
                websocket
        }
}

8.diamondfsd.com {
        gzip
        root /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,更加的安全。
这篇文章也比较简单,更高级的应用大家可以去阅读官方文档。
有什么问题和简介,欢迎大家相互讨论。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Aria_Miazzy/article/details/97500824

智能推荐

MVC模式-程序员宅基地

文章浏览阅读6k次,点赞22次,收藏101次。一、MVC模式简介MVC是一种架构型模式,它本身并不引入新的功能,只是用来指导我们改善应用程序的架构,使得应用的模型和视图相分离,从而得到更好的开发和维护效率。 在MVC模式中,应用程序被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分。其中,模型部分包含了应用程序的业务逻辑和业务数据;视图部分封装了应用程序的输出形式,也就是通常所说的页_mvc模式

macOS下QT设置应用程序图标、程序坞图标_qt macos 软件图标-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏5次。1. 设置应用程序图标(finder中展示的图标)在Qt助手(QT Assistant)中,输入“setting”,可以看到下面的列表中有Setting the Application Icon,双击它就可以看到右侧窗口中的帮助文档,帮助文档里介绍了如何设置应用程序图标。文档内容很全面,包括如何设置windows、OS X和linux的程序图标。这里我们介绍如何设置macOS下应用程序的图标。如Qt助手中介绍的方法,QWindows::setWindowIcon()只能设置在程序坞中展示的图标,_qt macos 软件图标

手把手教你系列之微信公众号 java后端获取code(重定向解决)_微信授权后端重定向获取code可行么-程序员宅基地

文章浏览阅读8.4k次,点赞7次,收藏20次。微信开发文档上,获取code是在前端页面获取,但是现在也不知道为啥非得在后端获取,获取就获取吧,安排一下。获取code的目的,其实就是为了获取openid和token,获取openid和token的目的,其实是为了获取unionid和用户信息。先写个工具类,主要是两个方法,需要的,你们直接复制粘贴就好public class WxGzhUtils {/*** 获取openid access_token* @param appid* @param secret* @param code* _微信授权后端重定向获取code可行么

switch case 语句-程序员宅基地

文章浏览阅读131次。简单介绍了switch case,快来看看吧~

Unity Shader中内置的坐标空间与转换矩阵函数_unity空间转换函数-程序员宅基地

文章浏览阅读2.6k次。模型空间(model space)也称为对象空间(object space)或局部空间(local space)是指以模型原点为原点的坐标系。世界空间(world space)也称全局空间(global space)是以世界原点为原点的坐标系,世界坐标也就是Unity3D里的绝对坐标。观察空间(view space)也称摄像机空间(camera space)是以摄像机为原点的坐标系。(这是各坐标空..._unity空间转换函数

火狐Httprequester使用_httprequester 火狐-程序员宅基地

文章浏览阅读5.7k次。模拟浏览器请求的插件,本人使用的是火狐的HttpRequester插件,安装方法是在扩展程序中搜索名称添加,重启浏览器即可 本文是记录Post和Get请求的基本方法1、Post请求带参数 如上图,若选择请求内容为json格式,则必须使用json(键值对)格式的内容,否则请求报错,请求内容格式如下:{"kkk":{"name":"ddd","age":111},"ssss":{"name":_httprequester 火狐

随便推点

概率论基础复习题-程序员宅基地

文章浏览阅读912次,点赞13次,收藏11次。显著性水平从0.05降低到0.01,说明拒绝域也减小,在拒绝域大的情况下接受,那么在该拒绝域变小的情况下也定然接受。[3] 茆诗松, 周纪芗. 概率论与数理统计 (第三版). 中国统计出版社, 2007。[4] 陈家鼎等. 数理统计学讲义 (第二版). 高等教育出版社, 2006。[5] 王松桂等. 概率论与数理统计 (第三版). 科学出版社, 2011。[1] 陈希孺. 概率论与数理统计. 中国科学技术大学出版社, 2009。样本方差是总体方差的无偏估计。统计值是一个数值,统计量是一个随机变量。

使用BeanUtils.populate将map集合封装为bean对象_beanutils.populate(customer, map);-程序员宅基地

文章浏览阅读1.3k次。背景把jsp页面中表单的内容存到数据库,和request.getParameterMap配合使用可以将jsp页面表单的数据转化为bean对象。在对象参数比较多的情况下,使用request.getParameter比较麻烦BeanUtils位于org.apache.commons.beanutils.BeanUtils下面,其方法populate的作用解释如下:完整方法:BeanUtils.populate( Object bean, Map properties ),这个方法会遍_beanutils.populate(customer, map);

站长常用的200个js代码-程序员宅基地

文章浏览阅读134次。站长常用的200个js代码1.文本框焦点问题onBlur:当失去输入焦点后产生该事件onFocus:当输入获得焦点后,产生该文件Onchange:当文字值改变时,产生该事件Onselect:当文字加亮后,产生该文件<input type="text" value="郭强" onfocus="if(value=='郭强') {value=''}" onb..._站长之家h5端站点统计js代码

springboot基于微信小程序的社区外卖系统--70047(免费领源码、附论文)可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案-程序员宅基地

文章浏览阅读131次。社区外卖系统小程序主要功能模块包括推荐菜品、今日特惠、外卖咨询、配送信息、用户反馈,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,采用springboot框架、Java技术、Ajax技术进行业务系统的编码及其开发,实现了本系统的全部功能。

Java“牵手”易贝商品列表数据,关键词搜索易贝商品数据接口,易贝API申请指南-程序员宅基地

文章浏览阅读248次。ebayAPI接口入点(按图搜索,商品详情,关键词搜索,商品评论,订单类接口),希望以上的示例,可以帮到有需要的朋友。以上示例中,通过发送 HTTP /POST/GET 请求获取ebay商品列表和详情的 API 数据,然后将返回的 JSON 数据解析为对应的数据结构,以便进一步处理和使用。要获取ebay商品列表和商品详情页面数据,您可以通过开放平台的接口或者直接访问ebay商城的网页来获取商品详情信息。调用开放平台提供的接口,传入商品 ID 作为参数,获取对应商品的列表和详情页面数据。

Redis-Cluster集群搭建-程序员宅基地

文章浏览阅读758次,点赞22次,收藏8次。Redis 集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis 集群不需要 Sentinel 哨兵也能完成节点移除和故障转移的功能。

推荐文章

热门文章

相关标签