南通住房和城乡建设部网站首页,安徽公司网站建设,网站开发技术工作室,长沙网站排名优化代理通常用于在多个服务器之间分配负载#xff0c;无缝显示来自不同网站的内容#xff0c;或通过 HTTP 以外的协议将处理请求传递给应用程序服务器。
将请求传递到代理服务器
当 NGINX 代理请求时#xff0c;它会将请求发送到指定的代理服务器#xff0c;获取响应#x…代理通常用于在多个服务器之间分配负载无缝显示来自不同网站的内容或通过 HTTP 以外的协议将处理请求传递给应用程序服务器。
将请求传递到代理服务器
当 NGINX 代理请求时它会将请求发送到指定的代理服务器获取响应并将其发送回客户端。可以使用指定的协议将请求代理到HTTP服务器另一个NGINX服务器或任何其他服务器或非HTTP服务器可以运行使用特定框架开发的应用程序例如PHP或Python。支持的协议包括 FastCGI、uwsgi、SCGI 和 memcached。
若要将请求传递给 HTTP 代理服务器请在位置内指定 proxy_pass 指令。例如
location /some/path/ {proxy_pass http://www.example.com/link/;
}此示例配置将导致将在此location处理的所有请求传递到指定地址的代理服务器。此地址可以指定为域名或 IP 地址。该地址还可能包括一个端口.
location ~ \.php {proxy_pass http://127.0.0.1:8000;
}请注意在上面的第一个示例中代理服务器的地址后跟一个 URI。 /link/ 如果 URI 与地址一起指定它将替换请求 URI 中与 location 参数匹配的部分。例如此处带有 /some/path/page.html URI 的请求将被代理到 http://www.example.com/link/page.html 。如果指定地址时没有 URI或者无法确定要替换的 URI 部分则会传递完整的请求 URI可能已修改。
要将请求传递到非 HTTP 代理服务器应使用适当的 **_pass 指令:
fastcgi_pass将请求传递给 FastCGI 服务器uwsgi_pass将请求传递给 uWSGI 服务器scgi_pass将请求传递给 SCGI 服务器memcached_pass将请求传递给 memcached 服务器
请注意在这些情况下指定地址的规则可能会有所不同。您可能还需要将其他参数传递给服务器有关详细信息请参阅参考文档。
proxy_pass 指令还可以指向一组命名的服务器。在这种情况下请求将按照指定的方法分布在组中的服务器之间。
案例1使用http://localhost:8085的IP 加端口代理访问百度配置如下 访问效果如下 案例2使用http://localhost:8085/image的IP 加端口代理访问http://127.0.0.1:8084/image下的文件目录列表配置如下 访问效果如下 当访问http://localhost:8085/image时nginx 会自动代理访问http://127.0.1.1:8084 并且会将/image URI 拼接在路径后面,完整路径就是http://127.0.0.1:8084\image. 传递请求标头
默认情况下NGINX 重新定义了代理请求中的两个标头字段即 Host 和 Connection并删除了值为空字符串的标头字段。Host设置为变量 $proxy_host Connection设置为 close 。
若要更改这些设置以及修改其他标头字段请使用 proxy_set_header 指令。可以在某个位置或更高位置指定此指令。它也可以在特定的服务器上下文或 http 块中指定。例如
location /some/path/ {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_pass http://localhost:8000;
}在此配置中Host字段设置为$host变量 若要防止将标头字段传递到代理服务器请将其设置为空字符串如下所示
location /some/path/ {proxy_set_header Accept-Encoding ;proxy_pass http://localhost:8000;
}配置缓冲区
默认情况下NGINX 会缓冲来自代理服务器的响应。响应存储在内部缓冲区中在收到整个响应之前不会发送到客户端。缓冲有助于优化慢速客户端的性能如果响应从 NGINX 同步传递到客户端这可能会浪费代理服务器时间。但是启用缓冲后NGINX 允许代理服务器快速处理响应而 NGINX 将响应存储与客户端下载响应所需的时间一样长。
负责启用和禁用缓冲的指令是 proxy_buffering。默认情况下它设置为并 on 启用缓冲。
proxy_buffers 指令控制为请求分配的缓冲区的大小和数量。来自代理服务器的响应的第一部分存储在单独的缓冲区中其大小由 proxy_buffer_size 指令设置。此部分通常包含相对较小的响应标头并且可以小于响应其余部分的缓冲区。
在以下示例中将增加默认缓冲区数并且响应第一部分的缓冲区大小小于默认值。
location /some/path/ {proxy_buffers 16 4k;proxy_buffer_size 2k;proxy_pass http://localhost:8000;
}如果禁用缓冲则在客户端从代理服务器接收响应时响应将同步发送到客户端。对于需要尽快开始接收响应的快速交互式客户端此行为可能是可取的。
若要在特定位置禁用缓冲请将 proxy_buffering 指令放在带有参数 off 的位置如下所示
location /some/path/ {proxy_buffering off;proxy_pass http://localhost:8000;
}在这种情况下NGINX 仅使用 proxy_buffer_size 配置的缓冲区来存储响应的当前部分。 选择传入 IP 地址
如果代理服务器具有多个网络接口则有时可能需要选择特定的源 IP 地址来连接到代理服务器或上游。如果将 NGINX 后面的代理服务器配置为接受来自特定 IP 网络或 IP 地址范围的连接这可能很有用。
指定所需网络接口的 proxy_bind 指令和 IP 地址
location /app1/ {proxy_bind 127.0.0.1;proxy_pass http://example.com/app1/;
}location /app2/ {proxy_bind 127.0.0.2;proxy_pass http://example.com/app2/;
}也可以使用变量指定 IP 地址。例如该 $server_addr 变量传递接受请求的网络接口的 IP 地址
location /app3/ {proxy_bind $server_addr;proxy_pass http://example.com/app3/;
}案例1:限制只能192.168.0.111 IP可进行访问到http://localhost:9090/时可以使用proxy_bind指令进行限制。 浏览器访问效果如下