2024-10-06 22:15:51
本文是“攻玉计划”的一部分,翻译自 https://stackoverflow.com/questions/13525465/when-to-restart-and-not-reload-nginx/20215497
使用 Nginx 时,什么情况下 reload 无法满足需求,而必须要使用 restart 命令呢?
如果 Nginx 进程占用了过多内存,是不是应该用 restart 来重启?如果修改了 Nginx 的核心配置,或者某些插件的配置,是不是也需要使用 restart 命令?
修改 Nginx 配置后,用户既可以使用 restart 也可以使用 reload 来使配置生效,见 Ubuntu 上 /etc/init.d/nginx -h
的输出。
那么,哪种方案更优呢?
reload 比 restart 更安全,因为如果使用 reload 命令,在旧的进程终止之前,Nginx 会先解析配置文件,如果配置文件有问题,那么就会退出重启流程。
也就是说,如果你的配置文件有问题,比如存在语法错误,那么使用 restart 命令后,Nginx 会先停止,然后就无法再启动了。
reload 命令如果成功执行,同样会终止旧的进程,所以如果存在内存泄漏问题,也一样可以清除掉。
我遇到过一种情形,如果我修改了监听的 IP 地址,也就是配置文件里的 listen 字段,那就必须使用 restart 命令。
从 1.6.x 版本开始,如果仅把监听的 IP 地址从一个改为另一个,那么 reload 可以生效,但如果把监听地址从 listen *:80
修改为 listen x.x.x.x:80
,依然需要 restart。
我只验证了 IPv4 的场景,IPv6 应该类似。
译者按:译者今天遇到过一样的问题,我修改了
listen 80;
到listen 172.0.0.1:80
,结果发现 reload 不生效,必须 restart。
2024-09-13 20:40:18
馒头 PT 站的默认 tracker 出了问题,我到现在都没搞懂是被墙了还是我自己设备的问题,反正就是无法访问默认的 .cc 域名,但 .io 的域名是可以的。
但手动修改 .cc 倒 .io ,也太麻烦了,我有上百个种子。
我是在一台 Ubuntu 服务器上运行的原版 qbittorrent-nox,用 webui 访问。
qbittorrent-nox 会在当前用户的家目录中的 ~/.local/share/qBittorrent/BT_backup
目录内存放所有正在使用的种子(虽然我也不清楚为啥名字里有 backup
),vim 看了一眼,就是很正常的种子文件格式。
所以,理论上,直接批量替换这些种子文件里面的 tracker URL,就能解决问题。
说干就干,先停掉 qb 的服务,然后备份 BT_backup
,再在 BT_backup
内执行 find . -type f -exec sed -i 's/example.cc/example.io/' {} \;
,最后重启 qb 服务,果然解决问题。
2024-05-07 20:36:47
修改本用户的 ~/.vimrc
文件,添加以下内容。如果要想 sudo vim 也生效,那 /root/.vimrc
也要改。
1 |
filetype plugin indent on |
上面的注释已经解释了含义。
2024-05-07 20:36:30
Certbot 官网居然只提供 snap 方式安装,而 snap 是我在 Ubuntu 上最不喜欢的东西
那就直接用 pip 安装吧~
1 |
sudo apt install certbot python3-certbot-nginx |
2024-05-07 20:35:55
首先,swap 多大比较好?如果你有一个 2G 内存的服务器,偶尔内存有点吃紧,那就再开 2G 的 swap 吧。其他的情况,随缘。如果内存不紧张,就不用开。
依次执行:
1 |
sudo fallocate -l 2G /swapfile # 在根目录下创建一个 2G 大小的 swap 文件 |
2024-05-07 20:35:45
Nginx 配置添加以下内容:
1 |
location / { |
其含义就是在反代时,在客户端发起的请求报文上添加 X-Real-IP
和 X-Forwarded-For
两个 HTTP 头。X-Real-IP
表示表观客户端地址,X-Forwarded-For
,顾名思义,就是“为谁代理”的意思,这个可以用来嵌套式传输客户端真实地址。
被代理的服务,只要能正确解析这两个头,就能获得客户端真实地址。