Nginx 安装配置(建议收藏)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在互联网架构中,Nginx 被广泛视为“网络交通指挥官”。它不仅能够高效处理静态资源请求,还能通过反向代理、负载均衡等功能优化服务器性能。对于编程初学者和中级开发者来说,掌握 Nginx 的安装与配置,是迈向全栈开发的重要一步。本文将通过循序渐进的方式,结合实际案例和代码示例,帮助读者快速上手 Nginx,并理解其核心原理。


Nginx 的核心功能与应用场景

1. Nginx 是什么?

Nginx(发音为“engine-x”)是一个高性能的 HTTP 服务器和反向代理服务器,最初由俄罗斯开发者 Igor Sysoev 为应对高并发场景而设计。它的核心优势在于:

  • 事件驱动架构:通过异步非阻塞模式,支持每秒处理数万次请求。
  • 轻量级:内存占用低,适合资源受限的环境。
  • 灵活性:通过模块化设计,可扩展 SSL/TLS、负载均衡、缓存等功能。

形象比喻

如果把网站比作一座商场,Nginx 就像商场入口的智能导览员。它能快速分配访客到不同的服务区域(如静态资源服务器、后端 API 服务器),同时拦截恶意请求或缓存热门商品,提升整体效率。

2. 典型应用场景

  • 静态资源服务:直接提供 HTML、图片、CSS 等静态文件。
  • 反向代理:隐藏真实后端服务地址,将请求转发到内部服务器。
  • 负载均衡:将流量分发到多台服务器,避免单点过载。
  • SSL 加密:在服务器层统一处理 HTTPS 协议。

环境准备与安装步骤

1. 系统要求

Nginx 支持多种操作系统,本文以 Ubuntu 22.04 LTS 为例。确保已连接互联网,并拥有管理员权限(sudo)。

2. 安装 Nginx

步骤 1:更新软件源

sudo apt-get update  
sudo apt-get upgrade -y  

提示-y 参数表示自动确认所有操作,避免中途打断。

步骤 2:安装 Nginx

sudo apt-get install nginx -y  

安装完成后,可通过以下命令验证服务状态:

sudo systemctl status nginx  

成功运行时,状态应显示为 active (running)

步骤 3:防火墙配置(可选但推荐)

默认情况下,Nginx 会监听 80 端口(HTTP)和 443 端口(HTTPS)。若服务器启用了防火墙(如 ufw),需开放对应端口:

sudo ufw allow 'Nginx Full'  

基础配置与验证

1. 配置文件结构

Nginx 的配置文件位于 /etc/nginx/ 目录中,主要文件包括:
| 文件/目录 | 作用说明 |
|-------------------|----------------------------|
| nginx.conf | 主配置文件,定义全局参数 |
| sites-available/ | 存放所有虚拟主机配置模板 |
| sites-enabled/ | 链接到启用的虚拟主机配置 |
| conf.d/ | 存放附加配置片段 |

2. 默认配置解析

安装完成后,Nginx 会自动生成一个默认站点配置文件:/etc/nginx/sites-available/default。其核心内容如下:

server {  
    listen 80 default_server;  
    listen [::]:80 default_server;  

    root /var/www/html;  
    index index.html index.htm index.nginx-debian.html;  

    server_name _;  

    location / {  
        try_files $uri $uri/ =404;  
    }  
}  
  • listen 80:监听 HTTP 协议的 80 端口。
  • root:指定网站文件的根目录路径。
  • location /:定义请求路径的处理规则,try_files 表示按顺序查找文件或目录,未找到则返回 404。

3. 测试与重启服务

修改配置后,务必执行以下命令确保语法正确:

sudo nginx -t  

若无报错,重启服务使配置生效:

sudo systemctl restart nginx  

4. 访问测试

打开浏览器,输入服务器的公网 IP 地址(如 http://192.168.1.100),若看到 Nginx 的默认欢迎页面,则安装成功。


进阶配置:反向代理与负载均衡

1. 反向代理配置

假设我们有一个后端 API 服务运行在本地端口 3000,可通过 Nginx 将 /api 路径的请求转发过去。

步骤 1:创建新配置文件

sudo nano /etc/nginx/sites-available/backend-proxy  

步骤 2:编写配置内容

server {  
    listen 80;  
    server_name your-domain.com;  

    location /api {  
        proxy_pass http://localhost:3000;  
        proxy_set_header Host $host;  
        proxy_set_header X-Real-IP $remote_addr;  
    }  
}  
  • proxy_pass:指定后端服务地址。
  • proxy_set_header:传递客户端真实 IP 和 Host 头,避免后端服务误判请求来源。

步骤 3:启用配置并测试

创建符号链接并重启服务:

sudo ln -s /etc/nginx/sites-available/backend-proxy /etc/nginx/sites-enabled/  
sudo nginx -t && sudo systemctl restart nginx  

2. 负载均衡配置

假设我们有两台后端服务器(192.168.1.2192.168.1.3),可通过轮询算法分发请求。

步骤 1:修改主配置文件

upstream backend_servers {  
    server 192.168.1.2:3000;  
    server 192.168.1.3:3000;  
}  

server {  
    listen 80;  
    server_name loadbalancer.example.com;  

    location / {  
        proxy_pass http://backend_servers;  
    }  
}  
  • upstream:定义服务器组,支持 ip_hash(会话保持)或 least_conn(最小连接数)等策略。

步骤 2:测试与验证

通过不断刷新页面,观察请求是否交替分配到两台服务器。


常见问题与调试技巧

1. 403 Forbidden 错误

原因:Nginx 无权访问网站目录。
解决方案

sudo chown -R www-data:www-data /var/www/html  
sudo chmod -R 755 /var/www/html  

2. 配置语法错误

nginx -t 报错时,需逐句检查配置文件。例如:

  • 缺少分号 ;
  • 注释符 # 错误位置

3. 日志分析

Nginx 的访问日志和错误日志分别位于:

/var/log/nginx/access.log  
/var/log/nginx/error.log  

通过 tail -f 实时查看日志:

sudo tail -f /var/log/nginx/error.log  

结论

通过本文,读者已掌握了从 Nginx 安装、基础配置到高级功能(反向代理、负载均衡)的全流程。Nginx 的灵活性和高效性使其成为现代 Web 架构中不可或缺的组件。建议读者:

  1. 通过实际项目练习配置,例如搭建多站点或 HTTPS 服务;
  2. 深入学习 location 块的匹配规则和变量使用;
  3. 结合监控工具(如 Prometheus + Grafana)优化性能。

掌握 Nginx 配置不仅提升了技术栈的广度,更能帮助开发者从容应对高并发场景。下一步,可以尝试将 Nginx 与 Docker 或 Kubernetes 集成,探索更复杂的部署方案。


通过本文的系统化讲解,读者能够逐步构建对 Nginx 的全局认知,并在实际开发中灵活运用其功能。

最新发布