修改 Nginx 附件大小的限制

Nginx 默认限制请求附件大小为 1MB。即:默认当你通过 Nginx 代理上传附件,大于 1M 的文件时,浏览器会抛出异常。 可以通过设置 nginx.conf 中的 http 块,添加或修改 client_max_body_size 参数来更改默认的附件大小限制。例如,将 client_max_body_size 设置为 8m,即可将附件大小限制更改为 8MB。这将影响到所有站点。当然也可以只修改某一个站点的配置,在站点的 server 块中添加或修改 client_max_body_size 即可。 修改后检查配置文件的语法是否正确:sudo nginx -t。如果没有显示语法错误,继续下一步;如果有错误,请检查配置文件并修复错误。 然后重新加载 Nginx 配置:sudo service nginx reload 或者 sudo systemctl reload ngi...

PHP 附件大小限制的修改

在 PHP 中设置附件大小限制,可以通过以下两种方式实现: 修改 php.ini 文件 在 php.ini 配置文件中,可以修改 post_max_size 和 upload_max_filesize 两个参数来分别限制 POST 数据和上传文件的大小。 这两个参数的区别: post_max_size: 这个参数定义了通过 POST 方法(例如表单提交)可以上传到服务器的数据的最大大小。 如果上传的文件大于这个值,服务器会返回一个错误。 这个限制包括了所有的 POST 数据,不仅仅是文件上传。例如,如果你在表单中填写了一些文本字段,这些数据也会被计入 post_max_size 的限制。 upload_max_filesize: 这个参数定义了通过 HTTP POST 方法上传的单个文件的最大大小。 这是对文件上传的限制,不包括其他非文件数据。 如果上传的文件超过了此限制,服务器会返回一个错误。 总结: post_max_size 是对整个 POST 数据(包括文件和其他表单字段)的限制。 upload_max_filesize 是对单个上传文件的限制。 为了确保文件上传的正常工作,通常建议: post_max_size 应该大于或等于 upload_max_filesize。 post_max_size 可以设置为更大的值以允许更多的其他 POST 数据。 例如: post_max_size = 64M upload_max_filesize = 32M 这里将 POST 数据限制为 64MB,上传文件限制为 32MB。 需要注意的是,修改 php.ini 文件需要重启 Web 服务器才能生效。 使用 ini_set 函数 在 PHP 脚本中,也可以使用 ini_set 函数动态地修改上传文件大小限制。例如: ini_set('post_max_size', '64M'); ini_set('upload_max_filesize', '32M'); 这里同样将 POST 数据限制为 64MB,上传文件限制为 32MB。 需要注意的是,在使用 ini_set 函数时,必须在 PHP 脚本执行的早期调用该函数,否则可能无法生效。这些设置只对当前脚本有效,并不会影响 PHP 的全局设置或其它脚本。另外,某些操作系统和 Web 服务器可能会对 ini_set 函数进行限制,需要进行相应的配置或授...

1927 年第五届索尔维会议合影

1927年,第五届索尔维会议在比利时布鲁塞尔召开。这次会议的主题是“电子和光子”,探讨了量子力学和光子辐射等领域的问题。在这次会议上,二十九位当时世界著名的物理学家在一张照片上留下了自己的身影,其中十七位是诺贝尔奖得主,包括阿尔伯特·爱因斯坦、尼尔斯·玻尔、沃纳·海森堡、埃尔温·薛定谔等。这张照片成为物理学史上一件具有里程碑意义的珍贵文物,被广泛传播并载入史册。这次会议对物理学的发展产生了深远的影响,尤其是对量子力学的发展。在会议上,物理学家们进行了激烈的讨论和辩论,探讨了量子力学的解释和描述问题,对量子力学的进一步发展产生了重要影响。 看看大家能认出几位...

使用 Certbot 获取 Let’s Encrypt 证书

Let’s Encrypt https://letsencrypt.org/ Let’s Encrypt is a free, automated, and open Certificate Authority. Certbot Automatically enable HTTPS on your website with EFF's Certbot, deploying Let's Encrypt certificates. Install: On Ubuntu systems, the Certbot team maintains a PPA. Once you add it to your list of repositories all you'll need to do is apt-get the following packages. $ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install python-certbot-nginx $ sudo certbot --nginx $ sudo certbot renew --dry-run #自动更新 执行该命令会创建系统级 cron 任务:/etc/cron.d/certbot,会每天检查两...

Ubuntu 安装 MariaDB 数据库服务

