当前位置: 代码网 > 服务器>服务器>Linux > Nginx反向代理和负载均衡怎么配置 完整操作步骤

Nginx反向代理和负载均衡怎么配置 完整操作步骤

2026年08月15日 Linux 我要评论
前言nginx是目前互联网行业主流开源web服务,依靠异步非阻塞epoll事件模型,极低cpu、内存消耗即可支撑数万并发,性能远超传统apache。它不只是单纯网页服务器,还能承担反向代理、七层负载均

前言

nginx是目前互联网行业主流开源web服务,依靠异步非阻塞epoll事件模型,极低cpu、内存消耗即可支撑数万并发,性能远超传统apache。它不只是单纯网页服务器,还能承担反向代理、七层负载均衡、https证书终端、缓存、限流、防盗链等企业核心功能。

本文基于centos7环境完整梳理nginx底层架构、配置语法、五大核心功能,附带全套可复制命令、虚拟机实验拓扑、页面效果截图,适合运维自学、课堂实训、企业上岗复习。

一、nginx基础介绍

1.1 nginx核心优势

由俄罗斯工程师igor sysoev开发,核心竞争力为事件驱动异步非阻塞io

  • apache架构:一连接对应一个进程/线程,万并发会创建上万进程,内存暴涨、cpu上下文切换开销巨大;
  • nginx架构:仅少量worker进程,依靠io多路复用,单个进程可同时处理成千空闲连接,资源占用极低,单机支持5万并发。

1.2 nginx多功能定位

  1. 静态资源服务器:托管html、css、js、图片、安装包;
  2. 反向代理:转发前端请求至java/php/node后端,隐藏后端真实ip;
  3. 七层负载均衡:多后端集群分发流量,实现业务扩容、故障自动隔离;
  4. ssl/tls终端:统一处理https加密解密,后端保持http通信;
  5. 配套实用能力:gzip压缩、ip访问控制、接口限流、图片防盗链、url重写、http缓存。

1.3 master-worker多进程架构

  1. master主进程(root权限运行)
    只负责管理,不处理用户请求:读取解析配置、管控所有worker、接收启动/停止/reload系统信号。
  2. worker工作进程
    业务处理核心,单线程异步io,推荐配置worker_process auto自动匹配cpu物理核心,进程之间相互独立。
  3. 可选cache进程
    cache manager:定时清理过期磁盘缓存;
    cache loader:服务启动加载缓存元数据。

1.4 热重载原理(nginx -s reload)

零中断更新配置流程:

  1. master校验新配置语法是否合法;
  2. 新建一批worker进程加载新配置,接收新用户请求;
  3. 向旧worker发送退出信号,旧进程处理完已有连接后自动关闭;
    全程服务无停机,业务不中断。

1.5 nginx常用管理命令

nginx                # 启动服务
nginx -s stop        # 强制快速停止
nginx -s quit        # 优雅停机,处理完现有连接再退出
nginx -s reload      # 重载配置(日常最常用)
nginx -t             # 校验配置文件语法错误

二、centos7 nginx基础部署实验

2.1 实验节点规划

主机名ip地址角色
nginx-server10.1.8.10/24nginx服务端
nginx-client10.1.8.11/24测试客户端

2.2 服务器基础环境配置

修改主机名、静态ip、关闭防火墙(实训环境简化操作)

# nginx-server操作
hostnamectl set-hostname nginx-server
nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.10/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes
nmcli connection up ens33
systemctl disable firewalld --now
setenforce 0

# nginx-client同步修改ip配置
hostnamectl set-hostname nginx-client
nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.11/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes
nmcli connection up ens33

2.3 nginx安装、启动、页面测试

# 配置阿里epel软件源
wget -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 安装nginx
yum -y install nginx
# 设置开机自启并立即启动
systemctl enable nginx --now
# 自定义首页内容
mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.ori
echo hello world from nginx > /usr/share/nginx/html/index.html
# 防火墙放行http服务
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

