核心概念
在开始之前,先了解几个关键术语:

- Web Server: 负责接收 HTTP/HTTPS 请求,并返回网页内容(如 HTML、图片、CSS、JS 文件)或 API 响应的服务程序,主流的有 Nginx 和 Apache。
- 虚拟主机: 一台物理服务器上运行多个网站,每个网站有独立的域名和配置,这是通过
ServerName或server_name来区分的。 - 根目录: 网站文件存放的顶级目录,
/var/www/html/example.com。 - SSL/TLS: 用于加密浏览器和服务器之间的通信,实现 HTTPS,通常通过 Let's Encrypt 免费获取证书。
- PHP-FPM: 一个 PHP 的 FastCGI 进程管理器,用于高效地处理 PHP 请求,Nginx 和 Apache 都可以与它配合。
第一步:选择并安装 Web 服务器
你有两个主要选择:Nginx (推荐) 和 Apache。
选择建议
- Nginx: 性能极高,擅长处理高并发连接,配置相对简洁,资源占用低,非常适合现代 Web 应用、反向代理和静态文件服务,是目前的主流选择。
- Apache: 历史悠久,功能非常全面,模块生态极其丰富(
.htaccess文件是其特色),配置灵活,对于需要复杂规则或从旧系统迁移的用户来说是个好选择。
对于新项目,强烈推荐 Nginx。
安装 Nginx (以 Ubuntu/Debian 为例)
# 更新软件包列表 sudo apt update # 安装 nginx sudo apt install nginx # 启动 nginx 服务并设置为开机自启 sudo systemctl start nginx sudo systemctl enable nginx # 检查 nginx 状态 sudo systemctl status nginx
安装 Apache (以 Ubuntu/Debian 为例)
# 更新软件包列表 sudo apt update # 安装 apache2 sudo apt install apache2 # 启动 apache2 服务并设置为开机自启 sudo systemctl start apache2 sudo systemctl enable apache2 # 检查 apache2 状态 sudo systemctl status apache2
第二步:配置第一个网站 (虚拟主机)
这里我们以 Nginx 为例进行详细讲解,Apache 的配置逻辑类似,只是指令和文件结构不同。
假设我们要配置一个名为 example.com 的网站。

创建网站根目录
# 创建主目录 sudo mkdir -p /var/www/example.com/html # 创建一个简单的 index.html 文件 sudo nano /var/www/example.com/html/index.html
在 index.html 中输入以下内容:
<!DOCTYPE html>
<html>
<head>Welcome to example.com!</title>
</head>
<body>
<h1>Success! Your Nginx server is working!</h1>
<p>This is the root directory for the example.com website.</p>
</body>
</html>
设置正确的文件权限
Web 服务器(Nginx 运行在 www-data 用户下)需要能读取这些文件。
# 将目录所有权赋予 www-data 用户 sudo chown -R www-data:www-data /var/www/example.com/html # 设置适当的目录权限 sudo chmod -R 755 /var/www/example.com
创建 Nginx 虚拟主机配置文件
Nginx 的站点配置文件通常存放在 /etc/nginx/sites-available/ 目录下。
sudo nano /etc/nginx/sites-available/example.com
输入以下配置:

