您的位置:首页 > 运维架构 > 反向代理

Nginx反向代理(基于目录动静分离、不同浏览器类型不同代理、基于扩展名的不同代理)

2015-10-14 09:06 876 查看
proxy_pass
http_proxy_module

proxy_pass指令输入ngx_http_proxy_module模块,此模块可以将请求转发到另外一台服务器

官网:http://nginx.org/en/docs/http/ngx_http_proxy_module.html

===============================================

location /some/path/ {
proxy_pass http://127.0.0.1; }

===============================================
##############################################################################
##############################################################################
##############################################################################
##############################################################################
Nginx 反向代理简单配置
## Apache backend for www.quancha.cn ##
upstream apachephp {
server ip:8080; #Apache
}

## Start www.quancha.cn ##
server {
listen 80;
server_name www.quancha.cn;

access_log logs/quancha.access.log main;
error_log logs/quancha.error.log;
root html;
index index.html index.htm index.php;

## send request back to apache ##
location / {
proxy_pass http://apachephp;
#Proxy Settings
proxy_redirect off;
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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
## End www.quancha.cn ##

http proxy模块参数

Nginx的代理功能是通过http proxy 模块来实现的,默认在安装Nginx时已经安装了,http proxy 模块,因此可以直接使用http proxy模块

proxy_set_header
设置由后端的服务器获得用户的主机名或者真实IP地址,以及代理者的真实IP地址

client_body_buffer_size
用于指定客户端请求主体缓存区大小,可以理解为先保存到本地在传给用户

proxy_connect_timeout
表示与后端服务器连接的超时时间,即发起握手等待响应的超时时间

proxy_send_timeout
表示后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,Nginx将断开这个连接

proxy_read_timeout
设置Nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,Nginx等待后端服务器的响应时间,其实是Nginx

proxy_buffer_size
设置缓冲区大小,默认,该缓冲区的大小等于指令 proxy_buffer设置的大小

proxy_buffer
设置缓冲区的数量和大小,nginx从代理的后端服务器获取的响应信息,会放置到缓冲区

proxy_busy_buffers_size
用于设置系统很忙时可以使用的proxy_buffers大小,官方推荐大小是 proxy_buffer*2

proxy_temp_file_weite_size
指定proxy缓存临时文件的大小

proxy_pass http://web_real_server; 用于指定反向代理的服务器池
proxy_set_header Host $host;
当后端web服务器上也配置有多个虚拟主机时,需要用改Header来区分反向代理那个主机名
proxy_set_header X-Forwarded-For $remote_addr;
如果后端Web服务器上的程序需要获取用户IP,从该Header头中获取
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
这个参数是用来定义故障转移策略的,当后端服务器节点返回500/502/503和执行超时等错误时,自动将请求转到upstream负载均衡中的另外一台服务器,实现故障转移

###########################################################################################
###########################################################################################
###########################################################################################
简单的代理服务配置文件
#blog lb by oldboy at 201303
upstream blog_real_servers {
#ip_hash;
server 10.0.0.6:80 weight=15;
server 10.0.0.8:80 weight=5;
server 10.0.0.19:82 weight=15;
}
server {
listen 80;
server_name blog.lvnian.org;
location / {
proxy_pass http://blog_real_servers; include extra/proxy.conf;
}
}

#当客户端访问blog.lvnian.org域名的请求过来,Nginx反向代理会根据一定的调度算法代理这个请求,去找后端blog_real_servers地址池的RS服务器。后端的RS处理完这个请求后,把处理的结果返回给Nginx代理服务器。Nginx代理服务器再把处理的结果防护给客户端
###########################################################################################
###########################################################################################
###########################################################################################

基于目录的动静分离反向代理配置
upstream static_pools {
server 10.0.0.8:80 weight=5;
}
upstream dynamic_pools {
server 10.0.0.6:80 weight=5;
}

server {
listen 80;
server_name blog.lvnian.org;
location / {
proxy_pass http://dynamic_pools; include extra/proxy.conf;
}

location /static/ {
proxy_pass http://static_pools; include extra/proxy.conf;
}

location /dynamic/ {
proxy_pass http://dynamic_pools; }
access_log off;
}

#当客户端请求的是blog.lvnian.org/static/xxxx.那么反向代理服务器会找 static_pools地址池中的RS。代理这个请求去请求找到的RS服务。
如果客户端的请求时blog.lvnian.org/dynamic/xxxx,那么反向代理服务器会找 dynamic_pools地址池中的RS。 代理这个请求去请求找到的RS服务。
如果都是上面的请求,默认情况是找dynamic_pools地址池中的RS。代理这个请求去请求找到的RS服务。

###########################################################################################
###########################################################################################
###########################################################################################
基于浏览器类型分离

upstream static_pools {
server 10.0.0.6:80 weight=5;
}
upstream dynamic_pools {
server 10.0.0.8:80 weight=5;
}

server {
listen 80;
server_name blog.lvnian.org;
location / {
if ($http_user_agent ~* "android")
{
proxy_pass http://dynamic_pools; }
if ($http_user_agent ~* "iphone")
{
proxy_pass http://static_pools; }
proxy_pass http://dynamic_pools; }

access_log off;
}
##当客户端浏览器是android,那么反向代理服务器会找 dynamic_pools地址池中的RS。 代理这个请求去请求找到的RS服务。
当客户端是iphone那么反向代理服务器会找 static_pools地址池中的RS。代理这个请求去请求找到的RS服务。
如果都是上面的请求,默认情况是找dynamic_pools地址池中的RS。代理这个请求去请求找到的RS服务。

###########################################################################################
###########################################################################################
###########################################################################################
基于扩展名的转发
upstream static_pools {
server 10.0.0.6:80 weight=5;
}
upstream dynamic_pools {
server 10.0.0.8:80 weight=5;
}

server {
listen 80;
server_name blog.lvnian.org;
location / {
proxy_pass http://dynamic_pools; include extra/proxy.conf;
}
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
proxy_pass http://static_pools; include proxy.conf;
}
location ~ .*.(php|php3|php5)$ {
proxy_pass http://dynamic_pools; include proxy.conf;
}

access_log off;
}

##如果是扩展名是.(gif|jpg|jpeg|png|bmp|swf|css|js),那么就代理转发到static_pools地址池下的RS。
如果扩展是.(php|php3|php5),那就代理转发到dynamic_pools地址池下的RS.
默认情况下,转发到dynamic_pools地址池下的RS.

###########################################################################################
###########################################################################################
###########################################################################################
根据不同的浏览器访问设置:
if ($http_user_agent ~* "Firefox|MSIE")
{
return 403;
}
###########################################################################################
###########################################################################################
###########################################################################################

防止爬虫1
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot| \
Googlebot-Mobile|Googlebot-Image|Mediapartners-Google| \
Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China| \
YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot| \
ia_archiver|Tomato Bot")
{
return 403;
}
防止爬虫2
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")
{
return 403;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: