1. Linux Web服务概述
在Linux系统上搭建Web服务是每个运维工程师和开发者的必修课。不同于Windows平台的图形化操作,Linux环境下我们主要通过命令行工具来配置和管理Web服务。这种工作方式虽然初期学习曲线较陡,但一旦掌握就能获得极高的灵活性和控制力。
我使用Linux部署Web服务已有八年时间,从最初的Apache到现在的Nginx,从手动编译安装到容器化部署,积累了不少实战经验。今天就来系统梳理下在Linux环境下搭建Web服务的完整流程,包括Web服务器选型、环境配置、性能调优等关键环节。
2. Web服务器选型与安装
2.1 主流Web服务器对比
目前Linux平台主流的Web服务器有以下几种选择:
-
Apache HTTP Server
- 最老牌的Web服务器
- 模块化架构,功能丰富
- 适合传统网站和PHP应用
- 配置文件:/etc/httpd/conf/httpd.conf
-
Nginx
- 轻量级高性能服务器
- 事件驱动架构,并发能力强
- 适合静态资源和反向代理
- 配置文件:/etc/nginx/nginx.conf
-
Lighttpd
- 超轻量级服务器
- 内存占用极低
- 适合嵌入式设备和资源受限环境
对于大多数现代Web应用,我推荐使用Nginx作为首选。它的并发处理能力远超Apache,特别是在高流量场景下表现尤为突出。
2.2 Nginx安装与基本配置
在Ubuntu/Debian系统安装Nginx:
bash复制sudo apt update
sudo apt install nginx
安装完成后,关键目录结构:
- /etc/nginx:配置文件目录
- /var/www/html:默认网站根目录
- /var/log/nginx:日志目录
启动Nginx服务:
bash复制sudo systemctl start nginx
sudo systemctl enable nginx
验证安装:
bash复制curl -I 127.0.0.1
3. 服务配置与优化
3.1 虚拟主机配置
一个典型的Nginx虚拟主机配置示例:
nginx复制server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
配置完成后需要测试并重载:
bash复制sudo nginx -t # 测试配置
sudo systemctl reload nginx # 重载配置
3.2 性能调优参数
在/etc/nginx/nginx.conf中调整以下参数:
nginx复制worker_processes auto; # 自动设置工作进程数
worker_connections 1024; # 每个工作进程的最大连接数
keepalive_timeout 65; # 保持连接的超时时间
client_max_body_size 20M; # 最大上传文件大小
gzip on; # 启用Gzip压缩
gzip_types text/plain text/css application/json;
4. 安全加固措施
4.1 基础安全配置
- 禁用服务器标记:
nginx复制server_tokens off;
- 限制HTTP方法:
nginx复制if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
- 防止点击劫持:
nginx复制add_header X-Frame-Options "SAMEORIGIN";
4.2 SSL/TLS配置
使用Let's Encrypt免费证书:
bash复制sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
自动续期测试:
bash复制sudo certbot renew --dry-run
5. 监控与维护
5.1 日志分析
查看实时访问日志:
bash复制tail -f /var/log/nginx/access.log
使用goaccess分析日志:
bash复制goaccess /var/log/nginx/access.log --log-format=COMBINED
5.2 性能监控
安装sysstat工具:
bash复制sudo apt install sysstat
查看系统资源使用:
bash复制sar -u 1 3 # CPU使用率
sar -r 1 3 # 内存使用
6. 常见问题排查
6.1 502 Bad Gateway错误
可能原因:
- 后端服务未启动
- 权限问题
- 资源不足
排查步骤:
bash复制# 检查后端服务状态
systemctl status php-fpm
# 检查错误日志
tail -n 50 /var/log/nginx/error.log
# 检查文件权限
ls -la /var/www
6.2 连接数过多
临时解决方案:
bash复制# 查看当前连接数
netstat -ant | grep :80 | wc -l
# 临时提高限制
ulimit -n 65536
永久解决方案:
bash复制# 编辑limits.conf
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
7. 容器化部署方案
7.1 Docker部署Nginx
基础Dockerfile示例:
dockerfile复制FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY html /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
构建并运行:
bash复制docker build -t my-nginx .
docker run -d -p 80:80 my-nginx
7.2 Kubernetes部署
基础Deployment配置:
yaml复制apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
8. 进阶配置技巧
8.1 负载均衡配置
Nginx作为负载均衡器的配置示例:
nginx复制upstream backend {
server 10.0.0.1:8080 weight=3;
server 10.0.0.2:8080;
server 10.0.0.3:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
8.2 缓存配置
静态资源缓存设置:
nginx复制location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
反向代理缓存配置:
nginx复制proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
在实际生产环境中,我发现Nginx的worker_connections参数需要根据服务器的实际内存情况调整。一般建议每个连接按10KB内存估算,4GB内存的服务器可以设置为4000左右。过高会导致内存不足,过低则无法充分利用服务器资源。