server {
listen 80;
listen [::]:80;
# 你的域名
server_name example.com www.example.com;
# 网站根目录
root /var/www/example.com/html;
index index.html index.htm;
# 访问日志和错误日志
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}
启用虚拟主机配置
上面的文件只是“可用”,我们需要创建一个符号链接到 sites-enabled 目录来“启用”它。
# 创建符号链接 sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ # (可选) 删除默认的欢迎页面配置 sudo rm /etc/nginx/sites-enabled/default # 检查 Nginx 配置语法是否正确 sudo nginx -t # 如果测试通过,重新加载 Nginx 配置 sudo systemctl reload nginx
配置本地 hosts 文件进行测试
在本地电脑上(不是服务器),编辑 hosts 文件,将 example.com 指向你的服务器 IP 地址。
- Windows:
C:\Windows\System32\drivers\etc\hosts - macOS/Linux:
/etc/hosts
添加一行:
你的服务器IP地址 example.com www.example.com
在浏览器中访问 http://example.com,你应该能看到你创建的 "Success!" 页面。
第三步:配置 HTTPS (SSL/TLS)
让网站支持 HTTPS 是现代网站的标配。
安装 Certbot
Certbot 是一个由 Let's Encrypt 提供的自动化工具,可以免费获取和更新 SSL 证书。
# 安装 Certbot 和 Nginx 插件 sudo apt install certbot python3-certbot-nginx
获取并自动配置 SSL 证书
Certbot 可以自动检测你的 Nginx 配置,并获取证书、修改配置、重启服务。
# 运行 Certbot,它会提示你输入邮箱并同意条款 sudo certbot --nginx -d example.com -d www.example.com
-d: 指定要保护的域名。--nginx: 使用 Nginx 插件。
如果成功,Certbot 会自动:
- 从 Let's Encrypt 获取证书。
- 修改你的
/etc/nginx/sites-available/example.com配置文件,添加 443 端口的监听和 SSL 相关指令。 - 重启 Nginx 服务。
现在你的网站可以通过 https://example.com 安全访问了。
设置自动续订
Let's Encrypt 的证书有效期为 90 天,Certbot 会自动设置一个定时任务来续订。
你可以手动测试续订过程:
sudo certbot renew --dry-run
如果看到 renewal process was successful,说明自动续订工作正常。
第四步:部署 PHP 应用 (以 WordPress 为例)
大多数动态网站(如 WordPress, Drupal)都需要 PHP 支持。
安装 PHP 和 PHP-FPM
# 安装 PHP 和一些常用扩展 sudo apt install php php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip # 检查 PHP-FPM 状态 sudo systemctl status php-fpm
修改 Nginx 配置以支持 PHP
编辑你的虚拟主机配置文件:
sudo nano /etc/nginx/sites-available/example.com
在 location / { ... } 块下方,添加一个新的 location 块来处理 PHP 文件:
# ... 其他配置保持不变 ...
# 处理 PHP 文件
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# 与 php-fpm.sock 的路径保持一致
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
# 处理 /wp-admin/ 目录下的重定向规则
location ~* ^/wp-admin/ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# ... 其他配置保持不变 ...
注意: fastcgi_pass 中的路径 (/run/php/php8.1-fpm.sock) 可能会因为 PHP 版本不同而改变,你可以用 ls /run/php/ 命令查看实际的 socket 文件名。
重新加载 Nginx
sudo nginx -t sudo systemctl reload nginx
你的 Nginx 服务器已经可以正确处理 PHP 文件了,你可以将 WordPress 等程序的文件上传到 /var/www/example.com/html 目录,然后通过浏览器进行安装。
Apache 快速配置对比
如果你选择 Apache,配置流程类似:
-
创建网站目录和文件:与 Nginx 相同。
-
设置权限:与 Nginx 相同。
-
创建虚拟主机配置文件:文件在
/etc/apache2/sites-available/。<VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/html <Directory /var/www/example.com/html> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/example.com.error.log CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined </VirtualHost> -
启用站点:
sudo a2ensite example.com sudo a2dissite 000-default.conf # 禁用默认站点 sudo apache2ctl configtest # 检查语法 sudo systemctl reload apache2
-
启用 SSL:
# 安装 certbot for apache sudo apt install certbot python3-certbot-apache # 获取证书 sudo certbot --apache -d example.com -d www.example.com
Certbot 会自动处理 Apache 的 SSL 配置。
总结与后续
恭喜!你已经成功在 Linux 上配置了一个功能齐全的 Web 服务器。
后续可以探索的方向:
- 性能优化:配置 Gzip 压缩、缓存(Nginx 的
proxy_cache或 Apache 的mod_cache)、连接数限制等。 - 安全加固:配置防火墙(如
ufw)、禁用不必要的 HTTP 方法、使用 fail2ban 防止暴力破解。 - 反向代理:使用 Nginx 作为反向代理,将请求转发到后端的 Node.js, Python (Gunicorn) 或 Java (Tomcat) 应用。
- 日志分析:使用
goaccess等工具实时分析访问日志,了解网站流量情况。
希望这份详细的指南对你有帮助!
