nginx 反向代理配置详解

Nginx 反向代理是一种常用的部署策略,用于将客户端请求转发到内部网络中的一个或多个服务器,这些服务器直接处理请求并返回响应给Nginx,再由Nginx转交给客户端。这种设置可以提高网站的可用性和安全性,同时也能实现负载均衡、缓存、SSL 终端等功能。下面是Nginx反向代理配置的详细解析:

基础配置示例

首先,你需要在Nginx的配置文件中定义一个server块来配置反向代理。通常这个文件位于/etc/nginx/sites-available/目录下,或者可能是nginx.confhttp块内,具体取决于你的Nginx安装和配置方式。

Nginx

复制代码
1server {
2    listen 80; # 监听的端口,这里是HTTP的默认端口80
3    server_name yourdomain.com; # 你希望接收请求的域名或IP地址
4
5    location / { # 匹配所有以'/'开头的请求
6        proxy_pass http://backend_server; # 后端服务器地址,可以是域名或IP加端口
7        proxy_set_header Host $host; # 将请求头中的Host字段传给后端服务器
8        proxy_set_header X-Real-IP $remote_addr; # 将客户端的真实IP传给后端服务器
9        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 附加客户端IP到X-Forwarded-For头中
10        proxy_set_header X-Forwarded-Proto $scheme; # 如果使用HTTPS,将协议信息传给后端
11    }
12}

配置项解释

  • listen 80;: 指定Nginx监听的端口,这里配置的是80端口,即HTTP的默认端口。
  • server_name yourdomain.com;: 设置该server块服务的域名或IP地址。
  • location / { ... }: 定义URL匹配规则,这里的/表示匹配所有请求。
    • proxy_pass http://backend_server;: 指定请求应被转发到的后端服务器地址。backend_server应替换为实际的后端服务器地址(例如http://192.168.1.10:8080)。
    • proxy_set_header指令用于设置传递给后端服务器的HTTP头部,这些头部信息对于日志记录、安全性和应用识别非常重要。
      • Host: 保留原始请求的主机名,确保后端可以正确解析请求。
      • X-Real-IPX-Forwarded-For: 记录客户端的实际IP地址,对于访问控制和日志分析很有用。
      • X-Forwarded-Proto: 当使用HTTPS时,告知后端原始请求使用的协议,以便后端可以正确生成链接等。

高级配置

  • 负载均衡 :可以在proxy_pass指令中指定一个服务器列表来实现负载均衡,如proxy_pass http://backend_servers;,其中backend_servers是一个之前定义好的 upstream 名称,里面包含了多个后端服务器地址。

    Nginx

    复制代码
    1upstream backend_servers {
    2    server backend1.example.com;
    3    server backend2.example.com;
    4    server backend3.example.com;
    5}
  • SSL 终端:可以在Nginx上终止SSL连接,然后以未加密的形式将请求转发给后端服务器。

    Nginx

    复制代码
    1server {
    2    listen 443 ssl;
    3    ssl_certificate /path/to/cert.pem;
    4    ssl_certificate_key /path/to/key.pem;
    5    ...
    6}
  • 缓存配置:可以利用Nginx的缓存功能,对某些静态资源或响应进行缓存,提高访问速度和减轻后端压力。

  • 访问控制与安全 :通过allowdeny指令控制访问,以及使用ssl_protocolsssl_ciphers等指令增强SSL安全配置。

以上就是Nginx反向代理的基本配置和一些高级选项。根据实际需求,你可能需要调整或增加更多的配置项。记得每次修改配置文件后,都需要执行sudo nginx -t来测试配置文件的语法是否正确,然后使用sudo nginx -s reload命令来重新加载配置。

相关推荐
iCxhust41 分钟前
windows环境下在Bochs中运行Linux0.12系统
linux·运维·服务器·windows·minix
九河云3 小时前
数字化转型中的网络安全风险与零信任架构实践
运维·科技·安全·web安全·架构
守城小轩4 小时前
轻量级HTTP&Socks代理GOST: Linux编译安装
运维·网络·网络协议
奋斗的蛋黄6 小时前
网络卡顿运维排查方案:从客户端到服务器的全链路处理
运维·服务器·网络
wanhengidc7 小时前
云手机搬砖 尤弥尔传奇自动化操作
运维·服务器·arm开发·安全·智能手机·自动化
wow_DG8 小时前
【运维✨】云服务器公网 IP 迷雾:为什么本机看不到那个地址?
运维·服务器·tcp/ip
yuanManGan8 小时前
走进Linux的世界:初识操作系统(Operator System)
android·linux·运维
i_am_a_div_日积月累_8 小时前
jenkins打包报错
运维·rust·jenkins·jenkins打包报错
GIOTTO情9 小时前
舆情处置的自动化实践:基于Infoseek舆情系统的技术解析与落地指南
运维·自动化·linq
Thexhy9 小时前
在 CentOS 7 的 Linux 系统中配置 NFS
linux·运维·学习·centos