从零开始理解Nginx:它能做什么?如何配置?和Tomcat有什么区别?
如果你是刚接触服务器的小白,可能听说过Nginx,但不知道它具体是做什么的。有人说它是"Web服务器",有人说是"反向代理",还有人拿它和Tomcat对比。本文会用最通俗的语言,从零开始解释Nginx的核心功能、配置方法,以及它和Tomcat的区别。
一、Nginx是什么?和Tomcat有什么区别?
Nginx 是一个高性能的 Web服务器 ,但它更擅长处理静态资源(比如HTML、图片、CSS/JS文件),同时也能作为 反向代理 和 负载均衡器 。而 Tomcat 是一个 Java应用服务器,主要用来运行Java Web程序(如Servlet/JSP)。两者的核心区别在于:
- Nginx:轻量级、高并发能力强,适合处理静态请求或转发动态请求。
- Tomcat:专注于动态内容(如Java程序),但并发能力较弱。
通常,我们会将两者结合使用:Nginx作为前端,处理静态资源和转发动态请求到Tomcat。
二、Nginx的核心功能
-
托管静态资源
直接返回HTML、图片、视频等文件。
-
反向代理
将客户端请求转发给后端服务器(如Tomcat、Node.js)。
-
负载均衡
将流量分配到多个服务器,避免单点故障。
-
SSL/TLS加密
为网站提供HTTPS支持。
-
缓存加速
缓存后端响应,减少服务器压力。
三、Nginx的安装与目录结构
假设你已安装Nginx(安装方法略),它的典型目录结构如下:
bash
/etc/nginx/
├── nginx.conf # 主配置文件
├── sites-available/ # 可用的虚拟主机配置
├── sites-enabled/ # 已启用的虚拟主机(符号链接到sites-available)
├── conf.d/ # 其他配置片段
├── modules/ # 动态模块
└── ... # 其他日志、证书目录
你可以修改哪些文件?
- 主配置 :
nginx.conf
(全局设置) - 虚拟主机 :
sites-available/*
(定义不同网站的配置) - 独立配置 :
conf.d/*.conf
(模块化配置片段)
四、核心配置文件详解(nginx.conf)
打开nginx.conf
,你会看到类似以下结构:
nginx
# 全局配置(影响整个Nginx)
user nginx; # 运行Nginx的用户
worker_processes auto; # 工作进程数(通常设为CPU核心数)
# 事件模块(处理连接)
events {
worker_connections 1024; # 每个进程的最大连接数
}
# HTTP模块(核心配置)
http {
include /etc/nginx/mime.types; # 文件类型映射
default_type application/octet-stream;
# 日志格式
access_log /var/log/nginx/access.log;
# 服务器配置(一个server块代表一个虚拟主机)
server {
listen 80; # 监听端口
server_name localhost; # 域名
# 处理请求的位置(核心!)
location / {
root /usr/share/nginx/html; # 静态资源根目录
index index.html; # 默认首页
}
}
}
五、常用组件与配置案例
1. 托管静态资源
nginx
server {
listen 80;
server_name example.com;
location / {
root /data/www; # 资源存放目录
index index.html;
}
# 处理图片请求
location /images/ {
root /data/media; # 图片存放在/data/media/images/
}
}
- root :指定资源的根目录,路径拼接规则为
root + URI
。 - index:默认访问的文件名。
2. 反向代理(转发请求到Tomcat)
nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:8080; # 转发到Tomcat
proxy_set_header Host $host; # 传递原始域名
}
}
- proxy_pass:后端服务器地址。
- proxy_set_header:修改请求头,确保后端获取正确的信息。
3. 负载均衡
nginx
http {
upstream backend { # 定义后端服务器组
server 192.168.1.1:8080 weight=3; # 权重3,处理更多请求
server 192.168.1.2:8080;
}
server {
location / {
proxy_pass http://backend; # 将请求分发到backend组
}
}
}
- upstream:定义一组服务器,支持权重、健康检查等。
4. 启用HTTPS
nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.crt; # 证书
ssl_certificate_key /etc/nginx/ssl/example.key; # 私钥
location / {
root /data/www;
}
}
六、Location块详解:是URL还是文件路径?
location 用于匹配请求的URI(URL路径),决定如何处理请求。例如:
nginx
location /static/ {
alias /var/www/static/; # 使用alias时,/static/会映射到/var/www/static/
}
-
匹配规则:
location /
:匹配所有请求。location = /login
:精确匹配/login
。location ~ \.php$
:正则匹配以.php
结尾的请求。
-
root vs alias:
root
:路径 = root + URIalias
:路径 = alias替换URI中的匹配部分
七、总结:Nginx的本质是什么?
Nginx通过 事件驱动架构 高效处理请求,其核心是:
- 多级配置:从全局(http块)到具体服务(server块),再到URI(location块)。
- 模块化设计:每个功能(如SSL、负载均衡)由模块实现。
- 资源与代理分离:静态资源直接响应,动态请求转发后端。
修改配置的通用流程:
- 编辑配置文件(如
sites-available/example.conf
)。 - 测试配置:
nginx -t
。 - 重载配置:
nginx -s reload
。
现在,你可以尝试修改Nginx配置,托管你的第一个静态网站或转发请求到Tomcat了!