Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 通过使用Nginx的反向代理功能,可以有效地提高Web应用的性能、安全性和可扩展性。配置过程中需要注意不同场景下的具体需求,如负载均衡、SSL终止和缓存策略等。正确配置和优化Nginx反向代理可以显著提升系统的整体表现。

Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass详解

1. 什么是Nginx反向代理?

Nginx是一种高性能的HTTP服务器和反向代理服务器。反向代理(Reverse Proxy)是一种服务器配置方式,客户端向反向代理服务器发送请求,代理服务器再将请求转发给后端服务器并将响应返回给客户端。这种方式不仅可以隐藏后端服务器,还可以提高安全性和负载均衡。

2. 为什么使用Nginx反向代理?

使用Nginx反向代理有以下优点:

  • 负载均衡:Nginx可以将请求分配到多个后端服务器,减少单个服务器的负载。
  • 缓存:Nginx可以缓存静态内容,减少后端服务器的压力,提高响应速度。
  • 安全性:Nginx可以隐藏后端服务器的真实IP地址,防止直接攻击后端服务器。
  • SSL终止:Nginx可以处理SSL加密,减少后端服务器的负载。
  • HTTP/2支持:Nginx可以处理HTTP/2协议,提高网页加载速度。

3. Nginx反向代理的配置

3.1 基本配置

在Nginx中使用 proxy_pass指令来配置反向代理。以下是一个基本的反向代理配置示例:

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;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
​

在这个配置中:

  • listen 80;:监听80端口。
  • server_name example.com;:指定虚拟主机名。
  • location /:匹配所有请求。
  • proxy_pass http://backend_server;:将请求转发到后端服务器 http://backend_server
  • proxy_set_header指令用于设置转发请求时的头信息。

3.2 配置负载均衡

Nginx可以通过反向代理实现负载均衡。以下是一个简单的负载均衡配置示例:

http {
    upstream backend {
        server backend1.example.com weight=5;
        server backend2.example.com;
        server backend3.example.com backup;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            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_set_header X-Forwarded-Proto $scheme;
        }
    }
}
​

在这个配置中:

  • upstream backend { ... }:定义一个上游服务器组 backend
  • server backend1.example.com weight=5;:指定后端服务器及其权重。
  • server backend3.example.com backup;:指定备用服务器,当主服务器不可用时使用。

3.3 SSL终止

Nginx还可以用于SSL终止,将SSL连接解密并将请求转发给后端服务器。以下是一个SSL终止的配置示例:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    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;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
​

在这个配置中:

  • listen 443 ssl;:监听443端口并启用SSL。
  • ssl_certificatessl_certificate_key:指定SSL证书和私钥文件。

4. 高级配置选项

4.1 超时配置

Nginx提供了多种超时配置选项,以应对不同的网络环境和应用场景:

location / {
    proxy_pass http://backend_server;
    proxy_connect_timeout 60s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
    send_timeout 60s;
}
​

4.2 缓存配置

Nginx可以缓存后端服务器的响应,以提高性能和减少后端服务器的负载:

http {
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

    server {
        location / {
            proxy_cache my_cache;
            proxy_pass http://backend_server;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
        }
    }
}
​

5. 监控和日志

通过Nginx的日志功能,可以监控反向代理的运行情况:

http {
    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 /var/log/nginx/access.log main;

    server {
        location / {
            proxy_pass http://backend_server;
        }
    }
}
​

思维导图

- Nginx反向代理配置
  - 基本配置
    - proxy_pass
    - proxy_set_header
  - 负载均衡
    - upstream
    - 服务器权重
    - 备用服务器
  - SSL终止
    - ssl_certificate
    - ssl_certificate_key
  - 高级配置选项
    - 超时配置
    - 缓存配置
  - 监控和日志
    - log_format
    - access_log
​

总结

通过使用Nginx的反向代理功能,可以有效地提高Web应用的性能、安全性和可扩展性。配置过程中需要注意不同场景下的具体需求,如负载均衡、SSL终止和缓存策略等。正确配置和优化Nginx反向代理可以显著提升系统的整体表现。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
3月前
|
安全 应用服务中间件 Linux
Debian操作系统如何安装Nginx并开启HTTP2
本指南介绍了在Linux系统中通过源码编译安装Nginx的完整流程。首先更新软件包列表并安装必要的编译依赖,接着下载指定版本的Nginx源码包(如1.24.0),检查文件完整性后解压。随后通过配置脚本指定安装路径与模块(如HTTP SSL模块),执行编译和安装命令。最后创建软链接以便全局调用,并提供启动、停止及重载Nginx的命令,同时提醒注意安全组设置以确保正常访问。
|
4月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
130 18
|
6月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
487 90
|
9月前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
2943 8
|
负载均衡 Unix 应用服务中间件
|
网络协议 应用服务中间件 nginx
|
应用服务中间件 nginx C语言
|
Linux 应用服务中间件 Apache
《高性能Linux服务器构建实战》——第1章轻量级HTTP服务器Nginx
本节书摘来自华章社区《高性能Linux服务器构建实战》一书中的第1章轻量级HTTP服务器Nginx,作者:高俊峰,更多章节内容可以访问云栖社区“华章社区”公众号查看
1564 0
|
4月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
595 87