亚洲必赢手机入口Nginx常用代理配置,nginx常用代理配置

by admin on 2018年12月17日

因业务系统要求,需要针对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. 极端简反向…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图