使用 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

智能推荐

Network_Card/DR600VX-Qualcomm-Atheros-QCA9880-2T2R-MIMO-802.11ac-Mini-PCIe-Wi-Fi-Module-Dual-Ba_dr600vx网卡-程序员宅基地

文章浏览阅读328次。https://www.wallystech.com/Network_Card/DR600VX-Qualcomm-Atheros-QCA9880-2T2R-MIMO-802.11ac-Mini-PCIe-Wi-Fi-Module-Dual-Band-2.4GHz-5GHz.htmlcontact:​​[email protected] max 24dBm & 5GHz max 23dBm o..._dr600vx网卡

快速学会创建uni-app项目并了解pages.json文件_uni中的page-程序员宅基地

文章浏览阅读3.2k次,点赞103次,收藏96次。学习目标:1.学会创建uni-app项目 2.了解uni-app中pages.josn文件的作用_uni中的page

【js】JavaScript手动回收垃圾_js手动触发gc-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏5次。如何手动触发 JavaScript 垃圾回收行为?垃圾回收,即 garbage collect,简称 “GC”。这里的 “手动” 指有效地、显式地、可控地触发浏览器 JavaScript 引擎的垃圾回收行为,比如通过点击页面中的按钮来调用 JS 方法,或使用浏览器提供的功能。IEIE 实际上提供了一个未公开的 JS 方法 CollectGarbage()。至少在 I_js手动触发gc

深入理解海量日志收集利器 Flume_flume海量日志聚合-程序员宅基地

文章浏览阅读2.6k次。一、Flume是什么  Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。二 、Fulme 有什么特点Fulme 特点如下: 1、可靠性  当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to_flume海量日志聚合

说说ios原生和H5交互_h5和ios交互,判断ios还是安卓的具体代码-程序员宅基地

文章浏览阅读353次。公司项目需要用到ios原生和JS交互,所以要用到WKWebView。使用很简单,下面我贴出几幅截图(列子是通过js触发后调用ios原生方法)导入WebKit,并遵守协议开始创建WKWebView和WKWebView的配置类WKWebViewConfiguration、WKUserContentController代理方法最后remove一下,_h5和ios交互,判断ios还是安卓的具体代码

Ubuntu镜像下载(清华镜像)-程序员宅基地

文章浏览阅读6.9k次,点赞6次,收藏19次。ubuntu镜像,清华镜像_ubuntu镜像下载

随便推点

谈谈开源技术选型_开源技术 选型-程序员宅基地

文章浏览阅读4.7k次。有时感觉技术选型就像个伪命题,胜出的技术占据绝对的主流,就像 java 领域中 ejb 被 ssh/ssi 框架取代。 大部分项目使用近似的模式搭建,选型在工程中变得似乎可有可无。 时间上胜出的开源技术帮助开发者在客观上做出了选择,我们先了解下影响选型的客观因素。客观因素客观因素包括如下:1. 广泛性我们都倾向于选择更广泛应用的开源技术以规避未知性风险。2. 质量质量我们会_开源技术 选型

【目标检测数据集】盆栽植物4452张VOC+YOLO格式-程序员宅基地

文章浏览阅读377次,点赞5次,收藏8次。数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):4452标注数量(xml文件个数):4452标注数量(txt文件个数):4452标注类别数:1标注类别名称:["potted plant"]每个类别标注的框数:potted plant 框数 = 8631总框数:8631使用标注工具:labelImg标注规则:对类别进行画矩形框重要说明:暂无特别声明:本数

计算机考研专业课考c语言的大学,计算机专业考研 合理安排复习进度-程序员宅基地

文章浏览阅读272次。关于计算机专业基础综合考试、时间上安排、各阶段选用什么样的复习资料是广大考生希望了解的问题,这里这几个问题进行详细解答:第一阶段是全面复习、打好基础的阶段。时间一般从3月份开始到7月份左右。这一阶段选用的复习资料主要是和大纲比较吻合的教材以及配套的习题。目前来说,教材已经基本统一。数据结构选用严蔚敏主编、清华大学出版社出版的C语言版的《数据结构》,习题建议选用李春葆主编、清华大学出版社出版的《数据..._计算机考研初试c语言程序设计如何复习

java毕业设计基于微信小程序的校园二手交易[附源码]-程序员宅基地

文章浏览阅读276次,点赞4次,收藏4次。从实践意义上看,该平台可以为校园内的学生提供一个专门的二手商品交易场所,通过小程序的便捷性,学生可以随时随地发布自己的闲置物品信息,浏览和购买他人发布的二手商品,极大地提高了交易效率。通过实际的开发过程,学生可以更好地理解和掌握这些理论知识,并且在实践中不断提升自己的技术能力和解决问题的能力,为未来的职业生涯打下坚实的基础。随着移动互联网技术的飞速发展,微信小程序作为一种新型的应用形式,以其无需下载安装、使用方便、传播迅速的特点,在年轻群体中获得了广泛的流行。操作系统:win7以上,最好是win10。

Citrix 思杰:本月开始,员工自己缴纳五险一金-程序员宅基地

文章浏览阅读29次。大家好!我是韩老师。前两天,在脉脉上看到这个消息:我的第一反应如下图:还有公司不帮员工交五险一金的吗?后来我了解到,原来之前 Citrix 除了会交五险一金的公司部分,另外也会 Cover 五险一金的个人部分。所以员工之前不用自己交五险一金。我的反应又变成了这样:竟然还能这么操作!其实,EMC 在被收购前,五险一金的个人部分也是公司交的。哎,可惜,现在这个福利也是木有了。。。...

【Qt】一段QPushButton的styleSheet样式分享-程序员宅基地

文章浏览阅读1w次。工作内容比较多,使用过的属性有可能忘记,也分享给大家,在使用时,可以直接查找属性。而且官方给的例子(见附)属性也不多。不全,再使用到其他属性时慢慢补充完整QPushButton{ background-image:url(./res/common/main_reduction.png); background-repeat:no-repeat; border:none;}_qpushbutton的stylesheet