管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
( W; |! D, N; k& ]+ U! b$ y& `( ~7 z8 k7 u0 i. S" [) C6 F: v
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则0 A4 F" c5 _! |6 Y: W; N
i( V$ ^7 o; e' w将域名转发到本地端口
% X: C' F7 R* K0 k% f3 ~+ h首先介绍最常用的,将域名转发到本地另一个端口上1 E; E8 d# ^+ y3 p, O4 ?5 P0 z4 h2 F
- server{
) H1 D2 o$ C0 e7 E1 r8 M* [7 k - listen 80;
8 |3 E d [8 G; y, f: x - server_name tomcat.cncml.com;8 b7 o/ K5 R6 w r3 e4 R: c
- index index.php index.html index.htm;
$ l$ {/ w( Y0 r - + x6 X# N/ e* G$ p) H/ `* y4 \) B
- location / {
9 r1 r o0 r- @ - proxy_pass http://127.0.0.1:8080; # 转发规则
7 o2 D6 ^/ b" D7 G - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求4 C6 c- G1 m4 D
- proxy_set_header X-Real-IP $remote_addr;6 ?4 ~/ M6 _4 P
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
/ G) \$ B$ U# k1 o1 S" Z - }
5 @# y' d2 c, I- S1 L2 w - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
9 n# z! V/ p$ L: I/ f$ u, ?% _" e6 {( l$ T( P6 G
将域名转发到另一个域名1 \4 l0 z8 {) L/ I
- server{
# y5 ?' D8 ?0 X$ n: Y - listen 80;
( F9 H! s: |( J' U - server_name baidu.cncml.com;& m! h2 A5 j5 L9 T
- index index.php index.html index.htm;
: b0 J% L2 _# A; @( o9 A- A+ S - 9 F6 _3 J* o) B- E/ e# \
- location / {1 ~2 V4 h5 |+ A; j3 q! c3 _1 U
- proxy_pass http://www.baidu.com;8 H9 t. W& ?1 W6 R! C
- proxy_set_header Host $proxy_host;( ?0 i9 s x* P. E; m3 C
- proxy_set_header X-Real-IP $remote_addr;& Y! s. n9 w! K4 _
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;% V' H& p( \. l# s8 g. F" T/ n
- }
) D" U* e# ?/ P4 P- ?/ b% v+ R( h/ B- @ - }
复制代码 本地一个端口转发到另一个端口或另一个域名+ t) A3 I& y6 N) X7 M0 b1 B# s, ~: V
- server{+ }& J/ {0 ]0 a9 r; @' v8 N( b
- listen 80;
# h6 {6 t% B( w; H2 ^$ B* g - server_name 127.0.0.1; # 公网ip) \- B5 |% E& ]+ N# o6 v, D0 j
- index index.php index.html index.htm;
- M9 u6 c+ }9 N' o# t* ]6 X | - + C7 Y* s2 S8 H: v, p
- location / {" ^1 B: i0 _, o3 u
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
5 V$ z+ E L0 L1 F2 i! ~9 l, i) [0 n - proxy_set_header Host $proxy_host;8 Y% n1 F" U. N. A4 F
- proxy_set_header X-Real-IP $remote_addr;
3 C: I/ ~7 x/ ], ` - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;! ~8 U1 K) B5 O+ S' c) w
- }( D6 _ I/ a7 @! k, Z8 D
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com2 k% u2 R L& N& O% W
) Y$ g: {! Y9 {# \/ q" R/ e
加 / 与不加 /
7 V$ P$ O7 X& m在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
: _+ E6 K& N# L. J! W# k$ S& t
例如
8 x# j% P9 O: t+ ?: u
6 D% i1 k- b' t4 k加 /
% h: |+ d2 Q; h2 @- server_name cncml.com6 ~/ m/ J2 V: f' E
- location /data/ {
9 l6 @ R+ z# c - proxy_pass http://127.0.0.1/;
8 X- x4 ^/ \# M, t; q5 O7 K - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
( e& y, N( k" Q- Q# k# _' u" s2 N. } q- \# c3 R6 w
不加 /
2 L! x# J" J' B% Y9 u3 O- server_name cncml.com
/ z D+ m4 t+ W C9 V } - location /data/ {
& G! P2 D& i X9 d8 Z7 Q - proxy_pass http://127.0.0.1;) D% T+ S; u- d6 x" P) K# e
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html" a5 O3 [. f! X: I$ _- j2 H2 ~
4 e! D' H: k+ }# N
! w( V! \1 ^; A, b; a |
|