管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发; n% |/ G+ A$ F7 D$ k
, J- h" i6 ~: O8 E& F本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
! V9 x: o! ], w$ d6 i* `; |$ d% Y# S: z" u( y
将域名转发到本地端口
, |7 J. V* ~5 P; f$ Q$ H首先介绍最常用的,将域名转发到本地另一个端口上
. K) A6 U, ?; A* M1 _; c- server{, ~$ c, [+ }3 n; f0 M" z
- listen 80;
0 p2 D) _: K6 }% ]/ [ - server_name tomcat.cncml.com;) j: T( W; p# n+ {6 G" o. {
- index index.php index.html index.htm;
/ w9 b6 s- B! ?% |9 n. D! o" h6 N/ m: G
: I" Y% `& x3 R/ c* z/ }- location / {, g( K, A! x/ \6 v; V7 ?
- proxy_pass http://127.0.0.1:8080; # 转发规则9 a" W$ i( @2 C, c
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求7 S: l( L' n) p( Q
- proxy_set_header X-Real-IP $remote_addr;1 f0 ?1 W$ M" a& A9 t
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;$ ?. ]* e+ w' @$ F
- }
6 w$ w: s4 p; K - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
2 B* s g. N- N. t8 A3 C5 m0 L; D( H6 C, s
将域名转发到另一个域名
0 a. k1 A/ {: g: u1 M- server{; U4 H0 G, K. a
- listen 80;3 S9 z2 U, L! R; F+ t( X
- server_name baidu.cncml.com;
( d( O7 m) ?( @1 N/ K: s - index index.php index.html index.htm;
, \0 s; v. \$ [" ? - $ w' f3 ~9 k+ s: O
- location / {& m7 p R9 X# c- j2 Y* n2 f
- proxy_pass http://www.baidu.com;
: O# H, f/ Z B3 u5 E - proxy_set_header Host $proxy_host;
4 K1 ^7 l( v4 v, l5 J! _ - proxy_set_header X-Real-IP $remote_addr;
( x# M) r, J/ h - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
( y G/ C7 v0 y) o8 G" a, p1 @" m - }
. s8 _2 L4 v3 P! a - }
复制代码 本地一个端口转发到另一个端口或另一个域名4 y, q4 U# d. H5 h R3 _& C
- server{
6 G+ ], l4 q* l - listen 80;
; }7 o4 Q$ m# M9 L- ]8 [ - server_name 127.0.0.1; # 公网ip
/ p/ U8 T) X5 J& @ - index index.php index.html index.htm;, _2 r$ T8 L2 p
- 3 m& ?. O. i5 C$ W- w$ o+ c* x) b
- location / {
* e4 K; @7 p! E F7 Q0 J. n - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
, s2 U! Y$ X, A9 q5 H - proxy_set_header Host $proxy_host;3 M$ F1 `& l% W; ~) k. O- x* {
- proxy_set_header X-Real-IP $remote_addr; s* M1 B# m: R3 }! }
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
0 n- c' E [! V0 P; _& Y - }. ^1 J s: y5 x* G- J x
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
, M6 D- [- f, v7 Z9 S7 k/ |2 ~( |5 |$ G+ K% Z
加 / 与不加 /* Z: Z, ?% p' H
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径; z. Q" O6 O* Y
8 H* e, s# F) w4 \( M
例如 _9 L( T2 @" U0 _0 ]% J; | c( N. s; ]
/ a9 ^5 o* p% i
加 /' M2 K- o. g/ v0 ^" p1 D( A
- server_name cncml.com- @7 r* ^" L8 l d* @
- location /data/ {
& b c Q4 ~' G - proxy_pass http://127.0.0.1/;
4 G5 k9 |3 p$ D, P! O - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html- [/ w5 F; K7 x
3 B5 d2 \8 a& P. u& G' ~不加 /( X1 ?' u7 s, S% l4 J# b
- server_name cncml.com
|8 @- T. \9 H" Y( l) x - location /data/ {2 A0 r2 |; t) u( N7 X* B
- proxy_pass http://127.0.0.1;
* H" e G! W, p* ] - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html) R; E0 z- n1 ]9 }" V' c* ~! G# \
: V7 u& a8 W* |0 V+ U+ I' d% ~4 i3 {6 ]0 j2 i! s) _( ]4 P
|
|