管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
; k; \( k. X/ L& g2 \+ ]8 H0 k! f7 i6 _! k! |
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则! I; w. g) _# E$ v
; L: L% ~8 N# f& m2 k, X; h
将域名转发到本地端口; d, Q1 s7 `+ U
首先介绍最常用的,将域名转发到本地另一个端口上! `( y9 ? K. x8 k% v# m, @4 J
- server{
- ~7 c \1 t8 A4 _5 b& [ - listen 80;
3 c1 [* f! z% `$ w - server_name tomcat.cncml.com;
4 g R" I6 v' i2 P2 A6 F - index index.php index.html index.htm;
0 e7 q5 R$ V7 _; z6 l - q1 o( s# g9 N% H' B! m
- location / {
3 t! u# ~2 e% ?5 Y2 T# Y - proxy_pass http://127.0.0.1:8080; # 转发规则
1 {7 N6 H3 v& P3 Q! F, | - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
2 J; g. P$ g7 M# F: q - proxy_set_header X-Real-IP $remote_addr;
& F* {: b, \& {2 V0 ]# V - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;" l5 T/ n& `3 a- J! v7 V. E
- }
" g# J' g/ K9 k - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
+ D# t! i4 k6 l; \; g6 R/ c: |: m$ C) @, g
将域名转发到另一个域名
( }2 y u" I. C% r. n- server{
0 x; P7 E: W* r- [4 d6 u2 U - listen 80;+ D, }% k( i" c/ ^
- server_name baidu.cncml.com; K2 \0 T5 w6 t: Z8 F% `
- index index.php index.html index.htm;
+ s! J; J4 o- ?# A6 r5 M
$ Y: F- k8 o- [/ g4 p ^. E- location / {
& N2 a! ?5 z* e5 f - proxy_pass http://www.baidu.com;9 {/ H( q/ R4 Q$ z
- proxy_set_header Host $proxy_host;
2 G* z6 o: R" p9 t- Y/ h' F - proxy_set_header X-Real-IP $remote_addr;
1 n4 M! n& l' N" ?7 l2 h - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;8 H( g" ]9 L7 s* J0 w- e; S* s' d
- }
0 O* k0 L7 ~( Q* f ~ s - }
复制代码 本地一个端口转发到另一个端口或另一个域名
. p3 d% [, ~' h- server{
# R$ M3 I s* S0 }8 `9 l; N, X% I0 j - listen 80;
$ w9 {! k( u8 ^! k - server_name 127.0.0.1; # 公网ip( o% L6 s" t& o1 S7 [. }
- index index.php index.html index.htm;& x+ c( g( O' N
- 4 T* A6 ?! e+ Z4 T1 B& b Q6 [
- location / {* {" g$ {, r9 L& e! M1 r
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
% @$ p8 c' B# u5 Y% ? - proxy_set_header Host $proxy_host;( I- z% H8 A/ ^. u3 Y1 h) P z
- proxy_set_header X-Real-IP $remote_addr;2 U3 z7 z% e5 e; M6 e
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
$ B3 x$ R+ Q4 I2 u - }" f6 ^2 A0 o! i! U5 C- b
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com4 v) w$ o# e# B) J* J: I
+ R9 [: m M# X5 v
加 / 与不加 /! g2 ^" `1 ^' p @' c
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径: [3 I! m* c0 h# Z. x
u& D4 H5 `7 j! `4 S
例如
9 d( m1 F' d0 S0 n
" o, F: d$ H. l" d& k加 /
& j) t$ S4 x' E- server_name cncml.com" V" }! i; M* N% H$ v
- location /data/ {. h& C8 b* Y7 }3 k' d* @
- proxy_pass http://127.0.0.1/;3 g4 ]6 L, ?. J
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
/ }9 ] u2 w( a1 X/ w: F5 E1 e. W4 B2 Z6 R1 Y( s
不加 /0 p0 O! m5 @" v2 |; K7 i P* Z
- server_name cncml.com
# Z6 V6 A1 o# q3 t2 A - location /data/ {
' f, p1 a4 O& ], j+ @8 @6 c5 i - proxy_pass http://127.0.0.1;' u0 s. Z, ?8 q4 u2 l
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
& S' j6 ]5 o% P- {5 K! ]
. Q4 s: `! z; N+ W. G
Z; s- F4 g2 v. }. I |
|