nginx常用代理配置,Nginx常用代理配置

因为作业类别要求,需求对web服务作nginx代理,在相连的尝尝进度中,简单总计了一晃宽广的nginx代理配置。

Nginx常用代理配置

因为业务系统须求,要求对web服务作nginx代理,在不停的品尝进程中,简单总括了一晃分布的nginx代理配置。

1. 最简反向代理配置

在http节点下,使用upstream配置服务地方,使用server的location配置代理映射。

upstream my_server {                                                         
    server 10.0.0.2:8080;                                                
    keepalive 2000;
}
server {
    listen       80;                                                         
    server_name  10.0.0.1;                                               
    client_max_body_size 1024M;

    location /my/ {
        proxy_pass http://my_server/;
        proxy_set_header Host $host:$server_port;
    }
}

经过该配置,访谈nginx地址http://10.0.0.1:80/my的请求会被转发到my\_server服务地址http://10.0.0.2:8080/。

亟需注意的是,借使依据如下配置:

upstream my_server {                                                         
    server 10.0.0.2:8080;                                                
    keepalive 2000;
}
server {
    listen       80;                                                         
    server_name  10.0.0.1;                                               
    client_max_body_size 1024M;

    location /my/ {
        proxy_pass http://my_server;
        proxy_set_header Host $host:$server_port;
    }
}

那么,访问nginx地址http://10.0.0.1:80/my的请求会被转发到my\_server服务地址http://10.0.0.2:8080/**my**。这是因为proxy\_pass参数中如果不包含url的路径,则会将location的pattern识别的路径作为绝对路径。

1. 最简反向代理配置

在http节点下,使用upstream配置服务地点,使用server的location配置代理映射。

upstream my_server {                                                         
    server 10.0.0.2:8080;                                                
    keepalive 2000;
}
server {
    listen       80;                                                         
    server_name  10.0.0.1;                                               
    client_max_body_size 1024M;

    location /my/ {
        proxy_pass http://my_server/;
        proxy_set_header Host $host:$server_port;
    }
}

通过该配置,访谈nginx地址http://10.0.0.1:80/my的请求会被转发到my\_server服务地址http://10.0.0.2:8080/。

急需小心的是,假如依据如下配置:

upstream my_server {                                                         
    server 10.0.0.2:8080;                                                
    keepalive 2000;
}
server {
    listen       80;                                                         
    server_name  10.0.0.1;                                               
    client_max_body_size 1024M;

    location /my/ {
        proxy_pass http://my_server;
        proxy_set_header Host $host:$server_port;
    }
}

那么,访问nginx地址http://10.0.0.1:80/my的请求会被转发到my\_server服务地址http://10.0.0.2:8080/my。这是因为proxy\_pass参数中如果不包含url的路径,则会将location的pattern识别的路径作为绝对路径。

2. 重定向报文代理

纵然配置了nginx代理,当服务重临重定向报文时(http
code为301或302),会将重定向的指标url地址放入http
response报文的header的location字段内。客户浏览器收到重定向报文时,会深入分析出该字段并作跳转。此时新的伸手报文将直接发送给服务地点,而非nginx地址。为了能让nginx拦截此类伏乞,必需修改重定向报文的location消息。

location /my/ {
    proxy_pass http://my_server;
    proxy_set_header Host $host:$server_port;

    proxy_redirect / /my/;
}

使用proxy_redirect能够修改重定向报文的location字段,例子中会将全数的根路线下的url代理到nginx的/my/路线下再次回到给顾客。比方服务重返的重定向报文的location原始值为/login,那么通过nginx代理后,客商抽取的报文的location字段为/my/login。此时,浏览器将会跳转到nginx的/my/login地址实行采访。

急需注意的是,服务重临的重定向报文的location字段不常会填写绝对路线(满含服务的ip/域名和端口),有的时候候会填写相对路线,此时内需基于实际意况进行甄别。

location /my/ {
    proxy_pass http://my_server;
    proxy_set_header Host $host:$server_port;

    proxy_redirect http://my_server/ http://$host:$server_port/my/;
}

上述配置就是将my_server服务的根路线下的有着路径代理到nginx地址的/my/路径下。当nginx配置只有五个server时,http://$host:$server_port前缀可以轻松。

2. 重定向报文代理