2.4 客户端访问验证

客户端修改hosts解析域名

vim /etc/hosts
# 添加记录
10.1.8.10 www.laogao.cloud
# curl测试访问
curl http://www.laogao.cloud

三、nginx完整配置层级结构

主配置文件路径:/etc/nginx/nginx.conf

配置由外到内五层嵌套,层级权限:子配置覆盖父配置

  1. 全局块:全局进程、日志、pid、模块加载,作用于整个nginx实例
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
  1. events块:控制网络并发参数
events {
worker_connections 1024;  # 单个进程最大并发连接
use epoll;                # linux专属io多路复用模型
multi_accept on;
}
  1. http块:全站通用http全局配置,包含日志、文件传输、长连接、模块化引入
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '客户端ip - 用户 [时间] 请求 状态码...';
access_log /var/log/nginx/access.log main;
sendfile on;          # 零拷贝,静态文件高性能
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65; # http长连接超时
include /etc/nginx/conf.d/*.conf; # 拆分站点配置
}
  1. server块(虚拟主机):绑定端口、域名,对应单个网站
  2. location块:匹配url路径,控制资源访问、代理、权限

3.1 location匹配优先级(从高到低)

  1. location = /uri 精确匹配(最高)
  2. location ^~ /uri 前缀匹配,跳过正则判断
  3. location ~ 正则 区分大小写正则
  4. location ~* 正则 不区分大小写正则
  5. location /xxx 普通前缀匹配
  6. location / 全局兜底匹配(最低)

3.2 nginx高频内置变量

变量作用
$remote_addr客户端真实ip
$host请求域名
$uri请求路径,不带get参数
$request_uri完整路径+参数
$schemehttp / https 协议
$request_methodget/post 请求方式

四、五大核心功能完整实操

功能一:虚拟主机(一台服务器部署多个网站)

实现三种方式:域名区分(生产主流)、端口区分、ip区分

1、域名虚拟主机实操

# 新建两个站点目录
mkdir /usr/share/nginx/web1 /usr/share/nginx/web2
echo web1.laogao.cloud > /usr/share/nginx/web1/index.html
echo web2.laogao.cloud > /usr/share/nginx/web2/index.html
# 新建独立站点配置文件
vim /etc/nginx/conf.d/vhost-name.conf
server {
listen 80;
server_name web1.laogao.cloud;
root /usr/share/nginx/web1;
index index.html;
}
server {
listen 80;
server_name web2.laogao.cloud;
root /usr/share/nginx/web2;
index index.html;
}
# 重载配置
nginx -s reload

客户端hosts绑定两个域名,curl分别访问即可返回不同页面。

2、端口虚拟主机

同一域名,不同端口区分站点,配置listen 8081、listen 8082即可。

功能二:https加密站点 + http强制跳转

4.1 生成自签测试证书

mkdir certs && cd certs
# 生成私钥
openssl genrsa -out www.key 2048
# 证书请求文件
openssl req -new -key www.key -out www.csr -subj "/c=cn/st=js/l=nj/o=lg/ou=devops/cn=www.laogao.cloud/emailaddress=webadmin@laogao.cloud"
# 生成公钥证书
openssl x509 -req -days 3650 -in www.csr -signkey www.key -out www.crt
# 移动证书目录
mv www* /etc/ssl/certs/www.laogao.cloud

4.2 https站点配置

vim /etc/nginx/conf.d/ssl.conf
# https站点
server {
listen 443 ssl http2;
server_name www.laogao.cloud;
ssl_certificate "/etc/ssl/certs/www.laogao.cloud/www.crt";
ssl_certificate_key "/etc/ssl/certs/www.laogao.cloud/www.key";
ssl_protocols tlsv1.2 tlsv1.3;
root /usr/share/nginx/html;
}
# 80端口301永久跳转https
server {
listen 80;
server_name www.laogao.cloud;
return 301 https://$host$request_uri;
}

4.3 目录基础认证(密码访问页面)

搭配https使用,避免密码明文传输

# 安装密码生成工具
yum -y install httpd-tools
# 创建账号laogao,密码123456
htpasswd -b -c /etc/nginx/.htpasswd laogao 123456
# 配置文件添加认证规则
location /auth-basic/ {
auth_basic "请输入登录账号";
auth_basic_user_file "/etc/nginx/.htpasswd";
}

功能三:nginx解析php动态.网站

静态页面是提前写死文件,php页面实时运行代码生成内容,nginx不直接解析php,通过fastcgi转发至php-fpm进程处理。

4.4 部署php环境

yum install -y php php-fpm php-gd php-mbstring
systemctl enable php-fpm --now
# 新建php测试页面
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php

4.5 nginx转发php配置

vim /etc/default.d/php.conf
location ~ \.php$ {
try_files $uri =404; # 防路径穿透漏洞
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param script_filename $document_root$fastcgi_script_name;
include fastcgi_params;
}
nginx -s reload

功能四:反向代理详解

4.6 正向代理 vs 反向代理区别

  1. 正向代理:替客户端上网,隐藏用户(翻.墙工具);
  2. 反向代理:替后端服务器接收请求,隐藏后端真实ip,企业网关标准架构。

核心指令proxy_pass,配套参数向后端传递客户端真实ip

location /api/ {
proxy_pass http://192.168.1.200/;
proxy_set_header host $http_host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
}

关键细节:proxy_pass末尾斜杠

  1. /:剔除location匹配路径,只转发后缀;
  2. 不带/:完整拼接location路径转发,日常高频踩坑点。

功能五:七层负载均衡upstream集群

5.1 实验拓扑

代理服务器proxy(10.1.8.20),三台后端nginx节点10.1.21/22/23,客户端统一访问代理,流量自动分发。

5.2 upstream配置语法

http {
upstream backends {
server nginx1.laogao.cloud;
server nginx2.laogao.cloud weight=2;
server nginx3.laogao.cloud backup;
# server xxx down; 手动下线节点
}
server {
listen 80;
server_name www.laogao.cloud;
location / {
proxy_pass http://backends;
# 传递真实客户端信息
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
}
}
}

5.3 五种负载均衡调度算法

  1. round_robin 默认轮询:请求平均分给所有后端;
  2. weight 权重:性能更好服务器分配更多流量;
  3. ip_hash:同一客户端ip固定后端,解决session共享;
  4. least_conn:优先分给当前连接最少的节点;
  5. least_time(nginx商业版):优先响应速度最快服务器。

五、nginx日志与常见故障排错

5.1 两种核心日志

  1. access.log:记录每一条访问,包含客户端ip、访问时间、请求、状态码、浏览器ua;
  2. error.log:报错专用,502、配置错误、端口拦截全部在此排查。

5.2 生产高频报错

  1. 502 bad gateway:后端php-fpm/服务未启动、防火墙拦截端口;
  2. 504 gateway timeout:后端代码执行超时;
  3. 403 forbidden:网站目录权限不足、无index首页;
  4. 并发低:调高worker_connections、系统文件句柄ulimit限制。

六、整体总结

  1. nginx依托epoll异步模型,高并发、低资源占用,兼顾静态服务、反向代理、负载均衡多场景;
  2. master-worker进程架构支持热重载,修改配置业务零中断,线上运维友好;
  3. 配置分为全局/events/http/server/location五层,location匹配优先级必须熟记,是写配置核心;
  4. 企业常用五大功能:多站点虚拟主机、https全站加密、php动态解析、反向代理、七层负载均衡;
  5. upstream集群支持多种流量调度策略,可实现后端故障自动隔离、业务高可用;
  6. 实操规范:配置拆分到conf.d目录,修改前执行nginx -t校验语法;反向代理务必传递客户端真实ip;php站点增加try_files安全防护;线上使用正规ca证书,禁止自签证书对外服务。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com