MariaDB 由 MySQL 的创始人 Michael Widenius 主导开发,是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。MariaDB 的目的是完全兼容 MySQL,包括 API 和命令行,使之能轻松成为 MySQL 的代替品。在存储引擎方面,使用 XtraDB 来代替 MySQL 的 InnoDB。 MariaDB 的 API 和协议兼容 MySQL,另外又添加了一些功能,以支持本地的非阻塞操作和进度报告。这意味着,所有使用 MySQL 的连接器、库和应用程序也将会在 MariaDB 下工作。 安装 MariaDB: sudo apt install mariadb-server mariadb-client 检查 MariaDB 的状态 systemctl status mariadb 输出: ● mariadb.service - MariaDB 10.6.12 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-12-11 17:13:04 UTC; 59s ago Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ Process: 21940 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS) Process: 21941 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 21943 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl> Process: 21982 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 21984 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS) Main PID: 21972 (mariadbd) Status: "Taking your SQL requests now..." Tasks: 8 (limit: 2220) Memory: 60.8M CPU: 1.084s CGroup: /system.slice/mariadb.service └─21972 /usr/sbin/mariadbd 如果 MariaDB 未处于活动状态,则启动它: systemctl start mariadb 使用以下命令在启动时自动启动 MariaDB: systemctl enable mariadb 数据库安全相关初始化: sudo mysql_secure_installation 交互: NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have your root account protected, so you can safely answer 'n'. Switch to unix_socket authentication [Y/n] n #是否切换 unix_socket 身份验证 ... skipping. You already have your root account protected, so you can safely answer 'n'. Change the root password? [Y/n] y #是否更改 root 登录密码 New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y #是否删除匿名用户 ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y #是否禁止 root 远程登录 ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y #是否删除测试数据库 - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y #是否重新加载权限表 ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB! 登录 MariaDB: mariadb -u root -p 退出 MariaDB: exit 检查 MariaDB 版本: mariadb --version 输出: mariadb Ver 15.1 Distrib 10.6.12-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrappe...

在 Hugo PaperMod 主题中加入数学支持的最简方式