正是配置了nginx代理,当服务重回重定向报文时(http
code为301或302),会将重定向的靶子url地址归入http
response报文的header的location字段内。顾客浏览器收到重定向报文时,会分析出该字段并作跳转。此时新的乞请报文将直接发送给服务地点,而非nginx地址。为了能让nginx拦截此类要求,必得修改重定向报文的location音信。

location /my/ {
    proxy_pass http://my_server;
    proxy_set_header Host $host:$server_port;

    proxy_redirect / /my/;
}

使用proxy_redirect可以修改重定向报文的location字段,例子中会将全体的根路线下的url代理到nginx的/my/路径下重临给顾客。比方服务再次来到的重定向报文的location原始值为/login,那么通过nginx代理后,顾客收到的报文的location字段为/my/login。此时,浏览器将会跳转到nginx的/my/login地址举行访问。

亟需注意的是,服务重回的重定向报文的location字段不经常会填写相对路线(包涵服务的ip/域名和端口),一时候会填写相对路线,此时亟待基于实际情形张开辨认。

location /my/ {
    proxy_pass http://my_server;
    proxy_set_header Host $host:$server_port;

    proxy_redirect http://my_server/ http://$host:$server_port/my/;
}

上述配置正是将my_server服务的根路线下的富有路径代理到nginx地址的/my/路线下。当nginx配置唯有三个server时,http://$host:$server_port前缀能够简简单单。

3. 报文数据替换

动用nginx代理最牛(dan)逼(sui)的情况正是http响应报文内写死了服务地方或web绝对路线。写死服务地点的情形相当少见,但也临时存在。最讨厌的是写死了web相对路线,越发是相对路线都并未有国有前缀。举例来讲:

诚如的web页面会蕴藏如下类似路线:

  • /public:用于静态页面能源,如js脚本/public/js,样式表/public/css,图片/public/img等。
  • /static:和/public类似。
  • /api:用于后台服务API接口。
  • /login:用于登陆验证。
  • 其他。

对此这么的服务,也许的代办配置如下:

location /my/ {
    proxy_pass http://my_server/;
    proxy_set_header Host $host:$server_port;

    proxy_redirect / /my/;
}
location /login/ {
    proxy_pass http://my_server/public;
    proxy_set_header Host $host:$server_port;
}
location /public/ {
    proxy_pass http://my_server/public;
    proxy_set_header Host $host:$server_port;
}
location /api/ {
    proxy_pass http://my_server/api;
    proxy_set_header Host $host:$server_port;
}

出于web页面或静态财富内写死了就像是的相对路线,那么对于客户来讲,通过页面内的链接进行跳转时,都会呈请到nginx服务对应的路线上。一旦存在另三个劳动也蕴藏类似的门路,也亟需nginx进行代理,那么争辨就应际而生了:做客nginx的同一个渠道下的伏乞毕竟转载给哪二个劳动?

要解决这些标题,必需在顾客接受报文前,将报文的数目中隐含的相对路线都增加统一的前缀,如/my/public,/my/api,/my/login,那样nginx代理配置则足以简化为:

location /my/ {
    proxy_pass http://my_server/;
    proxy_set_header Host $host:$server_port;

    proxy_redirect / /my/;
}
location /other/ {
    proxy_pass http://other_server/;
    proxy_set_header Host $host:$server_port;

    proxy_redirect / /other/;
}

nginx的ngx_http_sub_module模块提供了类似的报文数据替换效用,该模块暗中同意不会设置,须要在编写翻译nginx时增多–with-http_sub_module参数,大概间接下载nginx的rpm包。

使用sub_filter对数码包进行沟通的语法如下:

location /my/ {
    proxy_pass http://my_server/;
    proxy_set_header Host $host:$server_port;

    sub_filter 'href="/' 'href="/my/';
    sub_filter 'src="/' 'src="/my/';
    sub_filter_types text/html;
    sub_filter_once  off;
}

上述配置会将/my/下的有着响应报文内容的href=”/替换为href=”/my,以及src=”/替换为src=”/my,即为全部的相对路线增加公共前缀。

留意,如果供给布置八个sub_filter,必得有限援助nginx是1.9.4版本之上的。

3. 报文数据替换

