使用 Caddy 替代 Nginx,全站升级 https,配置更加简单
使用 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
- 安全
Caddy 是一个默认使用https协议的web服务器 - 无依赖
Caddy 使用 Go 语言编写,编译好的二进制文件能够运行在任何支持Go语言的平台,不需要自己安装任何库。 - 使用简单
Caddy 的配置简单,不管你是新的web开发者,还是专业人士,都能够快速上手
安装以及运行
- 下载 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,配置更加简单相关推荐
- Nginx全站开启HTTPS
Nginx配置全站HTTPS -- 以腾讯云CentOS7为例 本文章讲述了如何通过 acme.sh 申请泛域名 SSL 证书,并使用 Nginx 配置全站 HTTPS 的详细过程. 本文章始发于:N ...
- 为什么非全站升级HTTPS不可?
升级HTTPS已经是大势所趋,但仍有大量互联网企业犹豫是否要全站升级HTTPS,本文梳理了全站升级HTTPS与部分升级HTTPS的优劣势对比,来判断是否真的有必要进行全站HTTPS升级. HTTPS拥 ...
- 为什么非全站升级HTTPS不可? 1
升级HTTPS已经是大势所趋,但仍有大量互联网企业犹豫是否要全站升级HTTPS,为此本文梳理了全站升级HTTPS与部分升级HTTPS的优劣势对比,来判断是否真的有必要进行全站HTTPS升级. HTTP ...
- Nginx下的https配置
https: https(Secure Hypertext Transfer Protocol) 安全超文本传输协议 它是以安全为目标的http通道,即它是http的安全版,它使用安全套接字层(SSL ...
- nginx 反向代理https配置
配置nginx 反向代理https server {listen 443 ;#ssl http2 default_server;server_name xxxx.com;# access_log lo ...
- nginx https配置演示 简单可用
直接看配置: server {listen 443 ssl;server_name {{你的域名}};root {{项目目录}};charset utf-8;location / {index ind ...
- nginx 正向代理https配置
1.需求描述 nginx正向代理 如图所示,公司内网为了安全考虑,只提供一台服务器可与外网作为网关,进行访问. 1.服务器A可以访问外网: 2.服务器B,C无法访问外网: 3.服务器ABC之间内网互通 ...
- nginx 1.14 php,nginx 1.14.0 配置部署 thinkphp 5.1
开始接触NGINX,配置tp5配了半天,找不到具体原因,于是用网上搜索到的配置复制粘贴搞定. 感谢 https://blog.csdn.net/qq_36431213/article/details/ ...
- Nginx配置http升级https
Nginx配置https 记录一下实验室测试版服务器的https配置流程,本次为http升级至https 原有的http配置: server {listen 8001;server_name loca ...
最新文章
- mongodb 用户 设计_MongoDB 是什么?看完你就知道了
- 读取Assets中的文件数据
- 客户管理系统企业客户管理crm客户管理
- 概括鸿蒙系统的优势,从开发语言分析鸿蒙系统有何优势
- python阿凡提麦子问题_阿凡提愚弄国王
- 软件测试职业发展之路的反思(转)
- h5-plus.webview
- inherits java_JAVA内部类和组合的区别
- php如何用session做查询条件,php如何使用session?
- 从源码分析RocketMQ系列-Remoting通信架构源码详解
- LeetCode简单题目(#225 #226 #231 #232 #234)-5道(栈、队列、树、数字)
- UVA669 LA5662 Defragment【暴力】
- matlab 可视化 —— axis
- 中指北针怎么画_木工图纸怎么快速看懂?助你看懂施工图的9个技巧
- samba服务器无法映射,ubuntu映射网络驱动器失败,以及samba服务
- 【编译原理】递归下降语法分析设计原理与实现
- C# 打印PDF文件
- 零基础Java学习路线
- (六)DDR协议功能之ODT模式与ZQ校准
- 子网掩码、IP和默认网关
热门文章
- WordPress 主题教程 #5c:日志元数据
- Sql Server 2005 row_number()分页性能测试
- PHP7革新与性能优化
- Magento:在head.phtml中获取产品属性 echo a product attribute in magento head.phtml
- 如何编写出拥抱变化的代码
- HTTP协议之HTTP的结构
- Leetcode算法题(C语言)13--反转字符串
- CMake和Make——make makefile cmake qmake都是什么,有什么区别?
- Mysql 加锁防并发
- 定时备份mysql数据库压缩文件