通过 Nginx 反向代理来加速 Google Fonts 文件的加载速度,实现更快的页面加载速度。

首先,你需要创建一个文件名为 google_fonts.conf 的配置文件(或者你可以将以下行添加到已有的 Nginx 配置文件中):

location /google-fonts/css/ {
	sub_filter 'fonts.gstatic.com' '$host/google-fonts';
	sub_filter_once off;
	sub_filter_types text/css;
	proxy_set_header Host fonts.googleapis.com;
	proxy_set_header Accept-Encoding '';
	proxy_redirect off;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Scheme $scheme;
	proxy_pass https://fonts.googleapis.com/css;
	
	proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie Vary;
	
	proxy_cache nginx-cache;
	proxy_cache_valid  500 502 503 504 404 10s;
	proxy_cache_valid  200 302 304 365d;
	proxy_cache_key $support_woff2$host$uri$is_args$args;
	add_header X-Proxy-Cache $upstream_cache_status;
	
	expires max;
}

location /google-fonts/css2/ {
	sub_filter 'fonts.gstatic.com' '$host/google-fonts';
	sub_filter_once off;
	sub_filter_types text/css;
	proxy_set_header Host fonts.googleapis.com;
	proxy_set_header Accept-Encoding '';
	proxy_redirect off;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Scheme $scheme;
	proxy_pass https://fonts.googleapis.com/css2;
	
	proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
	
	proxy_cache nginx-cache;
	proxy_cache_valid  500 502 503 504 404 10s;
	proxy_cache_valid  200 302 304 365d;
	proxy_cache_key $support_woff2$host$uri$is_args$args;
	add_header X-Proxy-Cache $upstream_cache_status;
	
	expires max;
}

location /google-fonts/icon/ {
	sub_filter 'fonts.gstatic.com' '$host/google-fonts';
	sub_filter_once off;
	sub_filter_types text/css;
	proxy_set_header Host fonts.googleapis.com;
	proxy_set_header Accept-Encoding '';
	proxy_redirect off;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Scheme $scheme;
	proxy_pass https://fonts.googleapis.com/icon;
	
	proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
	
	proxy_cache nginx-cache;
	proxy_cache_valid  500 502 503 504 404 10s;
	proxy_cache_valid  200 302 304 365d;
	proxy_cache_key $support_woff2$host$uri$is_args$args;
	add_header X-Proxy-Cache $upstream_cache_status;
	
	expires max;
}

location ~ /google-fonts/.+\.(woff2|woff|svg|ttf)$ {
	rewrite  /google-fonts/(.*) /$1 break;
	
	proxy_set_header Host fonts.gstatic.com;
	proxy_redirect off;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Scheme $scheme;
	proxy_pass https://fonts.gstatic.com;
	
	proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
	
	proxy_cache nginx-cache;
	proxy_cache_valid  500 502 503 504 404 10s;
	proxy_cache_valid  200 302 304 365d;
	proxy_cache_key $host$uri$is_args$args;
	add_header X-Proxy-Cache $upstream_cache_status;
	
	expires max;
}

这里“/google-fonts”是虚拟目录的名称,也可以使用任何其他名称,但必须与主站点 URL 路径相同。

然后,将以下行添加到 Nginx 主配置中,以从新配置的 google_fonts.conf 文件加载配置:

http {
	proxy_temp_path /path/to/temp;
	proxy_cache_path /path/to/cache levels=1:2 keys_zone=nginx-cache:256m max_size=5g inactive=365d;
	include /path/to/google_fonts.conf;
    # other directives
}

接下来,测试 Nginx 配置是否正确:

sudo nginx -t

如果没有错误,重新加载 Nginx 以使更改生效:

sudo service nginx reload

最后,该网站中的字体请求现在将从 googleapis.com 转到你的服务器,从而提高字体加载速度。

需要注意的是,此方法应该仅用于使用 Google Fonts 的网站,并需要遵守 Google 的服务条款。

按照的是中文的visual studio,用起来很不方便,因为程序员的都是英文版,平时交流时也是英文的名字

转换语言时发现只有中文和跟随windows系统的设置

官方给的文档看的不是很清楚

查阅资料后总结下步骤

1、进入到设置–选项–区域设置,发现没有英文语言

