从零开始学Nginx:保姆级安装与使用教程
Nginx (发音为 “engine-x”) 是一款免费、开源、高性能的HTTP服务器和反向代理,也是一个IMAP/POP3/SMTP代理服务器。Nginx以其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。
本教程将从零开始,一步步带你安装和使用Nginx,让你轻松入门。
1. Nginx能做什么?
在开始安装之前,我们先简单了解一下Nginx的几个核心功能:
- Web服务器:最基本的功能,可以直接向用户的浏览器提供静态内容(如HTML、CSS、图片文件)。
- 反向代理:这是Nginx最常用的功能之一。它作为中间人,将客户端的请求转发到后端的应用服务器(如Tomcat, Node.js, Python应用),然后将后端服务器的响应返回给客户端。这样做可以隐藏后端服务器的真实IP,提高安全性。
- 负载均衡:当你的网站访问量巨大时,一台服务器可能无法承受。Nginx可以将大量的请求分发到多台后端服务器上,从而保证服务的高可用和高性能。
- HTTP缓存:Nginx可以缓存一部分请求内容,当再次收到相同请求时,可以直接返回缓存内容,而无需再次请求后端服务器,极大地加快了响应速度并降低了后端服务器的压力。
- 动静分离:将动态请求(需要程序处理的请求)和静态请求(直接返回文件的请求)分开处理。Nginx处理静态资源非常高效,可以大大减轻后端应用服务器的负担。
2. 在Ubuntu/Debian上安装Nginx
本教程以Ubuntu系统为例,因为它是最常见的服务器操作系统之一。
第一步:更新软件包列表
在安装新软件之前,最好先更新一下系统的软件包列表。
bash
sudo apt update
第二步:安装Nginx
使用apt包管理器可以直接安装Nginx。
bash
sudo apt install nginx
第三步:配置防火墙
如果你的服务器开启了UFW防火墙,需要允许HTTP和HTTPS流量。
-
查看可用的应用配置:
bash
sudo ufw app list
你会看到类似Nginx Full,Nginx HTTP,Nginx HTTPS的选项。 -
我们选择
Nginx Full,它允许HTTP和HTTPS的流量(分别对应80和443端口)。
bash
sudo ufw allow 'Nginx Full' -
检查防火墙状态,确保规则已生效。
bash
sudo ufw status
第四步:验证Nginx是否运行成功
安装完成后,Nginx服务会自动启动。你可以通过以下命令检查其状态:
bash
systemctl status nginx
如果看到 Active: active (running) 的字样,说明Nginx已经成功运行。
你也可以直接在浏览器中输入你服务器的IP地址。如果一切正常,你会看到Nginx的默认欢迎页面。
3. Nginx常用命令
管理Nginx服务,你需要掌握以下几个基本命令:
-
启动Nginx
bash
sudo systemctl start nginx -
停止Nginx
bash
sudo systemctl stop nginx -
重启Nginx
bash
sudo systemctl restart nginx -
重新加载配置 (平滑重启,推荐)
当你修改了Nginx的配置文件后,使用此命令可以让Nginx加载新配置而无需中断当前的服务。
bash
sudo systemctl reload nginx -
检查配置文件语法
在每次修改配置文件后,执行reload或restart之前,都应该先检查一下配置文件是否有语法错误。这是一个非常好的习惯。
bash
sudo nginx -t
如果配置正确,你会看到syntax is ok和test is successful的提示。
4. 配置文件结构与实战
Nginx的所有功能都是通过配置文件来控制的。
- 主配置文件:
/etc/nginx/nginx.conf - 虚拟主机配置目录:
/etc/nginx/sites-available/ - 启用的虚拟主机目录:
/etc/nginx/sites-enabled/
通常我们不会去修改主配置文件 nginx.conf。最佳实践是:为每个网站(或服务)在 sites-available 目录下创建一个独立的配置文件,然后通过创建一个符号链接(soft link)到 sites-enabled 目录来启用它。
实战一:部署一个简单的静态网站
让我们来部署一个简单的个人主页。
-
创建网站文件目录
我们为网站创建一个新目录。
bash
sudo mkdir -p /var/www/my-website -
创建一个简单的HTML页面
bash
sudo nano /var/www/my-website/index.html
在打开的编辑器中粘贴以下内容:
html
<!DOCTYPE html>
<html>
<head>
<title>欢迎来到我的网站</title>
<style>
body { font-family: sans-serif; text-align: center; padding-top: 50px; }
</style>
</head>
<body>
<h1>你好,世界!我的Nginx网站</h1>
<p>这个页面由Nginx提供服务。</p>
</body>
</html>
保存并关闭文件 (在nano中是Ctrl+X,Y,Enter)。 -
创建Nginx配置文件
在sites-available目录为新网站创建一个配置文件。
bash
sudo nano /etc/nginx/sites-available/my-website
粘贴以下配置内容:
“`nginx
server {
listen 80;
listen [::]:80;server_name your_domain_or_ip; # 将这里替换成你的域名或IP地址 root /var/www/my-website; index index.html; location / { try_files $uri $uri/ =404; }}
``listen 80
**配置解释**:
*: 监听80端口(HTTP请求)。server_name
*: 你的域名或服务器IP。root
*: 网站文件的根目录。index
*: 默认索引文件。location /
*: 定义如何处理进来的请求。try_files` 表示会依次尝试查找请求的文件、目录,如果都找不到则返回404错误。 -
启用该网站
通过创建符号链接来启用这个配置。
bash
sudo ln -s /etc/nginx/sites-available/my-website /etc/nginx/sites-enabled/
为了避免冲突,可以删除默认的配置链接:
bash
sudo rm /etc/nginx/sites-enabled/default -
测试并重启Nginx
bash
sudo nginx -t # 检查语法
sudo systemctl reload nginx # 重新加载配置
现在,再次访问你的服务器IP地址,你就应该能看到你刚刚创建的 “你好,世界!” 页面了。
实战二:设置反向代理
假设你有一个在 http://localhost:8080 运行的Java、Node.js或其他应用,你希望通过Nginx从80端口访问它。
-
修改配置文件
编辑刚才的网站配置文件:
bash
sudo nano /etc/nginx/sites-available/my-website
将内容修改为:
“`nginx
server {
listen 80;
listen [::]:80;server_name your_domain_or_ip; # 替换成你的域名或IP地址 location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }}
``location /
**配置解释**:
*: 匹配所有进来的请求。proxy_pass http://localhost:8080;
*: 这是核心!它告诉Nginx将所有匹配的请求都转发到http://localhost:8080。proxy_set_header …`: 这些头部信息是为了将真实的客户端信息(如IP、Host等)传递给后端应用,这在很多应用中都非常重要。
* -
测试并重启Nginx
bash
sudo nginx -t
sudo systemctl reload nginx
现在,当你访问你的域名或IP时,Nginx会将请求无缝地转发到你内部的8080端口的应用上。用户完全感知不到这个过程,实现了反向代理。
总结
恭喜你!通过这篇教程,你已经掌握了Nginx的安装、基本管理以及两个最核心的应用场景:静态网站部署和反向代理。Nginx的功能远不止于此,负载均衡、HTTPS配置、缓存优化等都是其强大的功能。
希望这篇保姆级的教程能为你打开Nginx世界的大门。继续探索,你会发现它是一个运维和开发人员的瑞士军刀。