目的:在不修改主题的情况下支持数学公式。 在当前的写作仓库内创建 layouts/partials/math.html 文件,写入以下内容: <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.css" integrity="sha384-bYdxxUwYipFNohQlHt0bjN/LCpueqWz13HufFEV1SUatKs1cm4L6fFgCi1jT643X" crossorigin="anonymous"> <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.js" integrity="sha384-Qsn9KnoKISj6dI8g7p1HBlNpVx0I8p1SvlwOldgi3IorMle61nQy4zEahWYtljaz" crossorigin="anonymous"></script> <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> <script> document.addEventListener("DOMContentLoaded", function() { renderMathInElement(document.body, { // customised options // • auto-render specific keys, e.g.: delimiters: [ {left: '$$', right: '$$', display: true}, {left: '$', right: '$', display: false} ], // • rendering keys, e.g.: throwOnError : false }); }); </script> 其中的 display 属性指是否显示为块级元素, $ ... $ 用于行内公式,所以为 false。 然后创建 layouts/partials/extend_head.html 文件,写入以下内容: {{ if or .Params.math .Site.Params.math }} {{ partial "math.html" . }} {{ end }} 这样可以通过在文章 front matter 中设置 math 属性 true/false 来按需加载数学公式资源。 --- title: 文章标题 date: tags: math: true --- 在使用某些主题时,比如 PaperMod,会自动从站点的 layouts/partials/extend_head.html 调用局部模...

时间造成的 Hugo 页面无法渲染问题

使用 Hugo 写博客,凌晨发布文章的时候总发不出来,什么原因呢?难道半夜见鬼了?👻 --- title: 文章标题 date: "2023-12-27" draft: false --- Hugo 默认采用的是 UTC,比北京时间 (UTC+8) 晚了 8 个小时。hugo 命令在生成静态页面的时候,默认不会生成超过当前时间的文章。所以,有三个方法可以解决问题: 可以在命令行加 --buildFuture 来生成未来的文章; 文章的 date 采用更标准的写法,采用 ISO 8601 日期时间表示法,带上时区信息; 例如:2023-12-27T17:52:08+08:00,其中的 +08:00 表示的就是北京时间了。 配置文件中增加配置 timeZone: Asia/Shangha...

ISO 8601 日期格式与持续时间格式

国际标准 ISO 8601,是国际标准化组织的日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前是 2004 年 12 月 1 日发行的第三版“ISO8601:2004”以替代 1998 年的第一版“ISO8601:1998”与 2000 年的第二版“ISO8601:2000”。 ISO 8601 日期格式 YYYY-MM-DDThh:mm:ss[.mmm]TZD 其中: YYYY表示四位数的年份 MM表示两位数的月份 DD表示两位数的天(day of the month),从 01 到 31 T是用来指示时间元素的开始字符 hh表示两位数的小时,从 00 到 23 mm表示两位数的分钟,从 00 到 59 ss表示两位数的秒,从 00 到 59 mmm表示三位数的毫秒数,从 000 到 999 TZD表示时区指示符:Z或+hh:mm或-hh:mm,Z 表示 UTC(Coordinated Universal Time,协调世界时) 时间,+和-表示与 UTC 的差。例如: CST(中国标准时间):UTC +08:00,EST(东部标准时间):UTC -05:00,CST(中部标准时间):UTC -06:00。 举例: 2023-12-27T13:37:50.238Z 表示 UTC 时间:2023年12月27日 13:37:50 2023-12-27T13:37:50.238+08:00 表示北京时间:2023年12月27日 21:37:50 ISO 8601 持续时间格式 P(n)Y(n)M(n)DT(n)H(n)M(n)S 其中: P 是持续时间指示符,始终放置在持续时间的开头位置 T 是表示时间元素开始的指示符 (n)为时间值 符号 含义 Y 年 M 月 D 日 W 星期 H 时 M 分 S 秒 举例: P1Y2M3DT4H5M6S 表示的持续时间为:1年2月3天4小时5分钟6秒 UTC 与 GMT 协调世界时,又称世界标准时间或世界协调时间,简称 UTC(Coordinated Universal Time),是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间(GMT)。理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达 16 分钟。由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC...

Linux 计划任务

在 Linux 系统中,定时任务是自动化和定期执行任务的重要手段。其中,crontab 和 crond 是两个核心概念。 crond crond 是 cron daemon 的缩写,是 Linux 下的一个守护进程,它负责周期性地检查并执行 crontab 中定义的定时任务。换句话说,crontab 定义了任务,而 crond 则负责执行这些任务。 crontab crontab 是 cron table 的缩写,是一个用于设置、维护或检查用户的定时任务的命令。通过编辑 crontab 文件,用户可以指定在特定时间或间隔内要执行的命令或脚本。 基本格式 crontab [选项] 文件名 -e:编辑用户的 crontab 文件; -l:列出用户当前的 crontab 内容; -r:删除用户的 crontab 文件; -i:在删除用户 crontab 文件之前进行确认。 当使用 crontab -e 命令时,系统会打开一个编辑器(通常是 vi 或 nano),供用户编辑或添加新的定时任务。 crontab 格式 每一行代表一个定时任务,格式如下: * * * * * command 分别表示分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)、星期(0-7,0 和 7 都代表星期日)和要执行的命令。 关于通配符: *:代表所有可能的值; ,:用于指定多个值; -:用于表示一个范围值; /:用于表示重复的频率。 每次编辑完某个用户的 cron 设置后,cron 自动在 /var/spool/cron 下生成一个与此用户同名的文件,此用户的 cron 信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用 crontab -e 来编辑。cron 启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动 cron 服务。 示例 每 1 分钟执行一次 myCommand * * * * * myCommand 每小时的第 3 和第 15 分钟执行 3,15 * * * * myCommand 在上午 8 点到 11 点的第 3 和第 15 分钟执行 3,15 8-11 * * * myCommand 每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行 3,15 8-11 */2 * * myCommand 每周一上午 8 点到 11 点的第 3 和第 15 分钟执行 3,15 8-11 * * 1 myCommand 每晚的 21:30 重启 smb 30 21 * * * /etc/init.d/smb restart 每月 1、10、22 日的 4 : 45 重启 smb 45 4 1,10,22 * * /etc/init.d/smb restart 每周六、周日的 1 : 10 重启 smb 10 1 * * 6,0 /etc/init.d/smb restart 每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb 0,30 18-23 * * * /etc/init.d/smb restart 每星期六的晚上 11 : 00 pm 重启 smb 0 23 * * 6 /etc/init.d/smb restart 每一小时重启 smb 0 */1 * * * /etc/init.d/smb restart 晚上 11 点到早上 7 点之间,每隔一小时重启 smb 0 23-7/1 * * * /etc/init.d/smb restar...

git 推送报错 [remote rejected] shallow update not allowed

新建远程仓库,并将本地仓库的远程仓库改为新的地址后,执行 push 报错: [remote rejected] master -> master (shallow update not allowed) 原因是之前使用了 git clone --depth< number> 命令进行了浅层克隆。这样一个克隆的一个限制是你不能将它推送到一个新的存储库中。 先加回旧仓库的地址: git remote add old <path-to-old-remote> 然后执行: git fetch --unshallow old 这个命令是认为当前本地的这个目录下面是 shallow(不完整的),比较远端库和本地库,然后把没有的下载补齐。然后就可以推到新库了。 当然了,也可以抛弃历史包袱,改成新库再推送到新远程...