博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌



Nginx 正向代理和反向代理_nginx


文章目录

  • 1、为什么 Nginx 性能这么高
  • 2、Nginx 正向代理和反向代理
  • 3、Nginx 有什么优缺点
  • 4、Nginx 正向代理的配置
  • 4、Nginx 配置反向代理


1、为什么 Nginx 性能这么高

Nginx性能高的原因有以下几点:

  1. Nginx是一个轻量级的Web服务器,它使用少量的系统资源来处理大量的并发连接请求。
  2. Nginx采用了事件驱动模型,它使用异步非阻塞的方式处理请求,可以更好地利用系统资源。
  3. Nginx具有高度的可扩展性和灵活性,可以通过添加模块来扩展其功能。
  4. Nginx具有出色的负载均衡和反向代理功能,可以将请求分配到多个服务器上,从而提高性能和可靠性。

总之,Nginx通过优秀的架构设计和高效的算法实现了高性能和高可靠性,成为了Web服务器领域的佼佼者。

2、Nginx 正向代理和反向代理

Nginx既可以作为正向代理,也可以作为反向代理。正向代理和反向代理的区别在于代理的对象不同。

正向代理:客户端向代理服务器发送请求,代理服务器再向目标服务器发送请求,目标服务器返回响应给代理服务器,代理服务器再将响应返回给客户端。这时,客户端并不知道请求的目标服务器是哪个,只知道代理服务器的地址。

反向代理:客户端向目标服务器发送请求,但实际上请求被发送到了反向代理服务器上,反向代理服务器会根据配置的规则将请求转发给后端的目标服务器进行处理,再将处理结果返回给客户端。这时,客户端并不知道请求的目标服务器是哪个,只知道反向代理服务器的地址。

Nginx可以通过配置文件的方式实现正向代理和反向代理的功能。在配置文件中,通过proxy_pass指令指定代理服务器的地址和端口号,即可实现代理的功能。

3、Nginx 有什么优缺点

nginx是一个开源的高性能的Web服务器和反向代理服务器。它具有以下优点:

  1. 高性能:nginx采用异步非阻塞的事件驱动模型,能够处理大量并发连接,具有出色的性能表现。
  2. 资源占用低:相比于其他Web服务器,nginx的内存占用较低,能够处理大量的并发请求。
  3. 高度可配置:nginx提供了丰富的配置选项,可以根据实际需求进行灵活的配置和定制。
  4. 反向代理和负载均衡:nginx作为反向代理服务器,能够将请求转发给后端服务器,并进行负载均衡,提高系统的稳定性和性能。
  5. 高度可扩展:nginx支持模块化的架构,可以通过添加第三方模块来扩展功能,满足不同的需求。

然而,nginx也有一些缺点:

  1. 学习曲线较陡峭:相对于一些传统的Web服务器,nginx的配置语法和理念可能对初学者来说有一定的学习难度。
  2. 不支持直接处理动态内容:nginx主要用于处理静态内容,对于动态内容的处理需要与其他后端服务器(如PHP-FPM)结合使用。
  3. Windows平台支持相对较弱:虽然nginx也可以在Windows平台上运行,但相对于Linux平台,其稳定性和性能可能稍逊一筹。

综上所述,nginx是一个高性能、资源占用低、可配置性强的Web服务器和反向代理服务器,适用于处理大量并发请求和负载均衡的场景。但在选择使用时,需要根据具体的需求和环境来权衡其优缺点。

4、Nginx 正向代理的配置

nginx.conf 配置正向代理:

http {
    # 定义正向代理服务器的地址和端口号
    upstream proxy_server {
        server 192.168.1.1:8080;
    }
     # 定义代理服务器的缓存
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache:10m inactive=60m;
     # 定义代理服务器的缓存时间
    proxy_cache_valid 200 60m;
     # 定义代理服务器的缓存大小
    proxy_cache_size 10m;
     # 定义代理服务器的缓存类型
    proxy_cache_key "$scheme$request_method$host$request_uri";
     # 定义代理服务器的缓存控制
    proxy_cache_bypass $http_pragma;
    proxy_cache_revalidate on;
    proxy_cache_min_uses 1;
     # 定义代理服务器的超时时间
    proxy_connect_timeout 30s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
     # 定义代理服务器的请求头
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     # 定义代理服务器的响应头
    proxy_hide_header X-Powered-By;
    proxy_hide_header Server;
     # 定义代理服务器的缓存控制头
    add_header Cache-Control "public, max-age=60, s-maxage=60";
     # 定义代理服务器的缓存控制头
    proxy_cache_lock on;
     # 定义代理服务器的缓存控制头
    proxy_cache_methods GET HEAD POST;
}
server {
    listen 80;
    server_name example.com;
     # 定义代理服务器的地址和端口号
    location / {
        proxy_pass http://proxy_server;
        proxy_cache cache;
        proxy_cache_key "$scheme$request_method$host$request_uri";
        proxy_cache_valid 200 60m;
        proxy_cache_bypass $http_pragma;
        proxy_cache_revalidate on;
        proxy_cache_min_uses 1;
    }
}

4、Nginx 配置反向代理

nginx.conf 配置反向代理:

http {
    # 定义后端服务器的地址和端口号
    upstream backend_server {
        server 192.168.1.1:8080;
    }
}
server {
    listen 80;
    server_name example.com;
    # 定义反向代理规则,将请求转发到后端服务器
    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}