管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
2 P% @2 }$ ]$ l) g! o0 S1 \
9 Y( q2 K2 Q# F# e1 _) U @$ A本文中,我们介绍Nginx如何做端口转发,还有各种转发规则( C H' p! T* _# t; ^
P& V# c7 y# P" f( ~将域名转发到本地端口
6 W# R1 E$ \% {! y0 `" d首先介绍最常用的,将域名转发到本地另一个端口上4 Q# K4 |+ T8 E S( Y& W: m
- server{0 {6 d* |4 m, _/ U7 I2 @4 _! ~
- listen 80; {' f& v$ w( k$ F; p1 W6 Q% n
- server_name tomcat.cncml.com;5 Y. y! ]' f5 ~/ ?/ o
- index index.php index.html index.htm;
7 [; |5 b- v% w/ h# M7 i* ]# c
& a/ O: z$ Q6 P; X* v& t4 }1 U- location / {1 o) k5 e3 k! g% s" x. }, t
- proxy_pass http://127.0.0.1:8080; # 转发规则9 x- n; y7 X9 x
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
5 |1 W( |7 D! r7 J" r: D' i0 A4 E - proxy_set_header X-Real-IP $remote_addr;
1 D7 F' r9 W# J( i+ x - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
/ L' b; J0 a( }+ P$ a& K7 j - }
: d' G- D0 t9 |/ B% a - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
+ D: U; [' B6 j3 N2 e [
3 |% [: b9 F# ^& {7 f3 o3 w将域名转发到另一个域名
* l- `& g+ g& t) C5 R% ^7 m- server{
) Z8 b5 J- p5 P# k$ T& j$ j ] - listen 80;
5 O, V1 T3 V; D) m9 |5 X - server_name baidu.cncml.com;
1 u ]( {5 D# T3 g/ } - index index.php index.html index.htm;8 u" {" d, P6 |! ?' D* G# m
3 L) X' i% D7 H1 m- location / {, u9 H* h, W1 m* j3 q$ \
- proxy_pass http://www.baidu.com;9 p- R& S W9 d# h) m6 n
- proxy_set_header Host $proxy_host;) x$ l1 }: Q7 U1 [) |
- proxy_set_header X-Real-IP $remote_addr;9 F- `7 R* T$ c3 }4 S6 @4 v! B
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;0 {9 J5 q+ A3 S5 n9 I
- }
* D2 x! D% V/ {& M - }
复制代码 本地一个端口转发到另一个端口或另一个域名# G: k' X y- e/ k; B E5 S
- server{) k) G$ C v* h3 {6 e. @/ v( j
- listen 80;
: p: V+ V+ n( ?) C/ N: g; N; E - server_name 127.0.0.1; # 公网ip# u! R n& T- q+ N! Z% V+ ^4 Z
- index index.php index.html index.htm;
, u2 p% a7 X2 y2 }& X
3 `% a$ H4 i5 h2 J! v" Y- location / {
5 K/ w6 L1 z% J1 @' G" R0 q* ] - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
8 S. ?) k! U5 G/ g - proxy_set_header Host $proxy_host;% q- G6 v( a5 v0 o& U
- proxy_set_header X-Real-IP $remote_addr;
2 _, u( k7 _4 o* o - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
8 z& R5 A7 S: O( I+ n# d7 [- e - }
# N; ^9 f4 w+ b9 W" t: e7 `: O - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
" G) V8 _4 ]' j9 c/ R0 }
3 i% S& {, p2 x3 C+ ]9 v" v- J加 / 与不加 /8 L% ^5 ~2 s4 l# y! \
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径( I7 p7 G1 F# l2 \5 F4 E; b5 K
% }" r6 |: j- B* W) d/ k ^+ t
例如* a4 ?& x4 y' i W, ]+ W2 h
& V$ _3 }5 P) g& e% j/ T5 p加 /
8 P- k$ Q+ X0 w5 h& F2 {! F- server_name cncml.com
4 E% A$ M9 N) b- s5 u' N - location /data/ {* @$ d- D6 z1 w2 H0 t) S7 s1 k- g
- proxy_pass http://127.0.0.1/;
! ^& ^% v t( P. `/ W) d: W& Y - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
& C* }1 O# v. x0 V$ G) M1 f+ Q( ]3 U9 x
不加 /
& B( a: D, d2 d) `2 J; D3 Y; A- server_name cncml.com$ O+ s1 Z9 m6 c# [
- location /data/ {/ B+ x! \, q L7 e
- proxy_pass http://127.0.0.1;! {) E9 E. L$ G# ~/ p5 w
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html/ V6 n1 G" H; K
, V# q9 F6 g! H R
6 d; E5 e! {- m
|
|