利用nginx代理最牛(dan)逼(sui)的情事正是http响应报文内写死了劳务地点或web相对路线。写死服务地点的事态非常少见,但也间或存在。最困难的是写死了web相对路线,尤其是相对路线都未曾国有前缀。譬释迦牟尼佛讲:

常常的web页面会满含如下类似路线:

  • /public:用于静态页面财富,如js脚本/public/js,样式表/public/css,图片/public/img等。
  • /static:和/public类似。
  • /api:用于后台服务API接口。
  • /login:用于登陆验证。
  • 其他。

对此如此的劳务,也许的代办配置如下:

location /my/ {
    proxy_pass http://my_server/;
    proxy_set_header Host $host:$server_port;

    proxy_redirect / /my/;
}
location /login/ {
    proxy_pass http://my_server/public;
    proxy_set_header Host $host:$server_port;
}
location /public/ {
    proxy_pass http://my_server/public;
    proxy_set_header Host $host:$server_port;
}
location /api/ {
    proxy_pass http://my_server/api;
    proxy_set_header Host $host:$server_port;
}

出于web页面或静态能源内写死了看似的相对路线,那么对于客商来讲,通过页面内的链接进行跳转时,都会呈请到nginx服务对应的门路上。一旦存在另一个劳务也暗含类似的不二等秘书籍,也要求nginx举办代理,那么冲突就涌出了:访谈nginx的同三个路径下的呼吁毕竟转载给哪贰个劳务?

要化解这几个标题,必得在客户收到报文前,将报文的多少中包涵的绝对路线都增进统一的前缀,如/my/public,/my/api,/my/login,那样nginx代理配置则足以简化为:

location /my/ {
    proxy_pass http://my_server/;
    proxy_set_header Host $host:$server_port;

    proxy_redirect / /my/;
}
location /other/ {
    proxy_pass http://other_server/;
    proxy_set_header Host $host:$server_port;

    proxy_redirect / /other/;
}

nginx的ngx_http_sub_module模块提供了看似的报文数据替换来效,该模块默许不会安装,须要在编写翻译nginx时增添–with-http_sub_module参数,也许直接下载nginx的rpm包。

使用sub_filter对数码包进行替换的语法如下:

location /my/ {
    proxy_pass http://my_server/;
    proxy_set_header Host $host:$server_port;

    sub_filter 'href="/' 'href="/my/';
    sub_filter 'src="/' 'src="/my/';
    sub_filter_types text/html;
    sub_filter_once  off;
}

上述配置会将/my/下的享有响应报文内容的href=”/替换为href=”/my,以及src=”/替换为src=”/my,即为全数的相对路线增添公共前缀。

瞩目,要是急需配置五个sub_filter,必须有限支撑nginx是1.9.4版本之上的。

4. 总结

尽管如此,sub_filter也不可能消除全体题目。如今盛行的js框架都会有机动渲染url的功力,也正是说,相当多相对路线并不是写死在静态页面内,也是由js代码框架动态变化的,面临这么的事态,sub_filter也是力不可能及了。对于这么的情景,小编不得不由衷地告诫,如故安静的改代码吧!

4. 总结

固然如此,sub_filter也不能够一蹴而就全体分外态。近年来风行的js框架都会有机动渲染url的效率,也正是说,相当多相对路线并不是写死在静态页面内,也是由js代码框架动态变化的,面前遭逢那样的事态,sub_filter也是敬谢不敏了。对于这么的情景,小编不得不由衷地告诫,还是安静的改代码吧!

越多Nginx相关学科见以下内容:

CentOS 6.2实战计划Nginx+MySQL+PHP

使用Nginx搭建WEB服务器

搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全经过

CentOS 6.3下Nginx质量调优

CentOS 6.3下配置Nginx加载ngx_pagespeed模块

CentOS 6.4安装配备Nginx+Pcre+php-fpm

Nginx安装配备利用详细笔记

Nginx日志过滤 使用ngx_log_if不记录特定日志

Nginx 的详尽介绍:请点这里
Nginx 的下载地址:请点这里

正文永世更新链接地址:

http://www.bkjia.com/Linux/1145335.htmlwww.bkjia.comtruehttp://www.bkjia.com/Linux/1145335.htmlTechArticleNginx常用代理配置
因为专门的学业连串须求,供给对web服务作nginx代理,在时时到处的尝试进度中,轻便计算了一下广大的nginx代理配置。

  1. 最简反向…