目录

一、引言

二、SSH:从“能连”到“能放心”

三、Nginx:从“能开”到“能扛”

四、SSH & Nginx 的协同场景

五、故障排查 6 板斧

六、自动化与基础设施即代码

七、结语


一、引言

在云计算、DevOps 与大规模容器化的今天,Linux 服务器几乎成为互联网世界的“底座”。Ubuntu 依托友好的社区、丰富的软件仓库和五年 LTS 支持,成为初创公司与大型企业的共同选择。SSH 与 Nginx 则像“门”与“窗”:SSH 提供安全的远程管理通道,Nginx 负责高性能的 HTTP/HTTPS 流量代理与静态内容分发。本文将围绕“如何装好、配好、用好、护好”两条主线,给出一份从入门到进阶的 3000 字实战手册。

二、SSH:从“能连”到“能放心”

1.安装与首次启动
Ubuntu Server 默认预装 OpenSSH Server;若使用最小化镜像,可手动安装:

sudo apt update && sudo apt install openssh-server
sudo systemctl enable --now ssh

sshd 作为 systemd 服务,配置文件位于 /etc/ssh/sshd_config。初次登录后,建议先确认监听端口、协议版本与 root 登录策略:

sudo grep -E '^(Port|Protocol|PermitRootLogin)' /etc/ssh/sshd_config

2.加固 10 步曲
(1) 修改默认 22 端口:

sudo sed -i 's/^#Port 22/Port 22222/' /etc/ssh/sshd_config
sudo systemctl restart ssh

(2) 禁用密码、强制密钥:

sudo sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

(3) 创建专用运维账号:

sudo adduser deploy --disabled-password
sudo usermod -aG sudo deploy

(4) 部署 Ed25519 密钥:

ssh-keygen -t ed25519 -C "deploy@$(hostname)"
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@server

(5) 启用 Fail2ban:

sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.{conf,local}
sudo systemctl enable --now fail2ban

(6) 设置两因素认证(TOTP):

sudo apt install libpam-google-authenticator
google-authenticator    # 按提示生成二维码

(7) 防火墙仅放行新端口:

sudo ufw allow 22222/tcp
sudo ufw enable

(8) 开启审计:

sudo apt install auditd
sudo auditctl -w /usr/sbin/sshd -p warx -k sshd_changes

(9) 定期轮换密钥并吊销旧公钥。

3.远程文件传输

scp:一次性拷贝

rsync:增量同步

sftp:交互式文件管理

4.跳板机与端口转发

动态转发(SOCKS 代理):

ssh -D 1080 -q -C -N deploy@bastion

本地端口转发:

ssh -L 5432:db.internal:5432 deploy@bastion

三、Nginx:从“能开”到“能扛”

1.安装与目录结构

sudo apt install nginx-core

主要目录:

/etc/nginx/nginx.conf 主配置

/etc/nginx/sites-available/ 站点模板

/etc/nginx/sites-enabled/ 启用的站点

/var/log/nginx/ 日志2.

2.虚拟主机 3 种场景

(1) 静态站点

server {
    listen 80;
    server_name example.com;
    root /var/www/example;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}

(2) 反向代理到 Node.js

location /api/ {
    proxy_pass http://127.0.0.1:3000/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

四、SSH & Nginx 的协同场景

1.CI/CD 一键部署
GitHub Actions 示例:

- name: Deploy via SSH
  uses: appleboy/ssh-action@v0.1.5
  with:
    host: ${{ secrets.HOST }}
    username: deploy
    key: ${{ secrets.SSH_KEY }}
    script: |
      cd /var/www/example
      git pull
      npm ci && npm run build
      sudo systemctl reload nginx

2.灰度发布

利用 Nginx split_clients 模块按 IP 或 Cookie 切流:

split_clients "${remote_addr}${time_iso8601}" $variant {
    10%     v2;
    *       v1;
}
map $variant $upstream {
    v2      127.0.0.1:3001;
    default 127.0.0.1:3000;
}
location / { proxy_pass http://$upstream; }

3.远程日志拉取

rsync -avz --remove-source-files \
  deploy@web01:/var/log/nginx/access.json \
  /var/log/central/nginx/

五、故障排查 6 板斧

1.SSH 连不上

systemctl status ssh

ss -tulnp | grep 22222

tail -f /var/log/auth.log

2.Nginx 502 Bad Gateway

nginx -t 检查语法

curl -I 127.0.0.1:3000 看后端

proxy_connect_timeout 调大

3.高延迟

mtr 链路跟踪

htop 查 CPU 与内存

iostat -x 1 查磁盘

4.证书过期

certbot renew --dry-run

systemctl list-timers | grep certbot

5.内存泄漏

valgrind --tool=memcheck --leak-check=full nginx

升级至官方主线版。

6.内核参数调优

net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
fs.file-max = 2097152

六、自动化与基础设施即代码

1.Ansible Playbook 片段

- hosts: web
  become: yes
  roles:
    - ssh-hardening
    - nginx
  vars:
    nginx_vhosts:
      - listen: "80"
        server_name: "{{ inventory_hostname }}"
        root: "/var/www/{{ inventory_hostname }}"

2.Terraform 创建安全组

resource "aws_security_group_rule" "allow_ssh" {
  type        = "ingress"
  from_port   = 22222
  to_port     = 22222
  protocol    = "tcp"
  cidr_blocks = ["10.0.0.0/8"]
}

3.Docker Compose 一体化

services:
  web:
    build: .
    expose: ["3000"]
  nginx:
    image: nginx:alpine
    ports: ["80:80", "443:443"]
    volumes: ["./nginx.conf:/etc/nginx/nginx.conf:ro"]

七、结语

SSH 与 Nginx 在 Ubuntu 上并非孤立存在,而是现代 Linux 运维的两条主动脉:一条保证“管得了”,一条保证“发得快”。通过本文的安装、加固、调优、监控与自动化五部曲,你将拥有一套可横向扩展、可纵向深挖、可安全审计的生产级底座。牢记:安全是持续过程,性能是永无止境的优化。愿每一次 ssh deploy@servercurl -I https://example.com 都能让你自信地掌控服务器,而不是被服务器掌控。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