Nginx
简介
Nginx是什么
Nginx("engine x")是一个HTTP Web服务器同时也支持 IMAP/POP3 代理服务。Nginx 以其高并发处理能力和低资源消耗而闻名,广泛应用于各种 Web 应用和网络服务中。
Nginx能做什么
静态资源服务器
提供静态文件(HTML、CSS、JavaScript、图片等)的高效访问
支持缓存控制,提高静态资源的加载速度
反向代理
将客户端请求转发到后端服务器,隐藏后端服务器的真实地址
负载均衡
支持多种负载均衡算法,如轮询、最少连接、IP 哈希、加权轮询等
健康检查,自动移除不健康的服务
动静分离
将动态、静态的资源请求分开,提升性能和可维护性
访问控制
支持 IP 黑白名单,允许或拒绝特定 IP 地址的访问
支持 HTTP 基本认证,保护特定资源
日志记录
记录客户端的请求信息(访问日志)
记录服务器的错误信息(错误日志)
限流
限制客户端的连接数、请求速率等
应用场景
Web服务器
反向代理服务器
API网关
媒体服务器
下载安装
进入下载页面后,一般选择下载一个稳定版即可:

Windows版本
进入下载页面,选择
nginx/Windows-x.xx.x下载解压压缩包
over
Linux版本
# 下载需要安装的Nginx版本
curl -O https://nginx.org/download/nginx-1.26.2.tar.gz
# 解压
tar -zxvf nginx-1.26.2.tar.gz
# 进入解压后文件夹
cd nginx-1.26.2
# 配置安装目录
./configure --prefix=/usr/local/nginx
# 注意:nginx采用模块化设计,有一部分功能需要安装时开启方可使用;更多模块请查看官方文档(https://nginx.org/en/docs/)
./configure --prefix=/usr/local/nginx --with-http_gzip_static_module
# 编译安装
make && make installDocker
# 下载nginx镜像
docker pull nginx
# 启动
docker run --name myNginx -d nginx
# 指定端口映射
docker run --name myNginx -p 80:80 -d nginx
# 指定配置文件
docker run --name myNginx -v /host/path/nginx.conf:/etc/nginx/nginx.conf -d nginxdocker-compose
新建一个nginx-docker-compose.yml
version: '3.0'
services:
nginx:
image: nginx #运行的镜像
container_name: myNginx #容器名
ports:
- "80:80" #端口映射
volumes:
- ./host/path/nginx.conf:/etc/nginx/nginx.conf #数据卷映射
restart: unless-stopped # 重启策略: 始终重启基本操作
Windows和Linux版本基本命令介绍
# 进入nginx安装目录(Windows版本的nginx还需要多个.exe)
# 启动
./nginx
# 停止
./nginx -s stop
./nginx -s quit
# 重载配置文件
./nginx -s reload
# 检查配置文件是否正确
./nginx -tdocker和doker-compose方式安装基本命令
请参考本站另外一篇文章:《Docker常用命令记录》
配置文件介绍
nginx默认配置文件
# ----------------------全局配置区域-------------------
#user nobody;
worker_processes 1; # 指定工作进程的数量
error_log logs/error.log; # 指定错误文件位置
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;# 指定进程pid文件位置
# ----------------------全局配置区域-------------------
# ----------------------事件配置区域-------------------
events {
worker_connections 1024;# 每个工作进程的最大连接数
}
# ----------------------事件配置区域-------------------
# ----------------------HTTP配置区域-------------------
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
}
# ----------------------HTTP配置区域-------------------可以看出来,配置文件主要分为三个配置区域:
全局区域
主配置块是配置文件的最外层,包含全局配置指令。这些指令影响整个 Nginx 服务器的行为。
事件区域
事件块配置 Nginx 的事件处理模型,主要用于调整并发连接的处理性能。
HTTP区域
HTTP 块是 Nginx 配置中最常用的块,包含所有与 HTTP 协议相关的配置。
server区域
server块用于配置不同的虚拟主机,每个虚拟主机可以有不同的域名、端口和配置。
location区域
location块用于配置 URL 路径的处理规则,可以包含各种指令来控制请求的处理方式。
常用配置示例
反向代理
http {
server {
# nginx监听的端口
listen 80;
# 绑定的域名,如果有的话
server_name zhengzl.cn;
# 反向代理配置
location / {
# 转发到需要代理的服务
proxy_pass http://192.168.1.100:8080;
}
}
}静态服务器
http {
server {
# nginx监听的端口
listen 80;
# 绑定的域名,如果有的话
server_name zhengzl.cn;
# 禁止目录浏览
autoindex off;
location / {
# 具体的静态资源目录
root /app/static;
}
}
}负载均衡
http {
# 需要负载均衡的服务列表
upstream services {
# 负载均衡算法:round_robin(默认轮询);least_conn(最少连接数);ip_hash(通过ip进行hash分配);
round_robin;
# 负载均衡的服务
server 192.168.1.100:8080 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.1.101:8080 weight=2 max_fails=3 fail_timeout=30s;
server 192.168.1.102:8080 weight=1 max_fails=3 fail_timeout=30s;
}
server {
# nginx监听的端口
listen 80;
# 绑定的域名,如果有的话
server_name zhengzl.cn;
# 反向代理配置
location / {
# 转发到需要代理的服务
proxy_pass http://services;
}
}
}动静分离
http {
server {
# nginx监听的端口
listen 80;
# 绑定的域名,如果有的话
server_name zhengzl.cn;
# 禁止目录浏览
autoindex off;
# 匹配静态资源请求
location ~* \.(html|css|js|png|jpg|jpeg|gif|ico)$ {
# 具体的静态资源目录
root /app/static;
}
# 处理动态请求
location / {
# 后端服务器地址
proxy_pass http://192.168.1.100:8080;
}
}
}GZIP压缩
http {
# 开启 Gzip 压缩
gzip on;
# 设置 Gzip 压缩级别,1-9,数字越大压缩比越高,但性能消耗也越大
gzip_comp_level 6;
# 设置 Gzip 缓冲区大小
gzip_buffers 16 8k;
# 设置 Gzip 压缩的最小文件大小
gzip_min_length 1k;
# 设置需要压缩的 MIME 类型
gzip_types text/plain application/javascript application/json application/xml text/css text/javascript image/svg+xml;
# 设置是否压缩代理服务器响应
gzip_proxied any;
# 设置是否压缩 HTTP/1.1 协议的响应
gzip_http_version 1.1;
# 设置是否在响应头中添加 Vary: Accept-Encoding
gzip_vary on;
server {
# nginx监听的端口
listen 80;
# 绑定的域名,如果有的话
server_name zhengzl.cn;
# 禁止目录浏览
autoindex off;
location / {
# 具体的静态资源目录
root /app/static;
# 如果已存在已有的.gz压缩文件则直接使用,而不实时压缩
gzip_static on;
}
}
}携带真实IP
http {
server {
# nginx监听的端口
listen 80;
# 绑定的域名,如果有的话
server_name zhengzl.cn;
# 反向代理配置
location / {
# 转发到需要代理的服务
proxy_pass http://192.168.1.100:8080;
# 反向代理时携带客户端的ip信息
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}访问控制
http {
server {
# nginx监听的端口
listen 80;
# 绑定的域名,如果有的话
server_name zhengzl.cn;
# 禁止目录浏览
autoindex off;
location / {
# 允许指定的ip访问
allow 127.0.0.1;
# 拒绝其余所有ip访问
deny all;
# 具体的静态资源目录
root /app/static;
}
}
}限流
http {
# 设置一个限流配置
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
# nginx监听的端口
listen 80;
# 绑定的域名,如果有的话
server_name zhengzl.cn;
# 反向代理配置
location / {
# 使用限流规则
limit_req zone=one burst=5 nodelay;
# 转发到需要代理的服务
proxy_pass http://192.168.1.100:8080;
}
}
}