Nginx反向代理

代理一般用于分发负载给多个服务器,从不一样网站无缝显示内容,传递请求给能处理HTTP以外的应php

用服务器。html

1    传递请求给代理服务器

当Nginx代理请求时,它发送请求给一个特定的代理服务器,获取响应,并返回给客户端。它能够为缓存

HTTP服务器(其它Nginx服务器或任意其它服务器)代理请求或一个使用特殊协议的非HTTP服务器服务器

(能够运行一个使用特定框架开发的应用,例如PHP或Python)。支持协议包括FastCGI、uwsgi、网络

SCGI和memcached。app

为了传递请求给HTTP代理服务器,在location指令中指定proxy_pass指令:框架

location /some/path/ {memcached

    proxy_pass http://www.example.com/link/;性能

}优化

 该例子致使传递该location中的全部请求给指定地址的代理服务器。该地址能够指定为域名或IP

地址。地址也能够包括端口:

location ~ \.php {

    proxy_pass http://127.0.0.1:8000;

}

 

注意,上面的第一个例子,代理服务器的地址后面跟随一个URI /link/。若是指定URI地址,它替

换匹配location参数的请求URI部分。例如,请求URI /some/path/page.html将代理到http:

//www.example.com/link/page.html。若是地址没有指定URI,或不可能决定URI部分替

换,完整URI被传递(可能,修改)。

为了传递一个请求到非HTTP代理服务器,合适的**_pass指令应该被使用:

  • fastcgi_pass传递一个请求给FastGGI服务器。

  • uwsgi_pass传递一个请求给一个uwsgi服务器。

  • scgi_pass传递一个请求个SCGI服务器。

  • memcached_pass传递一个请求给memcached服务器。

注意,在这些例子中,指定地址的规则可能有些不一样。你也可能须要传递额外参数给服务器。

proxy_pass指令也能指向服务器组的名称。在这种状况下,请求根据指定的方法分发请求给组中

的服务器。

2    传递请求头

默认,Nginx在代理请求中从新定义两个头字段,“Host”和“Connection”,消除头字段的值

为空字符串。“Host”设置为$proxy_host变量,而“Connection”设置为close。

为了改变这些设置,以及修改其它头字段,使用proxy_set_header指令。该指令能指定在

location或更高级别。它也能指定在特定server上下文或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;

}

 3    配置缓存

默认,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;

}

 

若是缓存禁用,当从代理服务器接收响应时同步发送给客户端。这种尽快和客户端交互的行为是

可取的。

为了在特定location中禁用缓存,在location中设置proxy_buffering指令为off:

location /some/path/ {

    proxy_buffering off;

    proxy_pass http://localhost:8000;

}

 在这种状况下,Nginx只使用proxy_buffer_size配置缓存存储响应当前的一部分。

4    选择流出IP地址

若是你的代理服务器有多个网络接口,有时你可能须要选择特定源IP地址连接到代理服务器或

upstream。若是代理服务器在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/;

}

相关文章
相关标签/搜索