管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
4 Q4 }" {% {) u" ]6 R; U& f9 V
' z# V/ ^/ \ z$ _本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
# Y& ?+ _- {* q/ b6 L" k
; b. Z$ r; V7 S T8 X: o将域名转发到本地端口
# e4 B3 p0 j3 Q0 _, Y首先介绍最常用的,将域名转发到本地另一个端口上
8 m7 g* b" _6 ]" E- server{4 n7 e% S t ]& S6 L4 y4 Y
- listen 80;! m# e+ v# o% x9 R5 }% J
- server_name tomcat.cncml.com;, ^( i: j- W; n A
- index index.php index.html index.htm;6 \7 D; Y8 F3 X5 f2 u6 ~
) i) T' _0 k( h9 u6 A5 F8 I- location / {
7 w$ M" u5 C2 C3 g - proxy_pass http://127.0.0.1:8080; # 转发规则& Q" J' s$ @6 v& M
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
7 Q" e( Y+ R% ?9 ~ - proxy_set_header X-Real-IP $remote_addr;6 C, z. O4 J( N3 `; H. a
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2 _" Q7 {( m. W" X% E
- }+ m( n0 l) H: d {
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
; \. M8 C& o. T- w, F F2 {
$ R( {! z, ~% |3 F# N+ o" H! e. d将域名转发到另一个域名' O5 p: t2 ^( Q5 D# M# u
- server{
1 @7 e0 P5 b, O5 D" X - listen 80;! t G8 m1 A- @3 h) c* ]9 U
- server_name baidu.cncml.com;
7 U; `( M) s) T* H* X( ]# X - index index.php index.html index.htm;. J: i7 n/ s. n0 Q
4 G& d* d9 B g- location / {- f7 N' z( i0 o2 k/ |
- proxy_pass http://www.baidu.com;% h( q/ F& L! [7 ^; ^
- proxy_set_header Host $proxy_host;/ B( w% b" L1 D1 j- P8 H8 R
- proxy_set_header X-Real-IP $remote_addr;
9 ]3 ?) J2 ]8 J- I4 R9 o7 F) b" G/ Y3 @ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;( T1 `7 f2 W5 I) h7 W. C
- }3 J6 p, M' t' A- }7 I9 c
- }
复制代码 本地一个端口转发到另一个端口或另一个域名) C: P4 U7 I" x- Z- W" ?3 X
- server{; K) R3 |0 g% L- W9 [- q e5 |; s6 r
- listen 80;* Q0 V: k- ^0 b" I
- server_name 127.0.0.1; # 公网ip
# e9 H, m3 e1 F2 a' U5 @) |$ P - index index.php index.html index.htm;
7 S- K p4 M9 x3 }1 S. n" f! i - 8 O' a+ R# C" \+ _; S
- location / {
5 d5 L3 q" R* A$ z9 } - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
, w6 C5 Q. |' P* h' m# f; |; s) s - proxy_set_header Host $proxy_host;
" X, k% j5 R% [" Q - proxy_set_header X-Real-IP $remote_addr;7 ^! {& ^+ z o! E
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ H1 ]- z5 r( h. ] - }: _" ?& l- ]) d! I
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
- B0 V5 h2 {1 D% Y; ^
0 G4 e- n8 _# Y加 / 与不加 /7 a4 z! f. k5 P5 \# O, h l% f
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径) i+ d& @5 r9 ^, ?' h
& ~- J$ s( P/ Y
例如2 Q+ f6 a: o' @$ ]
" J! g! d4 z! x4 a" {( k加 /, k7 r9 Q3 r1 T! L) O! p
- server_name cncml.com+ t4 }# O- ~" a' Z1 `8 k/ Y3 E
- location /data/ {
& ?. W9 M8 z0 o$ \- n# w - proxy_pass http://127.0.0.1/;
6 u) a1 `$ A# ?$ r6 `' F4 g - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
0 ^' z+ [7 B8 J' t/ _6 z( I. y8 F( p, A% o
不加 /
% X! L& p8 s$ {. g! G O' T$ f- server_name cncml.com
- t3 W; Y& a s3 D$ E3 v - location /data/ {
]/ w3 Y5 `0 ~. G - proxy_pass http://127.0.0.1;
+ P3 E. J4 K6 \- }4 l( B" Y - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
0 s! z8 p1 i. _: K- }9 I% o
+ x2 C! Y8 B+ `$ _! n
' z; Y# m6 c U- o$ g |
|