Nginx正向代理与反向代理及配置文件全解析

 更新时间:2025年05月06日 09:57:56   作者:桃花面包  
Nginx是一款高性能的开源Web服务器和反向代理服务器,广泛应用于高并发场景,如静态资源托管、负载均衡、API网关等,本文给大家介绍Nginx正向代理与反向代理及配置文件全解析,感兴趣的朋友一起看看吧

1. Nginx简介与应用场景

Nginx是一款高性能的开源Web服务器和反向代理服务器,广泛应用于高并发场景,如静态资源托管、负载均衡、API网关等。其核心优势包括:

  • 事件驱动模型:异步非阻塞架构,支持数万并发连接。
  • 模块化设计:通过模块扩展功能(如HTTP/2、gzip压缩)。
  • 轻量高效:内存占用低,适合资源受限环境。

典型应用场景

  • 静态文件托管
  • 反向代理动态应用(如Node.js、Java服务)
  • 负载均衡集群
  • 安全防护(如DDoS防御、HTTPS加密)

2. 正向代理与反向代理的核心区别

2.1 正向代理(Forward Proxy)

  • 定义:代理客户端访问外部资源,客户端主动配置代理
  • 特点
    • 隐藏客户端真实IP(如公司内网访问互联网)。
    • 突破访问限制(如访问被封锁的网站)。

配置示例

server {
    listen 3128;                      # 监听端口
    resolver 8.8.8.8;                 # DNS解析服务器
    location / {
        proxy_pass http://$http_host;  # 转发所有请求
    }
}

2.2 反向代理(Reverse Proxy)

  • 定义:代理服务端接收客户端请求,客户端无感知后端服务
  • 特点
    • 隐藏后端服务器,提供负载均衡和安全防护。
    • 支持动态应用加速(如缓存、SSL终止)。

配置示例: 

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://backend_server;  # 转发到后端集群
        proxy_set_header Host $host;       # 传递原始域名
    }
}

对比总结

特性正向代理反向代理
配置主体客户端服务端
隐藏对象客户端IP后端服务IP
典型用途访问控制、匿名访问负载均衡、安全防护

3. Nginx配置文件结构总览

Nginx的配置文件默认路径为/etc/nginx/nginx.conf,支持模块化设计,包含以下核心层级:

# 全局块(Main Context)
user nginx;
worker_processes auto;
# events块(Events Context)
events {
    worker_connections 1024;
}
# http块(HTTP Context)
http {
    # HTTP全局配置
    include mime.types;
    # server块(虚拟主机)
    server {
        # server块配置
        listen 80;
        # location块(请求路径匹配)
        location / {
            root /var/www/html;
        }
    }
}
# stream块(TCP/UDP代理,可选)
stream {
    server {
        listen 3306;
        proxy_pass backend_mysql;
    }
}

4.Nginx配置文件结构全解析

1.全局块(Main Context)

  • 作用范围:影响整个Nginx进程的全局配置。
  • 核心指令
user nginx;                     # 运行Nginx的用户和组(安全必备)
worker_processes auto;          # 工作进程数(建议设为CPU核心数)
error_log /var/log/nginx/error.log warn;  # 错误日志路径与级别(debug/info/notice/warn/error)
pid /var/run/nginx.pid;        # 存储主进程PID的文件路径

2.events块(Events Context)

  • 作用范围:定义Nginx处理网络连接的事件模型参数。
  • 核心指令
events {
    worker_connections 1024;   # 单个工作进程的最大并发连接数(总并发量= worker_processes × worker_connections)
    use epoll;                 # 事件模型(Linux推荐epoll,FreeBSD用kqueue)
    multi_accept on;           # 一次性接受所有新连接
    accept_mutex off;          # 高并发时建议关闭互斥锁(减少上下文切换)
}

3.http块(HTTP Context)

3.1 http块全局指令

  • 作用范围:所有HTTP请求的全局配置。
  • 核心指令
http {
    # 基础配置
    include /etc/nginx/mime.types;      # 包含MIME类型定义文件
    default_type application/octet-stream;  # 默认响应类型(未知文件类型时使用)
    # 日志配置
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" "$http_user_agent"';
    access_log /var/log/nginx/access.log main;  # 访问日志路径与格式
    error_log /var/log/nginx/error.log warn;
    # 性能优化
    sendfile on;                # 启用高效文件传输模式
    tcp_nopush on;              # 仅在sendfile开启时有效,减少网络包数量
    keepalive_timeout 65;       # 长连接超时时间(单位秒)
    client_max_body_size 100m;  # 客户端请求体最大限制(防DDoS)
    # 压缩配置
    gzip on;
    gzip_types text/plain text/css application/json;
    # 安全增强
    server_tokens off;          # 隐藏Nginx版本号
}

3.2 server块(虚拟主机配置)

  • 作用范围:定义单个虚拟主机(一个http块可包含多个server块)。
  • 核心指令
server {
    listen 80;                  # 监听端口(可指定IP,如listen 192.168.1.1:80)
    server_name example.com;    # 匹配的域名(支持通配符和正则表达式)
    root /var/www/html;         # 网站根目录
    index index.html;           # 默认首页文件
    # SSL配置(HTTPS)
    listen 443 ssl;
    ssl_certificate /etc/ssl/certs/example.crt;
    ssl_certificate_key /etc/ssl/private/example.key;
    # 访问控制
    deny 192.168.1.100;         # 禁止特定IP访问
    allow all;
    # 错误页面重定向
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
}