2、进入工具–获取工具和功能

3、等待加载完毕后,然后选择语言包–选择语言,确定修改

4、修改完成后再次进入到设置–选项–区域设置,切换语言为英语,确定

重启visual studio后语言切换到英语,如下图

设置成功

在 Nginx 服务器配置中使用 if 和 else 可以根据不同的请求参数、请求头、请求方法等条件来做出不同的响应。你可以在 server 块中使用 if 和 else 语句,语法如下:

server {
    # Server configuration
    if ($condition) {
        # Condition is true, do something
    }
    else {
        # Condition is not true, do something else
    }
}

在 server 块中使用 if 和 else 与在 location 块中使用 if 和 else 的使用方法相同。需要注意的是,在 Nginx 中 if 语句执行指令时会有一些注意点,建议遵循以下规则:

1. 不要在一条规则中定义多个 if 语句。

2. 避免在 if 块条件中使用不严谨的匹配表达式。

3. 要么在 if 块中只执行内置或者受限制的指令,要么在 if 块之外执行指令。

4. 为了避免与其他指令的冲突,最好使用 Nginx 内置的指令或支持的模块。

需要注意的是,在 server 块中使用的 if 语句无法与一些指令一起使用,例如 rewrite、return 和 try_files 等指令不支持使用 if 语句。

如果你想判断 nginx 的请求 URL 是否包含指定的参数,可以使用以下步骤:

1. 使用 $request_uri 变量来获取请求 URL,例如:

location /example { if ($request_uri ~* "param=value") { return 200; } }

这将匹配所有包含 param=value 参数的 URL。 ~* 用于指定不区分大小写的匹配。如果需要区分大小写,则使用单个 ~。

2. 使用 $args 变量来获取请求参数,例如:

location /example { if ($args ~* "param=value") { return 200; } }

这将匹配所有包含名为 param 值为 value 的参数的 URL。

上述例子中的 location /example 可以替换为任何你需要匹配的路径,例如 /api/v1。请确保将上述代码插入到正确的 nginx 配置文件中(例如 /etc/nginx/nginx.conf)的正确位置(例如在 server 或 location 块中)。

C# 中有许多内存数据库供开发人员使用,以下是几个常用的内存数据库:

Redis

Redis 是一个开源的 In-Memory 数据库系统,支持多种数据类型。可以用来做缓存、消息队列及分布式锁等。

SQLite

SQLite 是一个轻量级的数据库系统,支持 ACID 事务,使用内存数据库时,会将数据存储在内存中而不是硬盘上。

Apache Ignite

Apache Ignite 是一个分布式的高可用性内存数据库,提供分布式事务、分布式 SQL 查询、分布式计算等功能。

Microsoft SQL Server In-Memory OLTP

这是一个基于内存的事务处理引擎,可以明显提升 SQL Server 数据库的性能,支持多种 OLTP 需求场景。

RavenDB

RavenDB 是一个基于 NoSQL 的文档数据库,具有内存数据库的优点,并支持强大的多租户特性。

MongoDB

MongoDB 是一个开源的文档数据库,支持各种丰富的查询语言,并且具有内存数据库的优点,使得它可以处理大量的数据。

这些内存数据库各自有优点和适用场景,选择哪一个取决于具体的应用需求和使用方案。

Redis 在处理大数据时,需要根据具体情况进行调整,以下是一些在存取大数据时,可以优化 Redis 性能的一些方法:

1. 使用 Redis Pipeline

在处理大数据时,可以使用 Redis Pipeline 来提高 Redis 的性能。Pipeline 是 Redis 的一种批量操作机制,可以将多个命令一次性传输到 Redis 服务器,减少在网络传输上的延时,并在服务端执行这些命令,大幅减少了客户端等待并得到所有响应的时间。Pipeline 可以使用 Redis 的批量操作命令 MGET、HMGET 和 MSET 等。

2. 使用 Redis Cluster

在存储大数据时,可以考虑使用 Redis Cluster,可以将大数据分布式存储在多个节点上,提高 Redis 的容量和性能。

3. 选择合适的数据结构

在存储大数据时,需要选择合适的数据结构,如字符串、哈希表、列表和集合等。对于特大型数据,推荐使用字符串类型,使用 Redis 的批量操作命令或 Pipeline ,或使用 MGET 命令等。

