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. 尽简反向…