3.3 location块(请求路径匹配)

  • 作用范围:在server块内定义,根据URI路径匹配处理规则。
  • 匹配模式
    • 精确匹配location = /path { ... }
    • 前缀匹配location /prefix/ { ... }
    • 正则匹配
      • location ~ \.php$ { ... }(区分大小写)
      • location ~* \.jpg$ { ... }(不区分大小写)

常用指令

  • location / {
        try_files $uri $uri/ /index.html;  # 静态文件优先匹配,不存在则返回首页
    }
    location /images/ {
        alias /data/static/images/;       # 路径别名(替换URI中的/images/)
        expires 30d;                      # 浏览器缓存30天
    }
    location /api/ {
        proxy_pass http://backend_server;  # 反向代理到后端服务
        proxy_set_header Host $host;       # 传递原始域名
        proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实IP
    }
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;      # 转发PHP请求到FastCGI服务
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

3.4 upstream块(负载均衡配置)

  • 作用范围:在http块内定义后端服务器集群,用于负载均衡。
  • 核心指令
upstream backend {
    # 负载均衡策略(默认轮询)
    least_conn;                # 最少连接数策略
    # ip_hash;                # 按客户端IP哈希分配(会话保持)
    # 后端服务器列表
    server 10.0.0.1:8080 weight=3;  # 权重越高,分配请求越多
    server 10.0.0.2:8080;
    server 10.0.0.3:8080 backup;    # 备用服务器(主服务器宕机时启用)
}
server {
    location / {
        proxy_pass http://backend;  # 使用upstream配置的集群
    }
}

3.5stream块(TCP/UDP代理)

  • 作用范围:处理非HTTP流量(如数据库、SSH、DNS)。
  • 核心指令
stream {
    upstream backend_mysql {
        server 10.0.0.1:3306;
        server 10.0.0.2:3306;
    }
    server {
        listen 3306;          # 监听TCP端口
        proxy_pass backend_mysql;
        proxy_connect_timeout 5s;
    }
}

5. 配置文件示例与注释

# 全局块
user www-data;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
# events块
events {
    worker_connections 2048;
    use epoll;
}
# 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"';
    access_log /var/log/nginx/access.log main;
    sendfile on;
    keepalive_timeout 65;
    # 虚拟主机1:静态资源服务
    server {
        listen 80;
        server_name static.example.com;
        root /var/www/static;
        location / {
            expires 7d;
            add_header Cache-Control "public";
        }
    }
    # 虚拟主机2:反向代理动态应用
    server {
        listen 80;
        server_name api.example.com;
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
        }
    }
    # 负载均衡配置
    upstream backend {
        server 10.0.0.1:8080;
        server 10.0.0.2:8080;
    }
}
# stream块(MySQL负载均衡)
stream {
    upstream mysql_cluster {
        server 10.0.0.1:3306;
        server 10.0.0.2:3306;
    }
    server {
        listen 3306;
        proxy_pass mysql_cluster;
    }
}

到此这篇关于Nginx正向代理与反向代理及配置文件全解析的文章就介绍到这了,更多相关nginx正向代理与反向代理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx服务器配置性能优化方案

    Nginx服务器配置性能优化方案

    这篇文章主要为大家详细介绍了Nginx服务器配置性能优化方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 关于nginx负载均衡和反向代理的讲解

    关于nginx负载均衡和反向代理的讲解

    这篇文章主要介绍了nginx负载均衡和反向代理,具有很好的参考价值,希望对大家有所帮助,大家一起来看看吧
    2021-09-09
  • nginx使用sticky基于cookie的会话保持方式

    nginx使用sticky基于cookie的会话保持方式

    这篇文章主要介绍了nginx使用sticky基于cookie的会话保持方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 浅谈Nginx是如何解决惊群效应的

    浅谈Nginx是如何解决惊群效应的

    惊群效应是Nginx在处理大量并发连接时可能出现的一个性能问题,本文主要介绍了浅谈Nginx是如何解决惊群效应的,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • Nginx中共享session会话配置方法例子

    Nginx中共享session会话配置方法例子

    这篇文章主要介绍了Nginx中共享session会话配置方法例子,最后使用第三方模块upstream_hash解决了这个问题,需要的朋友可以参考下
    2014-07-07
  • nginx命令参数用法详细介绍

    nginx命令参数用法详细介绍

    这篇文章主要介绍了nginx命令参数用法详细介绍的相关资料,希望通过本文可以帮助到大家理解并应用这部分知识,需要的朋友可以参考下
    2017-08-08
  • Nginx+keepalived实现七层的负载均衡的高可用(最新解决方案)

    Nginx+keepalived实现七层的负载均衡的高可用(最新解决方案)

    这篇文章主要介绍了Nginx+keepalived实现七层的负载均衡的高可用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • Nginx配置多个端口进行监听的实现

    Nginx配置多个端口进行监听的实现

    随着容器的应用越来越多,将nginx部署在容器中也是常有之事,本文主要介绍了Nginx配置多个端口进行监听的实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Nginx应对Permission denied和File not found的配置

    Nginx应对Permission denied和File not found的配置

    这篇文章主要介绍了Nginx应对Permission denied和File not found的错误配置,文中介绍了两个PHP程序使用时出现相关问题后的解决案例,需要的朋友可以参考下
    2015-12-12
  • Nginx+Tomcat搭建高性能负载均衡集群的实现方法

    Nginx+Tomcat搭建高性能负载均衡集群的实现方法

    这篇文章主要介绍了Nginx+Tomcat搭建高性能负载均衡集群的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论