When using nginx as a reverse proxy, you can simply forward the request directly to the next service as is. Setting a proxy_pass request will only replace the domain name, if you want to access different services based on different url suffixes, you need to go through the following method.
options 1: Add “/”
Shell
x
23
23
1
server {
2
listen 8000;
3
server_name abc.com;
4
access_log "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G" main;
5
6
location ^~/user/ {
7
proxy_set_header Host $host;
8
proxy_set_header X-Real-IP $remote_addr;
9
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
10
proxy_set_header X-NginX-Proxy true;
11
12
proxy_pass http://user/;
13
}
14
15
location ^~/order/ {
16
proxy_set_header Host $host;
17
proxy_set_header X-Real-IP $remote_addr;
18
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
19
proxy_set_header X-NginX-Proxy true;
20
21
proxy_pass http://order/;
22
}
23
}
^~/user/
matches requests prefixed with user
, and proxy_pass
ends with /
, then the path after /user/*
is spliced directly to the end, i.e. user
is removed.
options 2: rewrite
Shell
1
32
32
1
upstream user {
2
server localhost:8089 weight=5;
3
}
4
upstream order {
5
server localhost:8090 weight=5;
6
}
7
8
server {
9
listen 80;
10
server_name abc.com;
11
access_log "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G" main;
12
13
location ^~/user/ {
14
proxy_set_header Host $host;
15
proxy_set_header X-Real-IP $remote_addr;
16
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
17
proxy_set_header X-NginX-Proxy true;
18
19
rewrite ^/user/(.*)$ /$1 break;
20
proxy_pass http://user;
21
}
22
23
location ^~/order/ {
24
proxy_set_header Host $host;
25
proxy_set_header X-Real-IP $remote_addr;
26
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
27
proxy_set_header X-NginX-Proxy true;
28
29
rewrite ^/order/(.*)$ /$1 break;
30
proxy_pass http://order;
31
}
32
}
proxy_pass
does not have /
at the end, and rewrite
rewrites the url.