Tominysun

前言

因为业务需要,我研究了一下nginx的反向代理。
过程中遇到一些坑,在此记录下,以备检索。

例子

目录相关问题

01

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/

02

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;
    }
}
需要注意的是,如果按照02配置:
那么,访问nginx地址http://10.0.0.1:80/my的请求会被转发到my_server服务地址http://10.0.0.2:8080/my这是因为proxy_pass参数中如果不包含url的路径,则会将location的pattern识别的路径作为绝对路径。

总结:

Nginx配置proxy_pass转发的 / 路径问题

在nginx中配置proxy_pass时,如果是按照^~匹配路径时,要注意 proxy_pass 后的 url 最后的 / :

当加上了 /,相当于绝对根路径,则 nginx 不会把 location 中匹配的路径部分代理走
如果没有 /,相当于相对路径,则会把匹配的路径部分也给代理走

内容替换相关问题

nginx 默认进行text/html类型的内容替换。

以下是相关函数的摘录:

2.1 sub_filter指令: sub_filter string(原字符串) replacement(用于替换的字符串);

用于设置需要使用说明字符串替换说明字符串.string是要被替换的字符串,replacement是 新的字符串,它里面可以带变量。

2.2 sub_filter_last_modified指令: sub_filter_last_modified on | off;

用于设置网页内替换后是否修改 可在nginx.confhttp, server, location三个位置配置使 用,默认值是off

2.3 sub_filter_once指令:sub_filter_once on | off;

用于设置字符串替换次数,默认只替换一次。如果是on,默认只替换第一次匹配到的到字 符,如果是off,那么所有匹配到的字符都会被替换;

2.4 sub_filter_types指令:sub_filter_types *

用于指定需要被替换的MIME类型,默认为“text/html”,如果制定为*,那么所有的;

说明:以上指令可在nginx.confhttp, server, location三个位置配置使用;

链接

  1. Nginx常用反向代理配置规则 - 阿里云开发者社区
  2. 使用Nginx反向代理和内容替换模块实现网页内容动态替换功能

添加新评论