Ubuntu 中的 SSH 与 Nginx 服务:从安装到高阶运维的深度指南
本文为Ubuntu服务器上SSH和Nginx的配置与优化指南。内容涵盖:SSH的安装加固(修改端口、密钥认证、Fail2Ban等10项措施)和远程管理技巧;Nginx的安装、虚拟主机配置及反向代理设置;两者在CI/CD部署、灰度发布等场景的协同应用;常见故障排查方法;以及使用Ansible、Terraform等工具实现自动化管理。通过系统化的安全加固和性能优化,帮助用户构建安全可靠的生产环境。
目录
一、引言
在云计算、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@server
与 curl -I https://example.com
都能让你自信地掌控服务器,而不是被服务器掌控。
更多推荐
所有评论(0)