返回

Nginx 后端代理配置详解

前端

Nginx 代理:从入门到精通

Nginx 简介

Nginx(读作“engine-x”)是一款开源的反向代理服务器、负载均衡器、HTTP 缓存和 Web 服务器。它以其高性能、稳定性和丰富的特性而闻名,广泛应用于互联网领域。

Nginx 代理配置

基本配置

在 Nginx 配置文件中,可以使用 location 指令配置代理。基本语法如下:

location / {
  proxy_pass http://backend_server:port;
}

其中,/ 表示要代理的请求路径,proxy_pass 指令用于指定后端服务器的地址和端口。

高级配置

Nginx 还提供了许多高级代理配置选项,包括:

  • 负载均衡: 使用 upstream 指令配置多个后端服务器,实现负载均衡功能。
  • 缓存: 使用 proxy_cache 指令配置缓存,以提高网站性能。
  • 安全: 使用 proxy_set_headerproxy_hide_header 指令修改请求和响应头,以提高安全性。
  • 性能优化: 使用 proxy_bufferingproxy_connect_timeoutproxy_send_timeout 等指令优化代理性能。

代码示例:

将请求 /api/* 代理到后端服务器 example.com:8080,并设置 60 秒缓存:

location /api/ {
  proxy_pass http://example.com:8080;
  proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=600s;
  proxy_cache_key "$scheme$request_method$host$request_uri";
  proxy_cache_valid 200 302 900s;
  proxy_cache_valid 404 0s;
  proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
}

常见问题解答

  1. 代理到后端时,不认识代理标记: 后端服务器可能没有正确配置代理标记。对于 PHP 应用,在 .htaccess 文件中添加以下代码:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-For} !^$
RewriteRule .* - [E=HTTP_X_FORWARDED_FOR:%{HTTP:X_Forwarded-For}]
  1. 前端部署后,刷新404问题: Nginx 配置中可能没有正确配置缓存。添加以下代码:
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=600s;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 900s;
proxy_cache_valid 404 0s;
proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
  1. 如何实现负载均衡? 使用 upstream 指令配置多个后端服务器,例如:
upstream backend {
  server example1.com:8080;
  server example2.com:8080;
  server example3.com:8080;
}

然后在 location 中使用:

proxy_pass http://backend;
  1. 如何提高代理性能? 使用 proxy_bufferingproxy_connect_timeoutproxy_send_timeout 等指令优化代理性能。例如:
proxy_buffering off;
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
  1. 如何设置缓存? 使用 proxy_cache 指令配置缓存,例如:
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=600s;
proxy_cache_key "$scheme$request_method$host$request_uri";

结语

Nginx 代理配置非常灵活,可以满足各种需求。本文介绍了从基本配置到高级配置的各个方面。通过掌握这些知识,您可以轻松地为您的应用程序或网站设置高效且可靠的代理服务。