管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发* _4 \% L' F" ] F1 J: K4 c! k0 g
+ u {! m9 e: B; k5 I
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则+ k) S9 n( g, ]6 D% z; c2 S8 z: U* o
1 E8 W9 A6 b7 w/ v
将域名转发到本地端口
8 {" g* d2 F- b& p1 }+ V1 e% R: v首先介绍最常用的,将域名转发到本地另一个端口上1 M; q" y" D! G7 k/ Z
- server{! ]5 {" [6 J7 x6 ?8 l; a
- listen 80;
) T$ H9 B4 S# } - server_name tomcat.cncml.com;
+ Z$ h! Q( s. R) \- {4 ^4 y - index index.php index.html index.htm;- t9 a6 W9 v( Z3 W1 H4 m
+ n( G# x* U/ u. K0 J- location / {
( l) M1 H( a) ~8 N - proxy_pass http://127.0.0.1:8080; # 转发规则+ e! j) O; `! m0 Q' b) j+ F
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
O2 z6 p& I2 u - proxy_set_header X-Real-IP $remote_addr;
2 A5 u# e# p, G, @* R |( U- A - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;1 C2 U7 C! Q7 r' f; N; S
- }
' c t. G6 {( P- g - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
8 c8 Q- j1 t9 n( j7 x6 Y* W6 E. `" K
将域名转发到另一个域名- Y9 X9 r( V2 O7 h. X# B7 c
- server{
# `5 a& o( k r2 [5 ^8 c& Q6 U# R0 R - listen 80;
6 W2 s. S, L% | - server_name baidu.cncml.com; R* L: S. G0 V! W$ o; i( I/ ~9 v
- index index.php index.html index.htm;
! o/ N' r; p$ ?5 C- s1 n5 l+ s( s9 v; p
& H5 a0 g* u. v" d8 g- location / {. U4 R* A- n! M
- proxy_pass http://www.baidu.com;
+ D E( a1 ?+ \, Q( @1 `2 e! O H - proxy_set_header Host $proxy_host;5 S9 h$ D( L+ i% ?/ r0 I" W: w+ y
- proxy_set_header X-Real-IP $remote_addr;( A- ^ b0 [0 N1 y
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;& ~4 p8 s* ]! ^ e. e
- }: `3 B. J1 C8 L
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
' b4 g, @1 {6 l/ y7 J: L9 X; n- server{; G1 q/ Z( e1 q! C
- listen 80;
- s3 v+ F3 G$ Y1 ~0 r8 G* _ - server_name 127.0.0.1; # 公网ip9 a( E: R) D/ r
- index index.php index.html index.htm;
! f7 r* }! v3 x* R+ R" n& _; x - 8 v8 m; A% S9 G1 z" n) g9 ^% _9 x, o
- location / {/ e# H" c, T/ Y( m
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
8 K' D) c$ F4 W - proxy_set_header Host $proxy_host;! X+ O1 E& x$ d$ h
- proxy_set_header X-Real-IP $remote_addr;5 m% s) L6 U2 ]1 }
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' t1 A2 |9 t0 z' x, ?8 d! k
- }9 T/ n& m: n/ w- f) Y
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com" ^/ {: s+ p1 t$ C$ S
7 d. W- j* O' x0 p3 N: D
加 / 与不加 /. c; l$ K1 H/ T; I' j: I
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
( I# e6 c* ?/ V0 a( b. R! [9 D# M+ h9 S) j: K6 @: m
例如
+ m- I( d1 r7 {( |' l& W# S$ U5 @6 M- y
加 /" [) {7 P1 K0 W |
- server_name cncml.com
; W( l0 w7 R, L - location /data/ {
+ l' ^0 t4 z# c: f" I+ I/ ` - proxy_pass http://127.0.0.1/;
+ k1 Z& y p+ W' j! A$ C) b - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html2 C4 U! a: r1 _7 m4 k+ v! A0 e
G4 ]2 p$ A+ a L4 \" Z不加 /% v% b/ J* ~! g# v& |- e
- server_name cncml.com0 E; F# Y1 f7 V* i$ A5 R
- location /data/ {
/ [) N7 {2 k3 L/ a0 }( e9 ` - proxy_pass http://127.0.0.1;
+ p% X4 { |. p, @% l; [ - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
, L b" ?- Z+ p, P' [+ u
% r) W6 q6 m! D; ~$ M T% Y; |+ y: i
|
|