跳至正文
网站更新中,若有需要请直接联系宝商值班客服:182 1399 0220(微信同号)...
当前进度 23%

如何配置Nginx反向代理

如何配置Nginx反向代理

Gemini_Generated_Image_1bwhkp1bwhkp1bwh

配置Nginx反向代理是Nginx最核心、最常用的功能之一。通过反向代理,Nginx可以接收用户的请求,然后将请求转发给后端的应用服务器(如 Tomcat、Node.js、Python 应用等),再将应用服务器的响应返回给用户。

下面是配置Nginx反向代理的详细步骤和关键配置项:


一、基本原理与目标

目标: 让用户通过访问Nginx服务器(通常是 80/443端口)来间接访问运行在后端服务器(如 http://127.0.0.1:8080)上的应用。

配置文件位置:

Nginx的配置通常在以下文件或目录中:

  • /etc/nginx/nginx.conf (主配置文件)
  • /etc/nginx/conf.d/*.conf (自定义配置文件目录)
  • /etc/nginx/sites-enabled/* (网站配置文件目录,常用于Ubuntu/Debian)

二、核心配置步骤

您需要在Nginx的配置文件中找到或创建一个 server 块,并在其中添加 location 块来定义代理规则。

1. 创建或编辑配置文件

假设您要为域名 example.com 配置反向代理,可以创建一个新的配置文件:

sudo nano /etc/nginx/conf.d/example.com.conf

2. 配置 HTTP 80 端口(可选但推荐)

配置 Nginx 监听标准的 80端口,并为您的域名设置好 server_name

Nginx

server {
    listen 80;
    server_name example.com www.example.com;

    # 这里可以添加重定向,将所有HTTP请求转到HTTPS(如果已配置443端口)
    # return 301 https://$host$request_uri; 
    
    # 核心代理配置放在location块中
    location / {
        # 见步骤 3
    }
}

3. 配置反向代理的核心指令

在您选择的 server 块(可以是 80 端口或 443 端口)中,使用 location 块来定义哪些请求需要被转发,并使用 proxy_pass 指令指定后端应用服务器的地址。

Nginx

location / {
    # 核心指令:将所有请求(/)转发到后端的8080端口
    # 这里的地址可以是本地端口,也可以是另一台服务器的IP地址和端口
    proxy_pass http://127.0.0.1:8080; 

    # --- 以下是反向代理推荐的安全和头信息配置 ---
    
    # 允许Nginx将客户端的真实IP地址、主机名等信息传递给后端应用
    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;
    
    # 解决代理连接超时问题
    proxy_connect_timeout 60s; 
    proxy_send_timeout 60s; 
    proxy_read_timeout 60s; 
}

4. 检查配置并重启 Nginx

配置完成后,请执行以下两个命令:

  1. 检查配置语法:sudo nginx -t如果看到 syntax is ok 和 test is successful,则表示没有语法错误。
  2. 重启Nginx使配置生效:sudo systemctl restart nginx

三、关键配置项详解

配置项说明用途
proxy_pass指定后端服务器的 协议、地址和端口核心指令。所有匹配 location 规则的请求都会被转发到此地址。
location /匹配所有进入的请求。定义请求转发的范围。如果您想代理 /api/ 下的请求,则写为 location /api/ { ... }
proxy_set_header Host $host;将原始的 Host 头(即用户的域名)传递给后端。非常重要。许多应用依赖这个头信息来正确处理请求和生成链接。
proxy_set_header X-Real-IP $remote_addr;将用户的 真实 IP 地址 传递给后端。方便后端应用进行日志记录和IP限制。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;记录整个请求链中所有代理服务器的 IP 地址。重要。通常与上一个指令一起使用。

四、进阶:HTTPS(SSL)反向代理

如果您已经像前面那样配置了SSL证书,您需要在 server 块中加入 SSL 配置,并监听 443端口

Nginx

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    # SSL 证书和私钥路径
    ssl_certificate /path/to/your_domain.crt;
    ssl_certificate_key /path/to/your_domain.key;

    location / {
        # 仍然使用 proxy_pass 将请求转发到后端应用的 http 端口
        proxy_pass http://127.0.0.1:8080; 

        # ... 其他 proxy_set_header 配置保持不变 ...
    }
}

在这种配置下:

  1. 用户通过HTTPS安全地连接到 Nginx (443端口)
  2. Nginx 解密 请求。
  3. Nginx 通过 HTTP(非加密) 将请求转发给后端应用(8080端口)。
  4. 后端应用处理完毕后,响应返回给 Nginx。
  5. Nginx 加密 响应,返回给用户。

这样就实现了用户访问的加密,但后端应用无需处理证书,简化了后端的配置。

社交媒体:

最新资讯:

联系宝商科技