4. 对数据进行切片

将数据切片,分成多份存储在多个节点上,可以提高 Redis 的处理速度。例如,可以使用 Redis 的 Hash 类型将数据存储在多个键值对中,再使用横向的 shard 切片,将数据分散到多个节点中。

5. 调整 Redis 配置

在存取大数据时,需要根据具体情况调整 Redis 的配置,如 maxmemory、timeout 等参数的设定等。

6. 使用 Redis 持久化

可以使用 Redis 的持久化功能将数据存储到磁盘中,可以确保数据不会因服务器故障或断电而丢失。有两种方式可以实现 Redis 持久化,即 RDB 持久化和 AOF 持久化。RDB 持久化可以将 Redis 的整个数据集保存到一个 RDB 文件中,而 AOF 持久化则可以将写操作日志记录到文件中。

以上是一些在存取大数据时,可以优化 Redis 性能的一些方法,需要根据具体情况进行选择并进行合理配置。

C#是一种流行的编程语言,而MessagePack是一种二进制序列化格式,用于在网络上高效传递数据。在C#中使用MessagePack可以通过安装和使用MessagePack NuGet包来实现。以下是使用MessagePack的示例代码:

首先,安装MessagePack NuGet包。可以使用Visual Studio中的NuGet包管理器来安装它,或在命令行中使用以下命令安装它:

Install-Package MessagePack

然后,在代码中使用MessagePack进行序列化和反序列化。以下是一个使用MessagePack进行序列化和反序列化的示例:

using System;
using MessagePack;

[MessagePackObject]
public class Person
{
    [Key(0)]
    public string Name { get; set; }

    [Key(1)]
    public int Age { get; set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 使用MessagePack序列化对象
        var person = new Person("Tom", 20);
        var bytes = MessagePackSerializer.Serialize(person);

        // 使用MessagePack反序列化对象
        var deserializedPerson = MessagePackSerializer.Deserialize<Person>(bytes);

        Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
    }
}

在上面的示例中,定义了一个Person类,它包含了NameAge两个属性,并使用MessagePackObjectKey属性来标记需要进行序列化和反序列化的属性。

Main方法中,创建了一个Person对象,并使用MessagePackSerializer.Serialize方法将其序列化为二进制数据,然后使用MessagePackSerializer.Deserialize方法将二进制数据反序列化为Person对象。最后输出了反序列化后的Person对象的属性。

需要注意的是,使用MessagePack进行序列化和反序列化时,需要保证序列化和反序列化的类型是一致的。否则可能会出现异常。

本文将指导使用 xcaddy 自定义编译 Caddy。

PS:本文同时适用于 Debian 10 Buster 以及 Ubuntu 20.04 Focal

xcaddy 是 Caddy 官方制作的用于自定义编译 Caddy 的工具,它可以帮助我们快速的编译出符合自己需求的 Caddy。

安装 xcaddy

我们按照官方的安装方法,首先,安装一些必要的软件包:

apt update
apt upgrade -y
apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates

然后按照官方教程安装 Go:

wget https://go.dev/dl/go1.19.5.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz

然后把 go 加入系统环境变量:

echo "export PATH=\$PATH:/usr/local/go/bin" >> /etc/profile

然后加入 Caddy 的 GPG 公钥和 apt 源:

curl -sSL https://dl.cloudsmith.io/public/caddy/xcaddy/gpg.key | gpg --dearmor > /usr/share/keyrings/xcaddy.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/xcaddy.gpg] https://dl.cloudsmith.io/public/caddy/xcaddy/deb/debian any-version main" > /etc/apt/sources.list.d/xcaddy.list

然后更新系统后即可安装 xcaddy:

apt update
apt install xcaddy

重启打开 SSH 后检查一下 go 和 xcaddy 的版本:

root@debian ~ # go version
go version go1.19.5 linux/amd64

root@debian ~ # xcaddy version
v0.3.1 h1:XKmnGnGTeB53hLUgnGr/R4JbTNSxh8IBAFcJkrtycso=

自定义编译 Caddy

我们可以选择一些自己喜欢的模块,比如缓存模块和 Brotli 压缩模块:

