Nginx 安装与使用教程
本文最后更新于 2024年5月3日 13:28
Nginx 是一个高性能的开源 Web 服务器,也可以作为反向代理服务器、负载均衡器和 HTTP 缓存。其轻量级且高效的设计使其在处理高并发请求时表现优异。Nginx 采用事件驱动的异步架构,能够有效地处理大量连接而不会消耗过多系统资源。它支持多种功能模块和扩展,可以满足各种 Web 服务的需求。由于其稳定性、性能和可靠性,Nginx 已成为许多网站和应用程序的首选服务器。
其中 Nginx
是市场占有量最高的 Web 服务器,没有之一。如果你是运维或者开发人员,那么我相信你多多少少一定会接触到 Nginx 的相关操作。
本文将介绍 Nginx 的安装和基本配置,以及一些常用的功能和技巧。以 Debian12 为例,其他 Linux 发行版的安装方法类似。假设你已经拥有一个域名和一台能联网的服务器。
1. 安装 Nginx
输入以下命令安装 Nginx:
1 |
|
安装完成后,可以使用以下命令检查 Nginx 的版本:
1 |
|
当前教程演示的 Nginx 版本是 1.22.1
。
2. 启动 Nginx
安装完成后,Nginx 会自动启动。可以使用以下命令检查 Nginx 服务的状态:
1 |
|
如果输出中显示 Active: active (running)
,则表示 Nginx 已成功启动。
如果 Nginx 未启动,可以根据报错信息排查问题,解决后尝试手动启动 Nginx:
1 |
|
现在,可以在浏览器中输入服务器的 IP 地址或域名,就会看到 Nginx 的默认欢迎页面。
3. 了解 Nginx
3.1 Nginx 配置文件
Nginx 的默认配置文件位于 /etc/nginx
目录下
我们可以输出目录下的文件列表:
1 |
|
输出如下:
1 |
|
其中,
nginx.conf
是 Nginx 的主配置文件
sites-available
目录下存放着所有可用的网站配置文件
sites-enabled
目录下存放着启用的网站配置文件
conf.d
目录下存放着其他配置文件
3.2 Nginx 常用命令
Nginx 的常用命令如下:
sudo nginx -t
:检查 nginx 配置文件是否正确:sudo nginx -s reload
:重新加载配置文件,优雅地重新启动sudo nginx -s quit
:优雅地关闭sudo nginx -s stop
:快速关闭sudo systemctl status nginx
:查看 Nginx 服务的状态
4. 配置网站
我们现在演示如何配置 example.com
,使得访问 example.com
就会显示 Hello World !
页面。
假设你的域名为 example.com
,且在域名供应商域名解析处已经将 example.com
解析到服务器的 IP 地址。
4.1 创建网站根目录
/var/www
目录通常用于存放网站文件,我们可以在这个目录下创建一个目录,用于存放 example.com
的网站文件。
1 |
|
并在其中创建一个 index.html
文件:
1 |
|
将以下内容粘贴到 index.html
文件中:
1 |
|
保存并退出编辑器。
4.2 创建网站配置文件
那么,现在可以在 sites-available
目录下创建一个 Nginx 配置文件 example.com.conf
:
1 |
|
将以下内容粘贴到文件中:
1 |
|
保存并退出编辑器。
server{ }
定义一个虚拟主机listen 80;
监听 80 端口(HTTP)server_name example.com;
域名root /var/www/example.com;
文档根目录index index.html;
默认文件location /
/
表示所有以/
开头的请求(也就是所有请求)try_files $uri $uri/ =404;
检查请求的文件是否存在,如果不存在则返回 404 错误
这样,Nginx 就会监听 example.com
的请求,并返回 /var/www/example.com
目录下的文件。
测试配置文件是否编写正确:
1 |
|
如果没有错误,将输出以下内容:
1 |
|
4.3 启用网站配置
接下来,需要在 sites-enabled
目录下创建一个符号链接,指向 sites-available
目录下的配置文件:
1 |
|
然后,重新加载 Nginx 配置文件:
1 |
|
现在,可以在浏览器中输入 example.com
,就会看到 Hello World !
页面。
4.4 执行流程
整个执行流程如下:
- 浏览器发送请求到服务器
- Nginx 接收到请求,根据请求的域名和端口,选择对应的网站配置文件
- Nginx 根据配置文件中的
root
指令,找到对应的文档根目录 - Nginx 根据配置文件中的
index
指令,找到默认文件 - Nginx 返回默认文件的内容给浏览器
- 浏览器显示页面
5. 配置反向代理
Nginx 的反向代理是我们常用到的功能,它可以隐藏真实服务器地址,提高安全性,还可以实现负载均衡和缓存等功能。
假设你的域名为 website.com
,并且你的服务器上有一个运行在 8080 端口的应用程序,你希望用户通过 website.com
访问这个应用程序,而不是通过 website.com:8080
直接访问。
5.1 创建反向代理配置文件
在 sites-available
目录下创建一个 Nginx 配置文件 website.com.conf
:
1 |
|
将以下内容粘贴到文件中:
1 |
|
保存并退出编辑器。
这个配置文件定义了一个简单的反向代理。
proxy_pass http://127.0.0.1:8080;
将请求转发给 127.0.0.1:8080 端口来处理proxy_set_header
设置请求头,这些请求头会被传递给后端服务器
测试配置文件是否编写正确:
1 |
|
5.2 启用反向代理
接下来,需要在 sites-enabled
目录下创建一个符号链接,指向 sites-available
目录下的配置文件:
1 |
|
然后,重新加载 Nginx 配置文件:
1 |
|
现在再启动 Python Web 服务器,然后在浏览器中输入 website.com
,就会看到 Reverse Proxy
页面。这时,website.com
就会显示 website.com:8080
的内容。
1 |
|
5.3 执行流程
整个执行流程如下:
- 浏览器发送请求到服务器
- Nginx 接收到请求,根据请求的域名和端口,选择对应的网站配置文件
- Nginx 根据配置文件中的
location /
指令,将请求转发给http://127.0.0.1:8080
端口处理 - Python Web 服务器处理请求,返回
Reverse Proxy
页面 - Nginx 返回
Reverse Proxy
页面给浏览器 - 浏览器显示页面
5.5 反向代理常见实践
反向代理由于隐藏了实际后端服务的端口号,可以直接通过域名来访问。为了隐藏多个应用程序的端口号,我们通常会配置多个三级域名(如 status.example.com
和 chat.example.com
)来对应不同的应用程序,实现一个主域名下(example.com
)多个应用程序的访问。
例如,我们可以配置 app1.website.com
和 app2.website.com
,分别代理到不同的应用程序。
1 |
|
1 |
|
更多 Nginx 的配置和功能,可以参考官方文档: Nginx Documentation。