VPS 运维札记

文章目录
  1. 1. 外网 HTTPS 连接超时
  2. 2. Nginx
    1. 2.1. 反向代理
  3. 3. WinSCP 以 root 权限进入服务器
  4. 4. 公钥登录
  5. 5. 可自定义回源端口的 CDN
    1. 5.1. 自定义回源端口
    2. 5.2. ACME.sh

本文记录一些简单的 VPS 的安装过程记录和故障排除经验。

外网 HTTPS 连接超时

纯净 nginx,在 nginx.conf 加入 HTTPS 支持,浏览器访问转很久之后报 CONNECTION_RESET 错误。

在服务器中 wget https://domain,报连接超时错误;在服务器中 wget https://127.0.0.1 ,正常下载到页面 HTML。

系防火墙配置不当导致的故障。发现及解决所涉及的一系列终端命令如下:

1
2
3
firewall-cmd --list-all
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload

Nginx

按照 DigitalOcean 的教程安装 Nginx。

反向代理

在 /etc/nginx/sites-available 创建 xx.com 的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name *.xx.com xx.com;

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://10.x.x.x$request_uri;
}
}

建立软链接,即执行:

1
sudo ln -s /etc/nginx/sites-available/xxx.com /etc/nginx/sites-enabled/

检查一下配置文件是否都是 OK 的:

1
sudo nginx -t

重启 nginx:

1
sudo systemctl restart nginx

WinSCP 以 root 权限进入服务器

按照官方教程调一下 Shell 为 sudo 后的 Shell,结果一点登录、都快成功了,却给我弹回登录信息页。经查是因为 sudo 需要再输密码,但 WinSCP 不会干这件事情而导致的。解决方法是让该用户在 sudo 的时候不需要输密码。

根据教程,在 /etc/sudoers 里面添加一行:

1
username ALL=(ALL) NOPASSWD: NOPASSWD: ALL

公钥登录

修改 /etc/ssh/sshd_config 文件,禁用密码登录:

1
PasswordAuthentication no

重启 SSH 服务:

1
sudo systemctl restart sshd

可自定义回源端口的 CDN

有一些 NAT 小鸡没有 80/443 端口用,因此外网只能通过其它端口访问 HTTP(S) 服务。但这样对于用户来说并不直观,外面套一层 CDN 作反代隐藏一下真实端口是一个好的选择。免费版的 Cloudflare 并不能实现上述需求,因此只能另寻他路。

自定义回源端口

在 DNS Records 页面,按照下图设置即可。

DNS 配置回源端口

ACME.sh

在 Arvancloud 后台 - Settings - API Keys 中可以生成一个 API Key,格式形如「Apikey xxxx-xxxx-xxxx-xxxx」。

在安装好 acme.sh 的服务器上运行:

1
2
export Arvan_Token="Apikey xxxx-xxxx-xxxx-xxxx"
acme.sh --issue --dns dns_arvan -d xxx.jonbgua.com -d *.xxx.jonbgua.com --log --dnssleep 30 --force

即可成功签发证书。安装证书的指令如下:

1
acme.sh --install-cert -d xxx.jonbgua.com -d *.xxx.jonbgua.com --key-file /home/USERNAME/nginx/ssl/xxx.jonbgua.com/xxx.jonbgua.com.key --fullchain-file /home/USERNAME/nginx/ssl/xxx.jonbgua.com/xxx.jonbgua.com.crt --ca-file /home/USERNAME/nginx/ssl/xxx.jonbgua.com/xxx.jonbgua.com.ca.crt --reloadcmd "sudo systemctl restart nginx"