xcaddy build \
    --with github.com/caddyserver/cache-handler \
	--with github.com/ueffel/caddy-brotli

经过一段时间的编译以后,我们就可以在当前目录下看到一个名为 caddy 的二进制文件,这就是我们自定义编译的 Caddy 了。

自定义 Caddy 和系统 Caddy 共存

如果我们想要自定义 Caddy 和系统 Caddy 共存,可以使用官方的教程

首先,按照我们的教程安装 Caddy,安装完毕后,先停止 Caddy 服务:

systemctl stop caddy

然后使用 dpkg-divert 命令将系统 Caddy 的二进制文件移动到 /usr/bin/caddy.default 并做软链接:

dpkg-divert --divert /usr/bin/caddy.default --rename /usr/bin/caddy

然后把我们自己编译好的 Caddy 二进制文件移动到 /usr/bin/caddy.custom

mv ./caddy /usr/bin/caddy.custom

然后设置优先级,让我们的自定义 Caddy 优先启动:

update-alternatives --install /usr/bin/caddy caddy /usr/bin/caddy.default 10
update-alternatives --install /usr/bin/caddy caddy /usr/bin/caddy.custom 50

此时我们可以看到默认的 /usr/bin/caddy 已经是我们自定义的 Caddy 了:

root@debian ~ # ls -l /usr/bin/caddy
lrwxrwxrwx 1 root root 23 Jan 22 10:52 /usr/bin/caddy -> /etc/alternatives/caddy*

root@debian ~ # ls -l /etc/alternatives/caddy
lrwxrwxrwx 1 root root 21 Jan 22 10:52 /etc/alternatives/caddy -> /usr/bin/caddy.custom

我们也可以使用 update-alternatives --config caddy 命令来切换系统安装的 Caddy 和自定义的 Caddy:

root@be ~ # update-alternatives --config caddy
There are 2 choices for the alternative caddy (providing /usr/bin/caddy).

  Selection    Path                    Priority   Status
------------------------------------------------------------
* 0            /usr/bin/caddy.custom    50        auto mode
  1            /usr/bin/caddy.custom    50        manual mode
  2            /usr/bin/caddy.default   10        manual mode

Press <enter> to keep the current choice[*], or type selection number:

我们可以看到默认的 Caddy 二进制文件是我们自定义的,你可以输入 0(按照优先级自动) 1(手工切换自定义 Caddy) 或 2(使用系统默认 Caddy)来修改并切换默认的 Caddy 版本。

要将 Rocky Linux 更换为国内源,您可以按照以下步骤进行操作:

1. 备份当前源文件

在更改之前,最好备份一下当前的源文件,以防万一。可以使用以下命令将当前的源文件备份到 /etc/yum.repos.d/ 目录中:

sudo cp /etc/yum.repos.d/Rocky-*.repo /etc/yum.repos.d/Rocky-*.repo.backup

2. 下载新的源文件

您可以使用以下命令下载中国科技大学(USTC)的 Rocky Linux 源文件,并将其放置在 /etc/yum.repos.d/ 目录中:

sudo curl -o /etc/yum.repos.d/Rocky-BaseOS.repo http://mirrors.ustc.edu.cn/rocky/8/BaseOS/x86_64/os/Rocky-BaseOS.repo
sudo curl -o /etc/yum.repos.d/Rocky-AppStream.repo http://mirrors.ustc.edu.cn/rocky/8/AppStream/x86_64/os/Rocky-AppStream.repo

3. 清除缓存并更新

完成更改后,可以使用以下命令清除缓存,并使用新的源更新软件包:

sudo yum clean all
sudo yum update

完成这些步骤后,Rocky Linux 环境就成功更换为国内源了。

要更换Ubuntu 22的国内源,可以按照以下步骤操作:

1.打开终端,进入 /etc/apt/ 目录

cd /etc/apt/

2.备份原有的 sources.list 文件

sudo cp sources.list sources.list.backup

3.编辑 sources.list 文件

sudo nano sources.list

4.将文件内容替换为以下内容,这是清华大学镜像源的例子,可以根据自己的需要来修改

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-proposed main restricted universe multiverse

5.保存并退出编辑器,运行以下命令更新软件包列表

sudo apt update

这样,Ubuntu 22 就已经成功更换了国内源。